@axzydev/axzy_ui_system 1.4.8 → 1.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -11
- package/dist/index.cjs +1826 -1351
- 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 +115 -14
- package/dist/index.d.ts +115 -14
- package/dist/index.js +1481 -1010
- package/dist/index.js.map +1 -1
- package/dist/layered.css +1 -1
- package/package.json +3 -16
- package/src/App.tsx +90 -73
- package/src/components/atoms/badget/badget.tsx +23 -5
- package/src/components/atoms/chip/chip.tsx +3 -1
- package/src/components/atoms/image/image.tsx +3 -1
- package/src/components/atoms/input/input.tsx +8 -5
- package/src/components/atoms/loader/loader.tsx +3 -1
- package/src/components/atoms/slide/slide.props.ts +12 -0
- package/src/components/atoms/slide/slide.tsx +3 -0
- package/src/components/molecules/alert/alert.tsx +3 -1
- package/src/components/molecules/breadcrumbs/breadcrumbs.tsx +3 -1
- package/src/components/molecules/calendar/calendar.tsx +9 -6
- package/src/components/molecules/card/card.tsx +5 -2
- package/src/components/molecules/chip-input/chip-input.tsx +9 -7
- package/src/components/molecules/date-picker/datePicker.tsx +9 -9
- package/src/components/molecules/dropdown-menu/dropdown-menu.props.ts +1 -1
- package/src/components/molecules/dropdown-menu/dropdown-menu.tsx +6 -3
- package/src/components/molecules/field/field.tsx +3 -1
- package/src/components/molecules/form-header/form-header.tsx +3 -1
- package/src/components/molecules/line-bar-chart/line-bar-chart.props.ts +2 -2
- package/src/components/molecules/line-bar-chart/line-bar-chart.tsx +20 -15
- package/src/components/molecules/masked-input/masked-input.tsx +3 -1
- package/src/components/molecules/multi-select/multi-select.tsx +12 -9
- package/src/components/molecules/pagination/pagination.tsx +11 -5
- package/src/components/molecules/search-select/search-select.tsx +11 -9
- package/src/components/molecules/select/select.tsx +6 -4
- package/src/components/molecules/stepper/stepper.tsx +6 -4
- package/src/components/molecules/table/table.tsx +30 -28
- package/src/components/molecules/time-picker/timePicker.tsx +8 -6
- package/src/components/molecules/wysiwyg/wysiwyg.tsx +23 -12
- package/src/components/organisms/confirm-dialog/confirm-dialog.props.ts +4 -4
- package/src/components/organisms/confirm-dialog/confirm-dialog.tsx +16 -8
- package/src/components/organisms/data-table/dataTable.tsx +31 -25
- package/src/components/organisms/dialog/dialog.tsx +3 -0
- package/src/components/organisms/drawer/drawer.tsx +3 -0
- package/src/components/organisms/dropfile/dropfile.tsx +19 -17
- package/src/components/organisms/form-builder/fieldRenderer.tsx +4 -2
- package/src/components/organisms/navbar/navbar.tsx +4 -2
- package/src/components/organisms/page-header/page-header.tsx +3 -1
- package/src/components/organisms/searchTable/components/PaginationControls.tsx +8 -6
- package/src/components/organisms/searchTable/components/PaginationInfo.tsx +3 -1
- package/src/components/organisms/searchTable/components/SearchAndSortBar.tsx +7 -5
- package/src/components/organisms/searchTable/components/SearchInput.tsx +4 -2
- package/src/components/organisms/searchTable/components/SortButton.tsx +13 -11
- package/src/components/organisms/searchTable/components/TableEmptyState.tsx +4 -2
- package/src/components/organisms/searchTable/components/TableRow.tsx +6 -4
- package/src/components/organisms/searchTable/searchTable.tsx +4 -2
- package/src/components/organisms/sidebar/sidebar.props.ts +1 -1
- package/src/components/organisms/sidebar/sidebar.tsx +9 -4
- package/src/components/organisms/toast/toast.tsx +3 -1
- package/src/components/organisms/topbar/topbar.tsx +4 -2
- package/src/components/templates/page/page.props.ts +4 -4
- package/src/components/templates/page/page.tsx +6 -4
- package/src/components/theme-provider/themeProvider.tsx +28 -17
- package/src/dev.css +77 -2
- package/src/global.d.ts +10 -0
- package/src/i18n/context.ts +9 -0
- package/src/i18n/index.ts +22 -0
- package/src/i18n/locales/en.ts +163 -0
- package/src/i18n/locales/es.ts +165 -0
- package/src/i18n/provider.tsx +44 -0
- package/src/i18n/translator.ts +82 -0
- package/src/i18n/types.ts +54 -0
- package/src/i18n/useITTranslation.ts +20 -0
- package/src/index.css +0 -1
- package/src/index.ts +7 -1
- package/src/sandbox/LandingShowcase.tsx +224 -580
- package/src/sandbox/NotFoundShowcase.tsx +51 -36
- package/src/sandbox/TopbarSearch.tsx +6 -4
- package/src/sandbox/controls.tsx +180 -0
- package/src/sandbox/i18n.ts +1929 -0
- package/src/sandbox/icons.tsx +25 -0
- package/src/sandbox/locale.tsx +72 -0
- package/src/sandbox/ui.tsx +377 -0
- package/src/sandbox/useHashRoute.ts +46 -10
- package/src/showcases/DataShowcases.tsx +103 -87
- package/src/showcases/FeedbackShowcases.tsx +37 -30
- package/src/showcases/FormShowcases.tsx +302 -214
- package/src/showcases/GettingStartedShowcase.tsx +151 -145
- package/src/showcases/HelpShowcase.tsx +126 -128
- package/src/showcases/HomeShowcase.tsx +678 -482
- package/src/showcases/LayoutPrimitivesShowcases.tsx +129 -114
- package/src/showcases/NavigationShowcases.tsx +45 -37
- package/src/showcases/PageShowcases.tsx +171 -152
- package/src/showcases/ProductoDetalle.tsx +272 -129
- package/src/showcases/ShowcaseLayout.tsx +270 -216
- package/src/showcases/SizesShowcase.tsx +123 -64
- package/src/showcases/StructureShowcases.tsx +157 -131
- package/src/showcases/portfolioUi.tsx +153 -0
- package/src/showcases/techIcons.ts +3 -0
- package/src/utils/table.utils.ts +10 -2
- package/src/components/atoms/avatar/avatar.doc.mdx +0 -48
- package/src/components/atoms/avatar/avatar.stories.tsx +0 -64
- package/src/components/atoms/badget/badget.doc.mdx +0 -46
- package/src/components/atoms/badget/badget.stories.tsx +0 -75
- package/src/components/atoms/button/button.doc.mdx +0 -59
- package/src/components/atoms/button/button.stories.tsx +0 -173
- package/src/components/atoms/checkbox/checkbox.doc.mdx +0 -54
- package/src/components/atoms/checkbox/checkbox.stories.tsx +0 -53
- package/src/components/atoms/chip/chip.doc.mdx +0 -47
- package/src/components/atoms/chip/chip.stories.tsx +0 -64
- package/src/components/atoms/divider/divider.doc.mdx +0 -42
- package/src/components/atoms/divider/divider.stories.tsx +0 -33
- package/src/components/atoms/flex/flex.doc.mdx +0 -59
- package/src/components/atoms/flex/flex.stories.tsx +0 -70
- package/src/components/atoms/grid/grid.doc.mdx +0 -54
- package/src/components/atoms/grid/grid.stories.tsx +0 -71
- package/src/components/atoms/image/image.doc.mdx +0 -44
- package/src/components/atoms/image/image.stories.tsx +0 -48
- package/src/components/atoms/input/input.doc.mdx +0 -70
- package/src/components/atoms/input/input.stories.tsx +0 -113
- package/src/components/atoms/input-number/input-number.doc.mdx +0 -74
- package/src/components/atoms/input-number/input-number.stories.tsx +0 -111
- package/src/components/atoms/loader/loader.doc.mdx +0 -43
- package/src/components/atoms/loader/loader.stories.tsx +0 -104
- package/src/components/atoms/popover/popover.doc.mdx +0 -53
- package/src/components/atoms/popover/popover.stories.tsx +0 -24
- package/src/components/atoms/progress/progress.doc.mdx +0 -48
- package/src/components/atoms/progress/progress.stories.tsx +0 -39
- package/src/components/atoms/radio/radio.doc.mdx +0 -62
- package/src/components/atoms/radio/radio.stories.tsx +0 -48
- package/src/components/atoms/segmented-control/segmented-control.doc.mdx +0 -60
- package/src/components/atoms/segmented-control/segmented-control.stories.tsx +0 -62
- package/src/components/atoms/skeleton/skeleton.doc.mdx +0 -43
- package/src/components/atoms/skeleton/skeleton.stories.tsx +0 -29
- package/src/components/atoms/slide/slide.doc.mdx +0 -46
- package/src/components/atoms/slide/slide.stories.tsx +0 -120
- package/src/components/atoms/slider/slider.doc.mdx +0 -49
- package/src/components/atoms/slider/slider.stories.tsx +0 -29
- package/src/components/atoms/stack/stack.doc.mdx +0 -126
- package/src/components/atoms/stack/stack.stories.tsx +0 -283
- package/src/components/atoms/text/text.doc.mdx +0 -41
- package/src/components/atoms/text/text.stories.tsx +0 -66
- package/src/components/atoms/textarea/textarea.doc.mdx +0 -64
- package/src/components/atoms/textarea/textarea.stories.tsx +0 -26
- package/src/components/atoms/tooltip/tooltip.doc.mdx +0 -47
- package/src/components/atoms/tooltip/tooltip.stories.tsx +0 -19
- package/src/components/isolation/isolation.stories.tsx +0 -202
- package/src/components/molecules/accordion/accordion.doc.mdx +0 -47
- package/src/components/molecules/accordion/accordion.stories.tsx +0 -68
- package/src/components/molecules/alert/alert.doc.mdx +0 -48
- package/src/components/molecules/alert/alert.stories.tsx +0 -40
- package/src/components/molecules/breadcrumbs/breadcrumbs.doc.mdx +0 -57
- package/src/components/molecules/breadcrumbs/breadcrumbs.stories.tsx +0 -20
- package/src/components/molecules/calendar/calendar.doc.mdx +0 -76
- package/src/components/molecules/calendar/calendar.stories.tsx +0 -90
- package/src/components/molecules/card/card.doc.mdx +0 -54
- package/src/components/molecules/card/card.stories.tsx +0 -57
- package/src/components/molecules/chip-input/chip-input.doc.mdx +0 -44
- package/src/components/molecules/chip-input/chip-input.stories.tsx +0 -52
- package/src/components/molecules/date-picker/date-picker.doc.mdx +0 -65
- package/src/components/molecules/date-picker/date-picker.stories.tsx +0 -88
- package/src/components/molecules/dropdown-menu/dropdown-menu.doc.mdx +0 -46
- package/src/components/molecules/dropdown-menu/dropdown-menu.stories.tsx +0 -41
- package/src/components/molecules/empty-state/empty-state.doc.mdx +0 -50
- package/src/components/molecules/empty-state/empty-state.stories.tsx +0 -19
- package/src/components/molecules/field/field.doc.mdx +0 -43
- package/src/components/molecules/field/field.stories.tsx +0 -42
- package/src/components/molecules/form-header/form-header.doc.mdx +0 -38
- package/src/components/molecules/form-header/form-header.stories.tsx +0 -52
- package/src/components/molecules/masked-input/masked-input.doc.mdx +0 -78
- package/src/components/molecules/masked-input/masked-input.stories.tsx +0 -126
- package/src/components/molecules/multi-select/multi-select.doc.mdx +0 -55
- package/src/components/molecules/multi-select/multi-select.stories.tsx +0 -59
- package/src/components/molecules/pagination/pagination.doc.mdx +0 -62
- package/src/components/molecules/pagination/pagination.stories.tsx +0 -110
- package/src/components/molecules/search-select/search-select.doc.mdx +0 -77
- package/src/components/molecules/search-select/search-select.stories.tsx +0 -146
- package/src/components/molecules/select/select.doc.mdx +0 -75
- package/src/components/molecules/select/select.stories.tsx +0 -85
- package/src/components/molecules/stat-card/stat-card.doc.mdx +0 -48
- package/src/components/molecules/stat-card/stat-card.stories.tsx +0 -40
- package/src/components/molecules/stepper/stepper.doc.mdx +0 -54
- package/src/components/molecules/stepper/stepper.stories.tsx +0 -154
- package/src/components/molecules/table/table.doc.mdx +0 -140
- package/src/components/molecules/table/table.stories.tsx +0 -402
- package/src/components/molecules/tabs/tabs.doc.mdx +0 -52
- package/src/components/molecules/tabs/tabs.stories.tsx +0 -31
- package/src/components/molecules/time-picker/timePicker.doc.mdx +0 -68
- package/src/components/molecules/time-picker/timePicker.stories.tsx +0 -130
- package/src/components/molecules/wysiwyg/wysiwyg.stories.tsx +0 -95
- package/src/components/organisms/confirm-dialog/confirm-dialog.doc.mdx +0 -60
- package/src/components/organisms/confirm-dialog/confirm-dialog.stories.tsx +0 -32
- package/src/components/organisms/data-table/ITDataTable.doc.mdx +0 -132
- package/src/components/organisms/data-table/ITDataTable.stories.tsx +0 -353
- package/src/components/organisms/dialog/dialog.doc.mdx +0 -54
- package/src/components/organisms/dialog/dialog.stories.tsx +0 -126
- package/src/components/organisms/drawer/drawer.doc.mdx +0 -59
- package/src/components/organisms/drawer/drawer.stories.tsx +0 -40
- package/src/components/organisms/dropfile/dropfile.doc.mdx +0 -74
- package/src/components/organisms/dropfile/dropfile.stories.tsx +0 -93
- package/src/components/organisms/form-builder/formBuilder.doc.mdx +0 -251
- package/src/components/organisms/form-builder/formBuilder.stories.tsx +0 -914
- package/src/components/organisms/navbar/navbar.doc.mdx +0 -77
- package/src/components/organisms/navbar/navbar.stories.tsx +0 -83
- package/src/components/organisms/page-header/page-header.doc.mdx +0 -54
- package/src/components/organisms/page-header/page-header.stories.tsx +0 -74
- package/src/components/organisms/searchTable/searchTable.doc.mdx +0 -79
- package/src/components/organisms/searchTable/searchTable.stories.tsx +0 -73
- package/src/components/organisms/sidebar/sidebar.doc.mdx +0 -176
- package/src/components/organisms/sidebar/sidebar.stories.tsx +0 -234
- package/src/components/organisms/toast/toast.doc.mdx +0 -50
- package/src/components/organisms/toast/toast.stories.tsx +0 -137
- package/src/components/organisms/topbar/topbar.doc.mdx +0 -72
- package/src/components/organisms/topbar/topbar.stories.tsx +0 -79
- package/src/components/organisms/triple-filter/tripleFilter.doc.mdx +0 -62
- package/src/components/organisms/triple-filter/tripleFilter.stories.tsx +0 -31
- package/src/components/templates/layout/layout.doc.mdx +0 -53
- package/src/components/templates/layout/layout.stories.tsx +0 -113
- package/src/components/templates/page/page.doc.mdx +0 -86
- package/src/components/templates/page/page.stories.tsx +0 -97
- package/src/components/theme-provider/themeProvider.doc.mdx +0 -85
- package/src/components/theme-provider/themeProvider.stories.tsx +0 -58
|
@@ -30,8 +30,10 @@ import ITText from "@/components/atoms/text/text";
|
|
|
30
30
|
import ITTable from "@/components/molecules/table/table";
|
|
31
31
|
import type { Column } from "@/components/molecules/table/table.props";
|
|
32
32
|
import { ShowcaseLayout } from "./ShowcaseLayout";
|
|
33
|
+
import { useITTranslation } from "@/i18n";
|
|
33
34
|
|
|
34
35
|
export const PageHeaderShowcase = () => {
|
|
36
|
+
const { t } = useITTranslation();
|
|
35
37
|
const [showBack, setShowBack] = useState(true);
|
|
36
38
|
const [showBreadcrumbs, setShowBreadcrumbs] = useState(true);
|
|
37
39
|
const [showIcon, setShowIcon] = useState(true);
|
|
@@ -60,9 +62,9 @@ export const PageHeaderShowcase = () => {
|
|
|
60
62
|
const actionEl =
|
|
61
63
|
actionsVariant === "none" ? undefined : (
|
|
62
64
|
<ITFlex gap={2}>
|
|
63
|
-
<ITButton label="
|
|
65
|
+
<ITButton label={t("showcase.pages.addMember")} variant="filled" color="primary" size="sm" />
|
|
64
66
|
{(actionsVariant === "double" || actionsVariant === "full") && (
|
|
65
|
-
<ITButton label="
|
|
67
|
+
<ITButton label={t("showcase.pages.export")} variant="outlined" color="gray" size="sm" />
|
|
66
68
|
)}
|
|
67
69
|
</ITFlex>
|
|
68
70
|
);
|
|
@@ -70,20 +72,20 @@ export const PageHeaderShowcase = () => {
|
|
|
70
72
|
return (
|
|
71
73
|
<ShowcaseLayout
|
|
72
74
|
title="ITPageHeader"
|
|
73
|
-
description="
|
|
75
|
+
description={t("showcase.pages.pageHeaderDesc")}
|
|
74
76
|
code={buildCode()}
|
|
75
77
|
demo={
|
|
76
78
|
<div className="w-full flex flex-col">
|
|
77
79
|
<div className="border border-slate-200 dark:border-slate-700 rounded-xl bg-white dark:bg-slate-900/50 overflow-hidden">
|
|
78
80
|
<div className="p-6 pb-4">
|
|
79
81
|
<ITPageHeader
|
|
80
|
-
title="
|
|
81
|
-
description={showDesc ? "
|
|
82
|
+
title={t("showcase.pages.teamMembers")}
|
|
83
|
+
description={showDesc ? t("showcase.pages.teamDesc") : undefined}
|
|
82
84
|
icon={showIcon ? <FaUsers size={20} /> : undefined}
|
|
83
85
|
iconColor={showIcon ? iconColor : undefined}
|
|
84
86
|
breadcrumbs={showBreadcrumbs ? [
|
|
85
|
-
{ label: "
|
|
86
|
-
{ label: "
|
|
87
|
+
{ label: t("showcase.pages.crumbAdmin"), href: "#" },
|
|
88
|
+
{ label: t("showcase.pages.crumbTeam") },
|
|
87
89
|
] : undefined}
|
|
88
90
|
backAction={showBack ? () => {} : undefined}
|
|
89
91
|
actions={actionEl}
|
|
@@ -98,7 +100,7 @@ export const PageHeaderShowcase = () => {
|
|
|
98
100
|
<FaSearch size={12} className="absolute left-3 top-1/2 -translate-y-1/2 text-slate-400" />
|
|
99
101
|
<input
|
|
100
102
|
type="text"
|
|
101
|
-
placeholder="
|
|
103
|
+
placeholder={t("showcase.pages.searchByNameEmail")}
|
|
102
104
|
className="w-full pl-9 pr-3 py-2 text-xs border border-slate-200 dark:border-slate-700 rounded-lg bg-slate-50 dark:bg-slate-800 text-slate-800 dark:text-white outline-none focus:ring-2 focus:ring-primary-500"
|
|
103
105
|
/>
|
|
104
106
|
</div>
|
|
@@ -107,7 +109,7 @@ export const PageHeaderShowcase = () => {
|
|
|
107
109
|
onChange={() => {}}
|
|
108
110
|
className="px-3 py-2 text-xs border border-slate-200 dark:border-slate-700 rounded-lg bg-slate-50 dark:bg-slate-800 text-slate-700 dark:text-slate-200 outline-none focus:ring-2 focus:ring-primary-500"
|
|
109
111
|
>
|
|
110
|
-
<option value="all">
|
|
112
|
+
<option value="all">{t("showcase.pages.allRoles")}</option>
|
|
111
113
|
<option value="admin">Admin</option>
|
|
112
114
|
<option value="editor">Editor</option>
|
|
113
115
|
<option value="viewer">Viewer</option>
|
|
@@ -117,12 +119,12 @@ export const PageHeaderShowcase = () => {
|
|
|
117
119
|
onChange={() => {}}
|
|
118
120
|
className="px-3 py-2 text-xs border border-slate-200 dark:border-slate-700 rounded-lg bg-slate-50 dark:bg-slate-800 text-slate-700 dark:text-slate-200 outline-none focus:ring-2 focus:ring-primary-500"
|
|
119
121
|
>
|
|
120
|
-
<option value="all">
|
|
122
|
+
<option value="all">{t("showcase.pages.allStatus")}</option>
|
|
121
123
|
<option value="active">Active</option>
|
|
122
124
|
<option value="pending">Pending</option>
|
|
123
125
|
<option value="inactive">Inactive</option>
|
|
124
126
|
</select>
|
|
125
|
-
<ITButton label="
|
|
127
|
+
<ITButton label={t("showcase.pages.clear")} variant="text" color="gray" size="sm" />
|
|
126
128
|
</ITFlex>
|
|
127
129
|
</div>
|
|
128
130
|
)}
|
|
@@ -143,19 +145,25 @@ export const PageHeaderShowcase = () => {
|
|
|
143
145
|
controls={
|
|
144
146
|
<ITStack spacing={4}>
|
|
145
147
|
<div>
|
|
146
|
-
<p className="text-xs font-bold uppercase tracking-wider text-slate-400 dark:text-slate-500 mb-2">
|
|
148
|
+
<p className="text-xs font-bold uppercase tracking-wider text-slate-400 dark:text-slate-500 mb-2">{t("showcase.pages.headerElements")}</p>
|
|
147
149
|
<ITFlex direction="column" gap={3}>
|
|
148
150
|
<ITFlex justify="between" align="center">
|
|
149
|
-
<span className="text-
|
|
150
|
-
<ITSlideToggle isOn={showBack} onToggle={setShowBack} size="sm"
|
|
151
|
+
<span className="font-mono text-[11px] font-medium uppercase tracking-[0.14em] text-slate-500 dark:text-slate-400">{t("showcase.pages.backButton")}</span>
|
|
152
|
+
<ITSlideToggle isOn={showBack} onToggle={setShowBack} size="sm"
|
|
153
|
+
ariaLabel={t("showcase.pages.backButton")}
|
|
154
|
+
/>
|
|
151
155
|
</ITFlex>
|
|
152
156
|
<ITFlex justify="between" align="center">
|
|
153
|
-
<span className="text-
|
|
154
|
-
<ITSlideToggle isOn={showBreadcrumbs} onToggle={setShowBreadcrumbs} size="sm"
|
|
157
|
+
<span className="font-mono text-[11px] font-medium uppercase tracking-[0.14em] text-slate-500 dark:text-slate-400">{t("showcase.pages.breadcrumbs")}</span>
|
|
158
|
+
<ITSlideToggle isOn={showBreadcrumbs} onToggle={setShowBreadcrumbs} size="sm"
|
|
159
|
+
ariaLabel={t("showcase.pages.breadcrumbs")}
|
|
160
|
+
/>
|
|
155
161
|
</ITFlex>
|
|
156
162
|
<ITFlex justify="between" align="center">
|
|
157
|
-
<span className="text-
|
|
158
|
-
<ITSlideToggle isOn={showIcon} onToggle={setShowIcon} size="sm"
|
|
163
|
+
<span className="font-mono text-[11px] font-medium uppercase tracking-[0.14em] text-slate-500 dark:text-slate-400">{t("showcase.pages.icon")}</span>
|
|
164
|
+
<ITSlideToggle isOn={showIcon} onToggle={setShowIcon} size="sm"
|
|
165
|
+
ariaLabel={t("showcase.pages.icon")}
|
|
166
|
+
/>
|
|
159
167
|
</ITFlex>
|
|
160
168
|
{showIcon && (
|
|
161
169
|
<ITFlex gap={2} align="center">
|
|
@@ -172,14 +180,16 @@ export const PageHeaderShowcase = () => {
|
|
|
172
180
|
</ITFlex>
|
|
173
181
|
)}
|
|
174
182
|
<ITFlex justify="between" align="center">
|
|
175
|
-
<span className="text-
|
|
176
|
-
<ITSlideToggle isOn={showDesc} onToggle={setShowDesc} size="sm"
|
|
183
|
+
<span className="font-mono text-[11px] font-medium uppercase tracking-[0.14em] text-slate-500 dark:text-slate-400">{t("showcase.pages.description")}</span>
|
|
184
|
+
<ITSlideToggle isOn={showDesc} onToggle={setShowDesc} size="sm"
|
|
185
|
+
ariaLabel={t("showcase.pages.description")}
|
|
186
|
+
/>
|
|
177
187
|
</ITFlex>
|
|
178
188
|
</ITFlex>
|
|
179
189
|
</div>
|
|
180
190
|
|
|
181
191
|
<div>
|
|
182
|
-
<p className="text-xs font-bold uppercase tracking-wider text-slate-400 dark:text-slate-500 mb-2">
|
|
192
|
+
<p className="text-xs font-bold uppercase tracking-wider text-slate-400 dark:text-slate-500 mb-2">{t("showcase.pages.actions")}</p>
|
|
183
193
|
<ITFlex gap={2} wrap="wrap">
|
|
184
194
|
{(["none", "single", "double", "full"] as const).map((v) => (
|
|
185
195
|
<ITButton
|
|
@@ -195,10 +205,12 @@ export const PageHeaderShowcase = () => {
|
|
|
195
205
|
</div>
|
|
196
206
|
|
|
197
207
|
<div>
|
|
198
|
-
<p className="text-xs font-bold uppercase tracking-wider text-slate-400 dark:text-slate-500 mb-2">
|
|
208
|
+
<p className="text-xs font-bold uppercase tracking-wider text-slate-400 dark:text-slate-500 mb-2">{t("showcase.pages.filters")}</p>
|
|
199
209
|
<ITFlex justify="between" align="center">
|
|
200
|
-
<span className="text-
|
|
201
|
-
<ITSlideToggle isOn={showFilters} onToggle={setShowFilters} size="sm"
|
|
210
|
+
<span className="font-mono text-[11px] font-medium uppercase tracking-[0.14em] text-slate-500 dark:text-slate-400">{t("showcase.pages.showFilterBar")}</span>
|
|
211
|
+
<ITSlideToggle isOn={showFilters} onToggle={setShowFilters} size="sm"
|
|
212
|
+
ariaLabel={t("showcase.pages.showFilterBar")}
|
|
213
|
+
/>
|
|
202
214
|
</ITFlex>
|
|
203
215
|
</div>
|
|
204
216
|
</ITStack>
|
|
@@ -207,20 +219,20 @@ export const PageHeaderShowcase = () => {
|
|
|
207
219
|
<ITStack spacing={6}>
|
|
208
220
|
{/* 1. Team management — full header + search + filter bar + user rows */}
|
|
209
221
|
<div>
|
|
210
|
-
<
|
|
211
|
-
<div className="border border-slate-200 dark:border-slate-
|
|
222
|
+
<h3 className="mb-3 font-mono text-[11px] font-medium uppercase tracking-[0.14em] text-slate-500 dark:text-slate-400">{t("showcase.pages.galleryTeamManagement")}</h3>
|
|
223
|
+
<div className="overflow-hidden rounded-[10px] border border-slate-200 bg-white dark:border-slate-800 dark:bg-slate-950">
|
|
212
224
|
<div className="p-5 pb-3">
|
|
213
225
|
<ITPageHeader
|
|
214
|
-
title="
|
|
215
|
-
description="
|
|
226
|
+
title={t("showcase.pages.teamMembers")}
|
|
227
|
+
description={t("showcase.pages.teamDesc")}
|
|
216
228
|
icon={<FaUsers size={20} />}
|
|
217
229
|
iconColor="#6366f1"
|
|
218
|
-
breadcrumbs={[{ label: "
|
|
230
|
+
breadcrumbs={[{ label: t("showcase.pages.crumbAdmin"), href: "#" }, { label: t("showcase.pages.crumbTeam") }]}
|
|
219
231
|
backAction={() => {}}
|
|
220
232
|
actions={
|
|
221
233
|
<ITFlex gap={2}>
|
|
222
|
-
<ITButton label="
|
|
223
|
-
<ITButton label="
|
|
234
|
+
<ITButton label={t("showcase.pages.export")} variant="outlined" color="gray" size="sm" />
|
|
235
|
+
<ITButton label={t("showcase.pages.addMember")} variant="filled" color="primary" size="sm" />
|
|
224
236
|
</ITFlex>
|
|
225
237
|
}
|
|
226
238
|
/>
|
|
@@ -228,15 +240,15 @@ export const PageHeaderShowcase = () => {
|
|
|
228
240
|
<ITFlex gap={3} align="center" wrap="wrap" className="px-5 pb-3">
|
|
229
241
|
<div className="flex-1 min-w-[180px] relative">
|
|
230
242
|
<FaSearch size={12} className="absolute left-3 top-1/2 -translate-y-1/2 text-slate-400" />
|
|
231
|
-
<input type="text" placeholder="
|
|
243
|
+
<input type="text" placeholder={t("showcase.pages.searchShort")} className="w-full pl-9 pr-3 py-2 text-xs border border-slate-200 dark:border-slate-700 rounded-lg bg-slate-50 dark:bg-slate-800 outline-none focus:ring-2 focus:ring-primary-500 text-slate-800 dark:text-white" />
|
|
232
244
|
</div>
|
|
233
245
|
<select className="px-3 py-2 text-xs border border-slate-200 dark:border-slate-700 rounded-lg bg-slate-50 dark:bg-slate-800 text-slate-700 dark:text-slate-200 outline-none">
|
|
234
|
-
<option>
|
|
246
|
+
<option>{t("showcase.pages.allRoles")}</option>
|
|
235
247
|
<option>Admin</option>
|
|
236
248
|
<option>Editor</option>
|
|
237
249
|
</select>
|
|
238
250
|
<select className="px-3 py-2 text-xs border border-slate-200 dark:border-slate-700 rounded-lg bg-slate-50 dark:bg-slate-800 text-slate-700 dark:text-slate-200 outline-none">
|
|
239
|
-
<option>
|
|
251
|
+
<option>{t("showcase.pages.allStatus")}</option>
|
|
240
252
|
<option>Active</option>
|
|
241
253
|
<option>Pending</option>
|
|
242
254
|
</select>
|
|
@@ -270,35 +282,35 @@ export const PageHeaderShowcase = () => {
|
|
|
270
282
|
|
|
271
283
|
{/* 2. Detail page — back + breadcrumbs + back button + save/cancel */}
|
|
272
284
|
<div>
|
|
273
|
-
<
|
|
274
|
-
<div className="border border-slate-200 dark:border-slate-
|
|
285
|
+
<h3 className="mb-3 font-mono text-[11px] font-medium uppercase tracking-[0.14em] text-slate-500 dark:text-slate-400">{t("showcase.pages.galleryDetailEdit")}</h3>
|
|
286
|
+
<div className="overflow-hidden rounded-[10px] border border-slate-200 bg-white dark:border-slate-800 dark:bg-slate-950">
|
|
275
287
|
<div className="p-5 pb-3">
|
|
276
288
|
<ITPageHeader
|
|
277
|
-
title="
|
|
278
|
-
description="
|
|
289
|
+
title={t("showcase.pages.editProduct")}
|
|
290
|
+
description={t("showcase.pages.editProductDesc")}
|
|
279
291
|
icon={<FaBoxOpen size={20} />}
|
|
280
292
|
iconColor="#ec4899"
|
|
281
|
-
breadcrumbs={[{ label: "
|
|
293
|
+
breadcrumbs={[{ label: t("showcase.pages.crumbProducts"), href: "#" }, { label: "MacBook Pro 16", href: "#" }, { label: t("showcase.pages.crumbEdit") }]}
|
|
282
294
|
backAction={() => {}}
|
|
283
295
|
actions={
|
|
284
296
|
<ITFlex gap={2}>
|
|
285
|
-
<ITButton label="
|
|
286
|
-
<ITButton label="
|
|
297
|
+
<ITButton label={t("showcase.common.cancel")} variant="outlined" color="gray" size="sm" />
|
|
298
|
+
<ITButton label={t("showcase.pages.saveChanges")} variant="filled" color="primary" size="sm" />
|
|
287
299
|
</ITFlex>
|
|
288
300
|
}
|
|
289
301
|
/>
|
|
290
302
|
</div>
|
|
291
303
|
<ITGrid container spacing={3} className="px-5 pb-5">
|
|
292
304
|
<ITGrid item xs={12} md={6}>
|
|
293
|
-
<label className="text-
|
|
305
|
+
<label className="mb-1 block font-mono text-[10px] font-medium uppercase tracking-[0.14em] text-slate-500 dark:text-slate-400">{t("showcase.pages.productName")}</label>
|
|
294
306
|
<input type="text" defaultValue="MacBook Pro 16" className="w-full border border-slate-200 dark:border-slate-700 rounded-lg px-3 py-2 text-sm bg-white dark:bg-slate-800 text-slate-800 dark:text-white outline-none focus:ring-2 focus:ring-primary-500" />
|
|
295
307
|
</ITGrid>
|
|
296
308
|
<ITGrid item xs={12} md={3}>
|
|
297
|
-
<label className="text-
|
|
309
|
+
<label className="mb-1 block font-mono text-[10px] font-medium uppercase tracking-[0.14em] text-slate-500 dark:text-slate-400">{t("showcase.pages.price")}</label>
|
|
298
310
|
<input type="text" defaultValue="$3,499" className="w-full border border-slate-200 dark:border-slate-700 rounded-lg px-3 py-2 text-sm bg-white dark:bg-slate-800 text-slate-800 dark:text-white outline-none focus:ring-2 focus:ring-primary-500" />
|
|
299
311
|
</ITGrid>
|
|
300
312
|
<ITGrid item xs={12} md={3}>
|
|
301
|
-
<label className="text-
|
|
313
|
+
<label className="mb-1 block font-mono text-[10px] font-medium uppercase tracking-[0.14em] text-slate-500 dark:text-slate-400">{t("showcase.pages.stock")}</label>
|
|
302
314
|
<input type="text" defaultValue="24" className="w-full border border-slate-200 dark:border-slate-700 rounded-lg px-3 py-2 text-sm bg-white dark:bg-slate-800 text-slate-800 dark:text-white outline-none focus:ring-2 focus:ring-primary-500" />
|
|
303
315
|
</ITGrid>
|
|
304
316
|
</ITGrid>
|
|
@@ -307,23 +319,23 @@ export const PageHeaderShowcase = () => {
|
|
|
307
319
|
|
|
308
320
|
{/* 3. Dashboard header — icon + title + desc + date range + refresh */}
|
|
309
321
|
<div>
|
|
310
|
-
<
|
|
311
|
-
<div className="border border-slate-200 dark:border-slate-
|
|
322
|
+
<h3 className="mb-3 font-mono text-[11px] font-medium uppercase tracking-[0.14em] text-slate-500 dark:text-slate-400">{t("showcase.pages.galleryDashboard")}</h3>
|
|
323
|
+
<div className="overflow-hidden rounded-[10px] border border-slate-200 bg-white dark:border-slate-800 dark:bg-slate-950">
|
|
312
324
|
<div className="p-5">
|
|
313
325
|
<ITPageHeader
|
|
314
|
-
title="
|
|
315
|
-
description="
|
|
326
|
+
title={t("showcase.structure.navDashboard")}
|
|
327
|
+
description={t("showcase.pages.dashboardDesc")}
|
|
316
328
|
icon={<FaChartLine size={20} />}
|
|
317
329
|
iconColor="#10b981"
|
|
318
330
|
actions={
|
|
319
331
|
<ITFlex gap={2} align="center">
|
|
320
332
|
<select className="px-3 py-2 text-xs border border-slate-200 dark:border-slate-700 rounded-lg bg-slate-50 dark:bg-slate-800 text-slate-700 dark:text-slate-200 outline-none focus:ring-2 focus:ring-primary-500">
|
|
321
|
-
<option>
|
|
322
|
-
<option>
|
|
323
|
-
<option>
|
|
324
|
-
<option>
|
|
333
|
+
<option>{t("showcase.pages.last7Days")}</option>
|
|
334
|
+
<option>{t("showcase.pages.last30Days")}</option>
|
|
335
|
+
<option>{t("showcase.pages.thisQuarter")}</option>
|
|
336
|
+
<option>{t("showcase.pages.customRange")}</option>
|
|
325
337
|
</select>
|
|
326
|
-
<ITButton label="
|
|
338
|
+
<ITButton label={t("showcase.pages.refresh")} variant="outlined" color="gray" size="sm" />
|
|
327
339
|
</ITFlex>
|
|
328
340
|
}
|
|
329
341
|
/>
|
|
@@ -333,16 +345,16 @@ export const PageHeaderShowcase = () => {
|
|
|
333
345
|
|
|
334
346
|
{/* 4. Settings header — no icon, no breadcrumbs, just title + desc + save */}
|
|
335
347
|
<div>
|
|
336
|
-
<
|
|
337
|
-
<div className="border border-slate-200 dark:border-slate-
|
|
348
|
+
<h3 className="mb-3 font-mono text-[11px] font-medium uppercase tracking-[0.14em] text-slate-500 dark:text-slate-400">{t("showcase.pages.gallerySettingsPrefs")}</h3>
|
|
349
|
+
<div className="overflow-hidden rounded-[10px] border border-slate-200 bg-white dark:border-slate-800 dark:bg-slate-950">
|
|
338
350
|
<div className="p-5">
|
|
339
351
|
<ITPageHeader
|
|
340
|
-
title="
|
|
341
|
-
description="
|
|
352
|
+
title={t("showcase.pages.generalSettings")}
|
|
353
|
+
description={t("showcase.pages.generalSettingsDesc")}
|
|
342
354
|
actions={
|
|
343
355
|
<ITFlex gap={2}>
|
|
344
|
-
<ITButton label="
|
|
345
|
-
<ITButton label="
|
|
356
|
+
<ITButton label={t("showcase.common.reset")} variant="outlined" color="gray" size="sm" />
|
|
357
|
+
<ITButton label={t("showcase.common.save")} variant="filled" color="primary" size="sm" />
|
|
346
358
|
</ITFlex>
|
|
347
359
|
}
|
|
348
360
|
/>
|
|
@@ -352,23 +364,23 @@ export const PageHeaderShowcase = () => {
|
|
|
352
364
|
|
|
353
365
|
{/* 5. Users list — icon + breadcrumbs + search in actions + add button */}
|
|
354
366
|
<div>
|
|
355
|
-
<
|
|
356
|
-
<div className="border border-slate-200 dark:border-slate-
|
|
367
|
+
<h3 className="mb-3 font-mono text-[11px] font-medium uppercase tracking-[0.14em] text-slate-500 dark:text-slate-400">{t("showcase.pages.galleryUsersList")}</h3>
|
|
368
|
+
<div className="overflow-hidden rounded-[10px] border border-slate-200 bg-white dark:border-slate-800 dark:bg-slate-950">
|
|
357
369
|
<div className="p-5">
|
|
358
370
|
<ITPageHeader
|
|
359
|
-
title="
|
|
360
|
-
description="
|
|
371
|
+
title={t("showcase.structure.navUsers")}
|
|
372
|
+
description={t("showcase.pages.usersDesc")}
|
|
361
373
|
icon={<FaUsers size={20} />}
|
|
362
374
|
iconColor="#8b5cf6"
|
|
363
375
|
backAction={() => {}}
|
|
364
|
-
breadcrumbs={[{ label: "
|
|
376
|
+
breadcrumbs={[{ label: t("showcase.pages.crumbAdmin"), href: "#" }, { label: t("showcase.structure.navUsers") }]}
|
|
365
377
|
actions={
|
|
366
378
|
<ITFlex gap={2}>
|
|
367
379
|
<div className="relative">
|
|
368
380
|
<FaSearch size={11} className="absolute left-3 top-1/2 -translate-y-1/2 text-slate-400" />
|
|
369
|
-
<input type="text" placeholder="
|
|
381
|
+
<input type="text" placeholder={t("showcase.pages.searchShort")} className="w-[180px] pl-9 pr-3 py-2 text-xs border border-slate-200 dark:border-slate-700 rounded-lg bg-slate-50 dark:bg-slate-800 text-slate-800 dark:text-white outline-none focus:ring-2 focus:ring-primary-500" />
|
|
370
382
|
</div>
|
|
371
|
-
<ITButton label="
|
|
383
|
+
<ITButton label={t("showcase.pages.invite")} variant="filled" color="primary" size="sm" />
|
|
372
384
|
</ITFlex>
|
|
373
385
|
}
|
|
374
386
|
/>
|
|
@@ -393,6 +405,7 @@ const USERS: Record<string, unknown>[] = [
|
|
|
393
405
|
];
|
|
394
406
|
|
|
395
407
|
export const PageShowcase = () => {
|
|
408
|
+
const { t } = useITTranslation();
|
|
396
409
|
const [state, setState] = useState<"normal" | "loading" | "error" | "empty">("normal");
|
|
397
410
|
const [screen, setScreen] = useState<"list" | "detail">("list");
|
|
398
411
|
const [selectedUser, setSelectedUser] = useState<Record<string, unknown> | null>(null);
|
|
@@ -544,26 +557,26 @@ export const PageShowcase = () => {
|
|
|
544
557
|
return (
|
|
545
558
|
<ShowcaseLayout
|
|
546
559
|
title="ITPage"
|
|
547
|
-
description="
|
|
560
|
+
description={t("showcase.pages.pageDesc")}
|
|
548
561
|
code={buildCode()}
|
|
549
562
|
demo={
|
|
550
|
-
<div className="w-full border border-slate-200 dark:border-slate-
|
|
563
|
+
<div className="w-full overflow-hidden rounded-[10px] border border-slate-200 bg-white dark:border-slate-800 dark:bg-slate-950">
|
|
551
564
|
{isDetail && user ? (
|
|
552
565
|
<ITPage
|
|
553
566
|
title={user.name as string}
|
|
554
|
-
description={
|
|
567
|
+
description={t("showcase.pages.memberSummary", { role: user.role as string, status: (user.active as boolean) ? t("showcase.common.active") : t("showcase.data.inactive") })}
|
|
555
568
|
icon={shouldShowIcon}
|
|
556
569
|
iconColor={shouldShowIconColor}
|
|
557
|
-
breadcrumbs={[{ label: "
|
|
570
|
+
breadcrumbs={[{ label: t("showcase.pages.crumbTeam"), href: "#" }, { label: user.name as string }]}
|
|
558
571
|
backAction={handleBackToList}
|
|
559
572
|
loading={state === "loading"}
|
|
560
|
-
error={state === "error" ? "
|
|
561
|
-
errorTitle="
|
|
573
|
+
error={state === "error" ? t("showcase.pages.userLoadError") : null}
|
|
574
|
+
errorTitle={t("showcase.pages.detailsError")}
|
|
562
575
|
onRetry={() => setState("normal")}
|
|
563
576
|
horizontalPadding={hPaddingValue}
|
|
564
577
|
empty={state === "empty"}
|
|
565
|
-
emptyTitle="
|
|
566
|
-
emptyDescription="
|
|
578
|
+
emptyTitle={t("showcase.pages.noUserData")}
|
|
579
|
+
emptyDescription={t("showcase.pages.noUserInfo")}
|
|
567
580
|
>
|
|
568
581
|
<ITGrid container spacing={4}>
|
|
569
582
|
<ITGrid item xs={12} md={4}>
|
|
@@ -581,14 +594,14 @@ export const PageShowcase = () => {
|
|
|
581
594
|
</ITCard>
|
|
582
595
|
</ITGrid>
|
|
583
596
|
<ITGrid item xs={12} md={8}>
|
|
584
|
-
<ITCard title="
|
|
597
|
+
<ITCard title={t("showcase.pages.accountDetails")}>
|
|
585
598
|
<ITStack spacing={4}>
|
|
586
599
|
{[
|
|
587
|
-
{ label: "
|
|
588
|
-
{ label: "
|
|
589
|
-
{ label: "
|
|
590
|
-
{ label: "
|
|
591
|
-
{ label: "
|
|
600
|
+
{ label: t("showcase.pages.fullName"), value: user.name as string },
|
|
601
|
+
{ label: t("showcase.pages.emailAddress"), value: user.email as string },
|
|
602
|
+
{ label: t("showcase.pages.role"), value: user.role as string },
|
|
603
|
+
{ label: t("showcase.pages.status"), value: (user.active as boolean) ? t("showcase.common.active") : t("showcase.data.inactive") },
|
|
604
|
+
{ label: t("showcase.pages.lastLogin"), value: new Date(user.lastLogin as string).toLocaleString("en-US") },
|
|
592
605
|
].map((f) => (
|
|
593
606
|
<div key={f.label}>
|
|
594
607
|
<p className="text-[11px] font-bold uppercase tracking-wider text-slate-400 mb-0.5">{f.label}</p>
|
|
@@ -602,28 +615,28 @@ export const PageShowcase = () => {
|
|
|
602
615
|
</ITPage>
|
|
603
616
|
) : (
|
|
604
617
|
<ITPage
|
|
605
|
-
title="
|
|
606
|
-
description="
|
|
618
|
+
title={t("showcase.pages.teamMembers")}
|
|
619
|
+
description={t("showcase.pages.teamDesc")}
|
|
607
620
|
icon={shouldShowIcon}
|
|
608
621
|
iconColor={shouldShowIconColor}
|
|
609
|
-
breadcrumbs={[{ label: "
|
|
622
|
+
breadcrumbs={[{ label: t("showcase.pages.crumbAdmin"), href: "#" }, { label: t("showcase.pages.crumbTeam") }]}
|
|
610
623
|
loading={state === "loading"}
|
|
611
|
-
error={state === "error" ? "
|
|
612
|
-
errorTitle="
|
|
624
|
+
error={state === "error" ? t("showcase.pages.teamLoadError") : null}
|
|
625
|
+
errorTitle={t("showcase.pages.connectionError")}
|
|
613
626
|
onRetry={() => setState("normal")}
|
|
614
627
|
horizontalPadding={hPaddingValue}
|
|
615
628
|
empty={state === "empty"}
|
|
616
|
-
emptyTitle="
|
|
617
|
-
emptyDescription="
|
|
618
|
-
emptyAction={<ITButton label="
|
|
619
|
-
actions={<ITButton label="
|
|
629
|
+
emptyTitle={t("showcase.pages.noTeamMembers")}
|
|
630
|
+
emptyDescription={t("showcase.pages.noTeamMembersHint")}
|
|
631
|
+
emptyAction={<ITButton label={t("showcase.pages.inviteMembers")} size="sm" icon={<FaPlus />} />}
|
|
632
|
+
actions={<ITButton label={t("showcase.pages.invite")} size="sm" icon={<FaPlus />} />}
|
|
620
633
|
>
|
|
621
634
|
<ITTable
|
|
622
635
|
columns={columns}
|
|
623
636
|
data={USERS}
|
|
624
637
|
size="sm"
|
|
625
638
|
defaultItemsPerPage={5}
|
|
626
|
-
title="
|
|
639
|
+
title={t("showcase.data.galleryAllMembers")}
|
|
627
640
|
/>
|
|
628
641
|
</ITPage>
|
|
629
642
|
)}
|
|
@@ -632,12 +645,12 @@ export const PageShowcase = () => {
|
|
|
632
645
|
controls={
|
|
633
646
|
<ITStack spacing={4}>
|
|
634
647
|
<div>
|
|
635
|
-
<p className="text-xs font-bold uppercase tracking-wider text-slate-400 dark:text-slate-500 mb-2">
|
|
648
|
+
<p className="text-xs font-bold uppercase tracking-wider text-slate-400 dark:text-slate-500 mb-2">{t("showcase.pages.pageState")}</p>
|
|
636
649
|
<ITFlex gap={2} wrap="wrap">
|
|
637
650
|
{(["normal", "loading", "error", "empty"] as const).map((s) => (
|
|
638
651
|
<ITButton
|
|
639
652
|
key={s}
|
|
640
|
-
label={s.
|
|
653
|
+
label={s === "normal" ? t("showcase.data.stateNormal") : s === "loading" ? t("showcase.data.stateLoading") : s === "error" ? t("showcase.data.stateError") : t("showcase.data.stateEmpty")}
|
|
641
654
|
variant={state === s ? "filled" : "outlined"}
|
|
642
655
|
size="sm"
|
|
643
656
|
onClick={() => setState(s)}
|
|
@@ -647,17 +660,19 @@ export const PageShowcase = () => {
|
|
|
647
660
|
</div>
|
|
648
661
|
|
|
649
662
|
<ITFlex justify="between" align="center">
|
|
650
|
-
<span className="text-
|
|
651
|
-
<ITSlideToggle isOn={showIcon} onToggle={setShowIcon} size="sm"
|
|
663
|
+
<span className="font-mono text-[11px] font-medium uppercase tracking-[0.14em] text-slate-500 dark:text-slate-400">{t("showcase.pages.iconInHeader")}</span>
|
|
664
|
+
<ITSlideToggle isOn={showIcon} onToggle={setShowIcon} size="sm"
|
|
665
|
+
ariaLabel={t("showcase.pages.iconInHeader")}
|
|
666
|
+
/>
|
|
652
667
|
</ITFlex>
|
|
653
668
|
|
|
654
669
|
<div>
|
|
655
|
-
<p className="text-xs font-bold uppercase tracking-wider text-slate-400 dark:text-slate-500 mb-2">
|
|
670
|
+
<p className="text-xs font-bold uppercase tracking-wider text-slate-400 dark:text-slate-500 mb-2">{t("showcase.pages.horizontalPadding")}</p>
|
|
656
671
|
<ITFlex gap={2} wrap="wrap">
|
|
657
672
|
{(["default", "none", "tight", "wide"] as const).map((p) => (
|
|
658
673
|
<ITButton
|
|
659
674
|
key={p}
|
|
660
|
-
label={p === "default" ? "
|
|
675
|
+
label={p === "default" ? t("showcase.pages.paddingDefault") : p === "none" ? "px-0" : p === "tight" ? "px-2" : "px-8"}
|
|
661
676
|
variant={hPadding === p ? "filled" : "outlined"}
|
|
662
677
|
size="sm"
|
|
663
678
|
onClick={() => setHPadding(p)}
|
|
@@ -668,16 +683,16 @@ export const PageShowcase = () => {
|
|
|
668
683
|
|
|
669
684
|
{isNormal && (
|
|
670
685
|
<div>
|
|
671
|
-
<p className="text-xs font-bold uppercase tracking-wider text-slate-400 dark:text-slate-500 mb-2">
|
|
686
|
+
<p className="text-xs font-bold uppercase tracking-wider text-slate-400 dark:text-slate-500 mb-2">{t("showcase.pages.screen")}</p>
|
|
672
687
|
<ITFlex gap={2} wrap="wrap">
|
|
673
688
|
<ITButton
|
|
674
|
-
label="
|
|
689
|
+
label={t("showcase.pages.list")}
|
|
675
690
|
variant={screen === "list" ? "filled" : "outlined"}
|
|
676
691
|
size="sm"
|
|
677
692
|
onClick={() => handleBackToList()}
|
|
678
693
|
/>
|
|
679
694
|
<ITButton
|
|
680
|
-
label="
|
|
695
|
+
label={t("showcase.pages.detailLastViewed")}
|
|
681
696
|
variant={screen === "detail" ? "filled" : "outlined"}
|
|
682
697
|
size="sm"
|
|
683
698
|
disabled={!selectedUser}
|
|
@@ -686,7 +701,7 @@ export const PageShowcase = () => {
|
|
|
686
701
|
</ITFlex>
|
|
687
702
|
{selectedUser && (
|
|
688
703
|
<p className="text-xs text-slate-500 mt-2">
|
|
689
|
-
|
|
704
|
+
{t("showcase.pages.selected")} <span className="font-semibold text-slate-700 dark:text-slate-200">{selectedUser.name as string}</span>
|
|
690
705
|
</p>
|
|
691
706
|
)}
|
|
692
707
|
</div>
|
|
@@ -697,19 +712,19 @@ export const PageShowcase = () => {
|
|
|
697
712
|
<ITStack spacing={6}>
|
|
698
713
|
{/* 1. Users list with ITTable */}
|
|
699
714
|
<div>
|
|
700
|
-
<
|
|
701
|
-
<div className="border border-slate-200 dark:border-slate-
|
|
715
|
+
<h3 className="mb-3 font-mono text-[11px] font-medium uppercase tracking-[0.14em] text-slate-500 dark:text-slate-400">{t("showcase.pages.galleryUsersTable")}</h3>
|
|
716
|
+
<div className="overflow-hidden rounded-[10px] border border-slate-200 dark:border-slate-800">
|
|
702
717
|
<ITPage
|
|
703
718
|
horizontalPadding={hPaddingValue}
|
|
704
|
-
title="
|
|
705
|
-
description="
|
|
719
|
+
title={t("showcase.structure.navUsers")}
|
|
720
|
+
description={t("showcase.pages.usersDescShort")}
|
|
706
721
|
icon={<FaUsers size={20} />}
|
|
707
722
|
iconColor="#6366f1"
|
|
708
|
-
breadcrumbs={[{ label: "
|
|
723
|
+
breadcrumbs={[{ label: t("showcase.pages.crumbAdmin"), href: "#" }, { label: t("showcase.structure.navUsers") }]}
|
|
709
724
|
actions={
|
|
710
725
|
<ITFlex gap={2}>
|
|
711
|
-
<ITButton label="
|
|
712
|
-
<ITButton label="
|
|
726
|
+
<ITButton label={t("showcase.pages.export")} variant="outlined" size="sm" icon={<FaDownload />} />
|
|
727
|
+
<ITButton label={t("showcase.pages.addUser")} size="sm" icon={<FaPlus />} />
|
|
713
728
|
</ITFlex>
|
|
714
729
|
}
|
|
715
730
|
>
|
|
@@ -725,20 +740,20 @@ export const PageShowcase = () => {
|
|
|
725
740
|
|
|
726
741
|
{/* 2. Product detail */}
|
|
727
742
|
<div>
|
|
728
|
-
<
|
|
729
|
-
<div className="border border-slate-200 dark:border-slate-
|
|
743
|
+
<h3 className="mb-3 font-mono text-[11px] font-medium uppercase tracking-[0.14em] text-slate-500 dark:text-slate-400">{t("showcase.pages.galleryProductDetail")}</h3>
|
|
744
|
+
<div className="overflow-hidden rounded-[10px] border border-slate-200 dark:border-slate-800">
|
|
730
745
|
<ITPage
|
|
731
746
|
horizontalPadding={hPaddingValue}
|
|
732
747
|
title="MacBook Pro 16'' M3 Max"
|
|
733
748
|
description="SKU: MBP-16-M3MAX-2024 · Stock: 24"
|
|
734
749
|
icon={<FaBoxOpen size={20} />}
|
|
735
750
|
iconColor="#ec4899"
|
|
736
|
-
breadcrumbs={[{ label: "
|
|
751
|
+
breadcrumbs={[{ label: t("showcase.pages.crumbProducts"), href: "#" }, { label: "MacBook Pro 16" }]}
|
|
737
752
|
backAction={() => {}}
|
|
738
753
|
actions={
|
|
739
754
|
<ITFlex gap={2}>
|
|
740
|
-
<ITButton label="
|
|
741
|
-
<ITButton label="
|
|
755
|
+
<ITButton label={t("showcase.common.delete")} variant="outlined" color="gray" size="sm" icon={<FaTrash />} />
|
|
756
|
+
<ITButton label={t("showcase.common.edit")} size="sm" icon={<FaEdit />} />
|
|
742
757
|
</ITFlex>
|
|
743
758
|
}
|
|
744
759
|
>
|
|
@@ -752,14 +767,14 @@ export const PageShowcase = () => {
|
|
|
752
767
|
</ITGrid>
|
|
753
768
|
<ITGrid item xs={12} md={7}>
|
|
754
769
|
<ITStack spacing={3}>
|
|
755
|
-
<ITCard title="
|
|
770
|
+
<ITCard title={t("showcase.pages.pricing")}>
|
|
756
771
|
<ITFlex align="baseline" gap={2}>
|
|
757
772
|
<span className="text-3xl font-extrabold text-slate-800 dark:text-white">$3,499</span>
|
|
758
773
|
<span className="text-sm text-slate-400 line-through">$3,799</span>
|
|
759
774
|
<span className="text-xs font-bold text-emerald-600 bg-emerald-50 dark:bg-emerald-950/30 px-2 py-0.5 rounded-md">-8%</span>
|
|
760
775
|
</ITFlex>
|
|
761
776
|
</ITCard>
|
|
762
|
-
<ITCard title="
|
|
777
|
+
<ITCard title={t("showcase.pages.descriptionField")}>
|
|
763
778
|
<ITText className="text-sm text-slate-600 dark:text-slate-300">
|
|
764
779
|
Extreme performance for professionals. M3 Max chip with 16-core CPU, 40-core GPU, and 64GB unified memory.
|
|
765
780
|
</ITText>
|
|
@@ -773,45 +788,45 @@ export const PageShowcase = () => {
|
|
|
773
788
|
|
|
774
789
|
{/* 3. Edit profile form */}
|
|
775
790
|
<div>
|
|
776
|
-
<
|
|
777
|
-
<div className="border border-slate-200 dark:border-slate-
|
|
791
|
+
<h3 className="mb-3 font-mono text-[11px] font-medium uppercase tracking-[0.14em] text-slate-500 dark:text-slate-400">{t("showcase.pages.galleryEditProfile")}</h3>
|
|
792
|
+
<div className="overflow-hidden rounded-[10px] border border-slate-200 dark:border-slate-800">
|
|
778
793
|
<ITPage
|
|
779
794
|
horizontalPadding={hPaddingValue}
|
|
780
|
-
title="
|
|
781
|
-
description="
|
|
795
|
+
title={t("showcase.pages.editProfile")}
|
|
796
|
+
description={t("showcase.pages.editProfileDesc")}
|
|
782
797
|
icon={<FaEdit size={20} />}
|
|
783
798
|
iconColor="#10b981"
|
|
784
|
-
breadcrumbs={[{ label: "
|
|
799
|
+
breadcrumbs={[{ label: t("showcase.pages.crumbAccount"), href: "#" }, { label: t("showcase.pages.editProfile") }]}
|
|
785
800
|
backAction={() => {}}
|
|
786
801
|
actions={
|
|
787
802
|
<ITFlex gap={2}>
|
|
788
|
-
<ITButton label="
|
|
789
|
-
<ITButton label="
|
|
803
|
+
<ITButton label={t("showcase.common.cancel")} variant="outlined" color="gray" size="sm" />
|
|
804
|
+
<ITButton label={t("showcase.pages.saveChanges")} size="sm" icon={<FaSave />} />
|
|
790
805
|
</ITFlex>
|
|
791
806
|
}
|
|
792
807
|
>
|
|
793
808
|
<ITGrid container spacing={3}>
|
|
794
809
|
<ITGrid item xs={12} md={4}>
|
|
795
|
-
<ITCard title="
|
|
810
|
+
<ITCard title={t("showcase.pages.profilePhoto")}>
|
|
796
811
|
<div className="flex flex-col items-center gap-4">
|
|
797
812
|
<ITAvatar initials="AL" size="xl" />
|
|
798
|
-
<ITButton label="
|
|
813
|
+
<ITButton label={t("showcase.pages.uploadImage")} variant="outlined" size="sm" />
|
|
799
814
|
</div>
|
|
800
815
|
</ITCard>
|
|
801
816
|
</ITGrid>
|
|
802
817
|
<ITGrid item xs={12} md={8}>
|
|
803
|
-
<ITCard title="
|
|
818
|
+
<ITCard title={t("showcase.pages.personalInformation")}>
|
|
804
819
|
<ITGrid container spacing={3}>
|
|
805
820
|
<ITGrid item xs={12} sm={6}>
|
|
806
|
-
<label className="text-
|
|
821
|
+
<label className="mb-1 block font-mono text-[10px] font-medium uppercase tracking-[0.14em] text-slate-500 dark:text-slate-400">{t("showcase.pages.firstName")}</label>
|
|
807
822
|
<input type="text" defaultValue="Ana" className="w-full border border-slate-200 dark:border-slate-700 rounded-lg px-3 py-2 text-sm bg-white dark:bg-slate-800 text-slate-800 dark:text-white outline-none focus:ring-2 focus:ring-primary-500" />
|
|
808
823
|
</ITGrid>
|
|
809
824
|
<ITGrid item xs={12} sm={6}>
|
|
810
|
-
<label className="text-
|
|
825
|
+
<label className="mb-1 block font-mono text-[10px] font-medium uppercase tracking-[0.14em] text-slate-500 dark:text-slate-400">{t("showcase.pages.lastName")}</label>
|
|
811
826
|
<input type="text" defaultValue="López" className="w-full border border-slate-200 dark:border-slate-700 rounded-lg px-3 py-2 text-sm bg-white dark:bg-slate-800 text-slate-800 dark:text-white outline-none focus:ring-2 focus:ring-primary-500" />
|
|
812
827
|
</ITGrid>
|
|
813
828
|
<ITGrid item xs={12}>
|
|
814
|
-
<label className="text-
|
|
829
|
+
<label className="mb-1 block font-mono text-[10px] font-medium uppercase tracking-[0.14em] text-slate-500 dark:text-slate-400">{t("showcase.pages.emailField")}</label>
|
|
815
830
|
<input type="email" defaultValue="ana.lopez@axzy.dev" className="w-full border border-slate-200 dark:border-slate-700 rounded-lg px-3 py-2 text-sm bg-white dark:bg-slate-800 text-slate-800 dark:text-white outline-none focus:ring-2 focus:ring-primary-500" />
|
|
816
831
|
</ITGrid>
|
|
817
832
|
</ITGrid>
|
|
@@ -824,19 +839,19 @@ export const PageShowcase = () => {
|
|
|
824
839
|
|
|
825
840
|
{/* 4. Orders with table */}
|
|
826
841
|
<div>
|
|
827
|
-
<
|
|
828
|
-
<div className="border border-slate-200 dark:border-slate-
|
|
842
|
+
<h3 className="mb-3 font-mono text-[11px] font-medium uppercase tracking-[0.14em] text-slate-500 dark:text-slate-400">{t("showcase.pages.galleryOrdersTable")}</h3>
|
|
843
|
+
<div className="overflow-hidden rounded-[10px] border border-slate-200 dark:border-slate-800">
|
|
829
844
|
<ITPage
|
|
830
845
|
horizontalPadding={hPaddingValue}
|
|
831
|
-
title="
|
|
832
|
-
description="
|
|
846
|
+
title={t("showcase.structure.navOrders")}
|
|
847
|
+
description={t("showcase.pages.ordersDesc")}
|
|
833
848
|
icon={<FaShoppingCart size={20} />}
|
|
834
849
|
iconColor="#f59e0b"
|
|
835
|
-
breadcrumbs={[{ label: "
|
|
850
|
+
breadcrumbs={[{ label: t("showcase.structure.navDashboard"), href: "#" }, { label: t("showcase.structure.navOrders") }]}
|
|
836
851
|
actions={
|
|
837
852
|
<ITFlex gap={2}>
|
|
838
|
-
<ITButton label="
|
|
839
|
-
<ITButton label="
|
|
853
|
+
<ITButton label={t("showcase.pages.export")} variant="outlined" color="gray" size="sm" icon={<FaDownload />} />
|
|
854
|
+
<ITButton label={t("showcase.pages.newOrder")} size="sm" icon={<FaPlus />} />
|
|
840
855
|
</ITFlex>
|
|
841
856
|
}
|
|
842
857
|
>
|
|
@@ -877,26 +892,26 @@ export const PageShowcase = () => {
|
|
|
877
892
|
|
|
878
893
|
{/* 5. Settings with tabs */}
|
|
879
894
|
<div>
|
|
880
|
-
<
|
|
881
|
-
<div className="border border-slate-200 dark:border-slate-
|
|
895
|
+
<h3 className="mb-3 font-mono text-[11px] font-medium uppercase tracking-[0.14em] text-slate-500 dark:text-slate-400">{t("showcase.pages.gallerySettings")}</h3>
|
|
896
|
+
<div className="overflow-hidden rounded-[10px] border border-slate-200 dark:border-slate-800">
|
|
882
897
|
<ITPage
|
|
883
898
|
horizontalPadding={hPaddingValue}
|
|
884
|
-
title="
|
|
885
|
-
description="
|
|
899
|
+
title={t("showcase.structure.navConfiguration")}
|
|
900
|
+
description={t("showcase.pages.settingsDesc")}
|
|
886
901
|
icon={<FaCog size={20} />}
|
|
887
902
|
iconColor="#10b981"
|
|
888
|
-
breadcrumbs={[{ label: "
|
|
903
|
+
breadcrumbs={[{ label: t("showcase.pages.crumbAccount"), href: "#" }, { label: t("showcase.structure.navConfiguration") }]}
|
|
889
904
|
>
|
|
890
905
|
<ITGrid container spacing={3}>
|
|
891
906
|
<ITGrid item xs={12} md={4}>
|
|
892
907
|
<ITCard>
|
|
893
908
|
<ITStack spacing={1}>
|
|
894
909
|
{[
|
|
895
|
-
{ id: "general", label: "
|
|
896
|
-
{ id: "notif", label: "
|
|
897
|
-
{ id: "sec", label: "
|
|
898
|
-
{ id: "apariencia", label: "
|
|
899
|
-
{ id: "billing", label: "
|
|
910
|
+
{ id: "general", label: t("showcase.pages.settingsNavGeneral"), icon: <FaCog />, active: true },
|
|
911
|
+
{ id: "notif", label: t("showcase.pages.settingsNavNotifications"), icon: <FaBell /> },
|
|
912
|
+
{ id: "sec", label: t("showcase.pages.settingsNavSecurity"), icon: <FaShieldAlt /> },
|
|
913
|
+
{ id: "apariencia", label: t("showcase.pages.settingsNavAppearance"), icon: <FaPalette /> },
|
|
914
|
+
{ id: "billing", label: t("showcase.pages.settingsNavBilling"), icon: <FaDollarSign /> },
|
|
900
915
|
].map(item => (
|
|
901
916
|
<button key={item.id} className={`flex items-center gap-3 px-3 py-2.5 rounded-lg text-sm font-medium transition-colors ${item.active ? "bg-primary-50 text-primary-700 dark:bg-primary-950/30 dark:text-primary-300" : "text-slate-600 dark:text-slate-300 hover:bg-slate-50 dark:hover:bg-slate-800"}`}>
|
|
902
917
|
<span className="text-base">{item.icon}</span>
|
|
@@ -907,26 +922,30 @@ export const PageShowcase = () => {
|
|
|
907
922
|
</ITCard>
|
|
908
923
|
</ITGrid>
|
|
909
924
|
<ITGrid item xs={12} md={8}>
|
|
910
|
-
<ITCard title="
|
|
925
|
+
<ITCard title={t("showcase.pages.generalPreferences")}>
|
|
911
926
|
<ITStack spacing={4}>
|
|
912
927
|
<div>
|
|
913
|
-
<label className="text-
|
|
928
|
+
<label className="mb-1 block font-mono text-[10px] font-medium uppercase tracking-[0.14em] text-slate-500 dark:text-slate-400">{t("showcase.pages.workspaceName")}</label>
|
|
914
929
|
<input type="text" defaultValue="AXZY Console" className="w-full border border-slate-200 dark:border-slate-700 rounded-lg px-3 py-2 text-sm bg-white dark:bg-slate-800 text-slate-800 dark:text-white outline-none focus:ring-2 focus:ring-primary-500" />
|
|
915
930
|
</div>
|
|
916
931
|
<ITStack spacing={3} className="pt-2 border-t border-slate-100 dark:border-slate-800">
|
|
917
932
|
<ITFlex justify="between" align="center">
|
|
918
933
|
<div>
|
|
919
|
-
<p className="text-
|
|
920
|
-
<p className="text-xs text-slate-500">
|
|
934
|
+
<p className="font-mono text-[11px] font-medium uppercase tracking-[0.14em] text-slate-500 dark:text-slate-400">{t("showcase.pages.darkMode")}</p>
|
|
935
|
+
<p className="text-xs text-slate-500">{t("showcase.pages.followSystem")}</p>
|
|
921
936
|
</div>
|
|
922
|
-
<ITSlideToggle isOn={true} onToggle={() => {}} size="sm"
|
|
937
|
+
<ITSlideToggle isOn={true} onToggle={() => {}} size="sm"
|
|
938
|
+
ariaLabel={t("showcase.pages.followSystem")}
|
|
939
|
+
/>
|
|
923
940
|
</ITFlex>
|
|
924
941
|
<ITFlex justify="between" align="center">
|
|
925
942
|
<div>
|
|
926
|
-
<p className="text-
|
|
927
|
-
<p className="text-xs text-slate-500">
|
|
943
|
+
<p className="font-mono text-[11px] font-medium uppercase tracking-[0.14em] text-slate-500 dark:text-slate-400">{t("showcase.pages.emailNotifications")}</p>
|
|
944
|
+
<p className="text-xs text-slate-500">{t("showcase.pages.receiveAlerts")}</p>
|
|
928
945
|
</div>
|
|
929
|
-
<ITSlideToggle isOn={false} onToggle={() => {}} size="sm"
|
|
946
|
+
<ITSlideToggle isOn={false} onToggle={() => {}} size="sm"
|
|
947
|
+
ariaLabel={t("showcase.pages.receiveAlerts")}
|
|
948
|
+
/>
|
|
930
949
|
</ITFlex>
|
|
931
950
|
</ITStack>
|
|
932
951
|
</ITStack>
|