@axzydev/axzy_ui_system 1.4.7 → 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 +2174 -1570
- 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 +232 -19
- package/dist/index.d.ts +232 -19
- package/dist/index.js +1838 -1238
- 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.props.ts +10 -2
- package/src/components/molecules/table/table.tsx +163 -114
- 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.props.ts +3 -2
- package/src/components/organisms/data-table/dataTable.tsx +149 -81
- 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 +9 -3
- 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 +201 -80
- 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/types/table.types.ts +110 -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 -123
- 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 -115
- 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
|
@@ -35,6 +35,7 @@ import {
|
|
|
35
35
|
} from "../index";
|
|
36
36
|
import type { ITSidebarProps } from "../index";
|
|
37
37
|
import { ShowcaseLayout, CodeViewer } from "./ShowcaseLayout";
|
|
38
|
+
import { useITTranslation } from "@/i18n";
|
|
38
39
|
|
|
39
40
|
// ─────────────────────────────────────────
|
|
40
41
|
// 1. ITCard Showcase
|
|
@@ -252,19 +253,20 @@ const GallerySection = ({ title, subtitle, children }: { title: string; subtitle
|
|
|
252
253
|
);
|
|
253
254
|
|
|
254
255
|
const PatternCard = ({ title, desc, code, children }: { title: string; desc?: string; code?: string; children: React.ReactNode }) => {
|
|
256
|
+
const { t } = useITTranslation();
|
|
255
257
|
const [showCode, setShowCode] = useState(false);
|
|
256
258
|
return (
|
|
257
259
|
<div className="bg-white dark:bg-slate-900/60 rounded-2xl border border-slate-200 dark:border-slate-700 shadow-sm hover:shadow-md transition-shadow overflow-hidden">
|
|
258
260
|
<div className="flex items-start justify-between gap-2 p-4 pb-3">
|
|
259
261
|
<div className="min-w-0">
|
|
260
|
-
<p className="text-
|
|
262
|
+
<p className="font-mono text-[11px] font-medium uppercase tracking-[0.14em] text-slate-500 dark:text-slate-400">{title}</p>
|
|
261
263
|
{desc && <p className="text-[11px] text-slate-500 dark:text-slate-400 mt-0.5">{desc}</p>}
|
|
262
264
|
</div>
|
|
263
265
|
{code && (
|
|
264
266
|
<ITButton variant="outlined" color="gray" size="sm" onClick={() => setShowCode(!showCode)}>
|
|
265
267
|
<ITFlex align="center" gap={1}>
|
|
266
268
|
<FaCode size={9} />
|
|
267
|
-
{showCode ? "
|
|
269
|
+
{showCode ? t("showcase.common.hideCode") : t("showcase.common.code")}
|
|
268
270
|
</ITFlex>
|
|
269
271
|
</ITButton>
|
|
270
272
|
)}
|
|
@@ -280,6 +282,7 @@ const PatternCard = ({ title, desc, code, children }: { title: string; desc?: st
|
|
|
280
282
|
};
|
|
281
283
|
|
|
282
284
|
export const CardShowcase = () => {
|
|
285
|
+
const { t } = useITTranslation();
|
|
283
286
|
const [title, setTitle] = useState("Monthly revenue");
|
|
284
287
|
const [showActions, setShowActions] = useState(true);
|
|
285
288
|
const [showImage, setShowImage] = useState(false);
|
|
@@ -301,7 +304,7 @@ export const CardShowcase = () => {
|
|
|
301
304
|
return (
|
|
302
305
|
<ShowcaseLayout
|
|
303
306
|
title="ITCard"
|
|
304
|
-
description="
|
|
307
|
+
description={t("showcase.structure.cardDesc")}
|
|
305
308
|
code={buildCode()}
|
|
306
309
|
demo={
|
|
307
310
|
<div className="w-full max-w-xl flex flex-col">
|
|
@@ -327,7 +330,7 @@ export const CardShowcase = () => {
|
|
|
327
330
|
|
|
328
331
|
{/* Fixed footer with active-property badges */}
|
|
329
332
|
<div className="sticky bottom-0 mt-4 -mx-6 -mb-6 px-6 py-3 bg-white/95 dark:bg-slate-900/95 backdrop-blur-sm border-t border-slate-200 dark:border-slate-700 flex items-center flex-wrap gap-1.5 text-[10px] font-mono">
|
|
330
|
-
<span className="text-[9px] uppercase tracking-wider font-bold text-slate-400 dark:text-slate-500 mr-1">
|
|
333
|
+
<span className="text-[9px] uppercase tracking-wider font-bold text-slate-400 dark:text-slate-500 mr-1">{t("showcase.common.activeLabel")}</span>
|
|
331
334
|
{title && <span className="px-2 py-0.5 rounded-md bg-slate-900 text-white dark:bg-white dark:text-slate-900 font-semibold">title</span>}
|
|
332
335
|
{showImage && <span className="px-2 py-0.5 rounded-md bg-primary-100 dark:bg-primary-900/30 text-primary-700 dark:text-primary-300">image</span>}
|
|
333
336
|
{showActions && <span className="px-2 py-0.5 rounded-md bg-emerald-100 dark:bg-emerald-900/30 text-emerald-700 dark:text-emerald-300">actions</span>}
|
|
@@ -339,37 +342,43 @@ export const CardShowcase = () => {
|
|
|
339
342
|
<ITStack spacing={4}>
|
|
340
343
|
<ITInput
|
|
341
344
|
name="title_ctrl"
|
|
342
|
-
label="
|
|
345
|
+
label={t("showcase.structure.cardTitleLabel")}
|
|
343
346
|
value={title}
|
|
344
347
|
onChange={(e: any) => setTitle(e.target.value)}
|
|
345
348
|
onBlur={() => { }}
|
|
346
|
-
placeholder="
|
|
349
|
+
placeholder={t("showcase.structure.cardTitlePlaceholder")}
|
|
347
350
|
/>
|
|
348
351
|
<div className="flex items-center justify-between pt-1">
|
|
349
|
-
<span className="text-
|
|
350
|
-
<ITSlideToggle isOn={showImage} onToggle={setShowImage} size="sm"
|
|
352
|
+
<span className="font-mono text-[11px] font-medium uppercase tracking-[0.14em] text-slate-500 dark:text-slate-400">{t("showcase.structure.showImage")}</span>
|
|
353
|
+
<ITSlideToggle isOn={showImage} onToggle={setShowImage} size="sm"
|
|
354
|
+
ariaLabel={t("showcase.structure.showImage")}
|
|
355
|
+
/>
|
|
351
356
|
</div>
|
|
352
357
|
<div className="flex items-center justify-between">
|
|
353
|
-
<span className="text-
|
|
354
|
-
<ITSlideToggle isOn={showActions} onToggle={setShowActions} size="sm"
|
|
358
|
+
<span className="font-mono text-[11px] font-medium uppercase tracking-[0.14em] text-slate-500 dark:text-slate-400">{t("showcase.structure.showActions")}</span>
|
|
359
|
+
<ITSlideToggle isOn={showActions} onToggle={setShowActions} size="sm"
|
|
360
|
+
ariaLabel={t("showcase.structure.showActions")}
|
|
361
|
+
/>
|
|
355
362
|
</div>
|
|
356
363
|
<div className="flex items-center justify-between">
|
|
357
|
-
<span className="text-
|
|
358
|
-
<ITSlideToggle isOn={clickable} onToggle={setClickable} size="sm"
|
|
364
|
+
<span className="font-mono text-[11px] font-medium uppercase tracking-[0.14em] text-slate-500 dark:text-slate-400">{t("showcase.structure.interactiveOnClick")}</span>
|
|
365
|
+
<ITSlideToggle isOn={clickable} onToggle={setClickable} size="sm"
|
|
366
|
+
ariaLabel={t("showcase.structure.interactiveOnClick")}
|
|
367
|
+
/>
|
|
359
368
|
</div>
|
|
360
369
|
</ITStack>
|
|
361
370
|
}
|
|
362
371
|
gallery={
|
|
363
372
|
<ITStack spacing={8}>
|
|
364
373
|
<GallerySection
|
|
365
|
-
title="
|
|
366
|
-
subtitle="
|
|
374
|
+
title={t("showcase.structure.galleryRealCases")}
|
|
375
|
+
subtitle={t("showcase.structure.galleryCardsSubtitle")}
|
|
367
376
|
>
|
|
368
377
|
<div className="grid grid-cols-1 lg:grid-cols-2 gap-5">
|
|
369
378
|
|
|
370
379
|
{/* 1. Course progress — ITProgress + ITBadget + ITDivider + ITText */}
|
|
371
380
|
<PatternCard
|
|
372
|
-
title="
|
|
381
|
+
title={t("showcase.structure.patternCourseProgress")}
|
|
373
382
|
desc="ITProgress + ITBadget + ITDivider + ITText"
|
|
374
383
|
code={CARD_PATTERN_CODES.course}
|
|
375
384
|
>
|
|
@@ -403,7 +412,7 @@ export const CardShowcase = () => {
|
|
|
403
412
|
|
|
404
413
|
{/* 2. Featured pricing plan — ITBadget outside + ITFlex + ITStack + ITDivider */}
|
|
405
414
|
<PatternCard
|
|
406
|
-
title="
|
|
415
|
+
title={t("showcase.structure.patternPricing")}
|
|
407
416
|
desc="ITBadget + ITDivider + ITStack with ITFlex items"
|
|
408
417
|
code={CARD_PATTERN_CODES.pricing}
|
|
409
418
|
>
|
|
@@ -443,7 +452,7 @@ export const CardShowcase = () => {
|
|
|
443
452
|
|
|
444
453
|
{/* 3. Activity feed item — ITText + ITBadget for commit hash + ITDivider separators */}
|
|
445
454
|
<PatternCard
|
|
446
|
-
title="
|
|
455
|
+
title={t("showcase.structure.patternActivity")}
|
|
447
456
|
desc="ITText + ITBadget (commit hash) + ITDivider separators"
|
|
448
457
|
code={CARD_PATTERN_CODES.activity}
|
|
449
458
|
>
|
|
@@ -485,7 +494,7 @@ export const CardShowcase = () => {
|
|
|
485
494
|
|
|
486
495
|
{/* 4. Team member profile — ITFlex + ITBadget for skills + ITText throughout */}
|
|
487
496
|
<PatternCard
|
|
488
|
-
title="
|
|
497
|
+
title={t("showcase.structure.patternTeamMember")}
|
|
489
498
|
desc="ITFlex + ITBadget skills + ITText throughout"
|
|
490
499
|
code={CARD_PATTERN_CODES.teamMember}
|
|
491
500
|
>
|
|
@@ -530,6 +539,7 @@ export const CardShowcase = () => {
|
|
|
530
539
|
|
|
531
540
|
// 2. ITText Showcase
|
|
532
541
|
export const TextShowcase = () => {
|
|
542
|
+
const { t } = useITTranslation();
|
|
533
543
|
const [element, setElement] = useState("p");
|
|
534
544
|
const [size, setSize] = useState("text-base");
|
|
535
545
|
const [bold, setBold] = useState(false);
|
|
@@ -583,7 +593,7 @@ export const TextShowcase = () => {
|
|
|
583
593
|
return (
|
|
584
594
|
<ShowcaseLayout
|
|
585
595
|
title="ITText"
|
|
586
|
-
description="
|
|
596
|
+
description={t("showcase.structure.textDesc")}
|
|
587
597
|
code={buildCode()}
|
|
588
598
|
demo={
|
|
589
599
|
<div className="w-full flex flex-col">
|
|
@@ -592,7 +602,7 @@ export const TextShowcase = () => {
|
|
|
592
602
|
{/* BIG element indicator — makes the `as` change unmissable */}
|
|
593
603
|
<ITStack spacing={2} alignItems="center" className="mb-5 text-center">
|
|
594
604
|
<ITText muted as="span" className="text-[10px] uppercase tracking-wider font-bold">
|
|
595
|
-
|
|
605
|
+
{t("showcase.structure.renderingAs")}
|
|
596
606
|
</ITText>
|
|
597
607
|
<code
|
|
598
608
|
key={element}
|
|
@@ -617,7 +627,7 @@ export const TextShowcase = () => {
|
|
|
617
627
|
|
|
618
628
|
{/* Fixed footer with active-property badges */}
|
|
619
629
|
<div className="sticky bottom-0 mt-4 -mx-6 -mb-6 px-6 py-3 bg-white/95 dark:bg-slate-900/95 backdrop-blur-sm border-t border-slate-200 dark:border-slate-700 flex items-center flex-wrap gap-1.5 text-[10px] font-mono">
|
|
620
|
-
<span className="text-[9px] uppercase tracking-wider font-bold text-slate-400 dark:text-slate-500 mr-1">
|
|
630
|
+
<span className="text-[9px] uppercase tracking-wider font-bold text-slate-400 dark:text-slate-500 mr-1">{t("showcase.common.activeLabel")}</span>
|
|
621
631
|
{element !== "p" && <span className="px-2 py-0.5 rounded-md bg-slate-900 text-white dark:bg-white dark:text-slate-900 font-semibold">as="{element}"</span>}
|
|
622
632
|
<span className="px-2 py-0.5 rounded-md bg-primary-100 dark:bg-primary-900/30 text-primary-700 dark:text-primary-300">{size}</span>
|
|
623
633
|
{bold && <span className="px-2 py-0.5 rounded-md bg-emerald-100 dark:bg-emerald-900/30 text-emerald-700 dark:text-emerald-300">font-bold</span>}
|
|
@@ -632,7 +642,7 @@ export const TextShowcase = () => {
|
|
|
632
642
|
<ITStack spacing={4}>
|
|
633
643
|
<ITSelect
|
|
634
644
|
name="elem_ctrl"
|
|
635
|
-
label="
|
|
645
|
+
label={t("showcase.structure.elementAs")}
|
|
636
646
|
value={element}
|
|
637
647
|
onChange={(e) => setElement(e.target.value)}
|
|
638
648
|
options={[
|
|
@@ -647,7 +657,7 @@ export const TextShowcase = () => {
|
|
|
647
657
|
/>
|
|
648
658
|
<ITSelect
|
|
649
659
|
name="sz_ctrl"
|
|
650
|
-
label="
|
|
660
|
+
label={t("showcase.common.size")}
|
|
651
661
|
value={size}
|
|
652
662
|
onChange={(e) => setSize(e.target.value)}
|
|
653
663
|
options={[
|
|
@@ -661,7 +671,7 @@ export const TextShowcase = () => {
|
|
|
661
671
|
/>
|
|
662
672
|
<ITSelect
|
|
663
673
|
name="clamp_ctrl"
|
|
664
|
-
label="
|
|
674
|
+
label={t("showcase.structure.lineClampLabel")}
|
|
665
675
|
value={String(lineClamp)}
|
|
666
676
|
onChange={(e) => setLineClamp(Number(e.target.value))}
|
|
667
677
|
options={[
|
|
@@ -674,39 +684,39 @@ export const TextShowcase = () => {
|
|
|
674
684
|
/>
|
|
675
685
|
<ITInput
|
|
676
686
|
name="max_ctrl"
|
|
677
|
-
label="
|
|
687
|
+
label={t("showcase.structure.maxTextLabel")}
|
|
678
688
|
type="number"
|
|
679
689
|
value={maxLength}
|
|
680
690
|
onChange={(e) => setMaxLength(e.target.value)}
|
|
681
|
-
placeholder="
|
|
691
|
+
placeholder={t("showcase.structure.noLimit")}
|
|
682
692
|
/>
|
|
683
693
|
<ITFlex justify="between" align="center">
|
|
684
694
|
<ITText muted as="span" className="text-[10px]">
|
|
685
|
-
|
|
695
|
+
{t("showcase.structure.truncateHint")}
|
|
686
696
|
</ITText>
|
|
687
697
|
<ITButton variant="text" color="primary" size="sm" onClick={() => setMaxLength("0")}>
|
|
688
|
-
|
|
698
|
+
{t("showcase.common.reset")}
|
|
689
699
|
</ITButton>
|
|
690
700
|
</ITFlex>
|
|
691
701
|
<ITInput
|
|
692
702
|
name="break_ctrl"
|
|
693
|
-
label="
|
|
703
|
+
label={t("showcase.structure.breakLabel")}
|
|
694
704
|
type="number"
|
|
695
705
|
value={breakLength}
|
|
696
706
|
onChange={(e) => setBreakLength(e.target.value)}
|
|
697
|
-
placeholder="
|
|
707
|
+
placeholder={t("showcase.structure.noBreak")}
|
|
698
708
|
/>
|
|
699
709
|
<ITFlex justify="between" align="center">
|
|
700
710
|
<ITText muted as="span" className="text-[10px]">
|
|
701
|
-
|
|
711
|
+
{t("showcase.structure.brHint")}
|
|
702
712
|
</ITText>
|
|
703
713
|
<ITButton variant="text" color="primary" size="sm" onClick={() => setBreakLength("0")}>
|
|
704
|
-
|
|
714
|
+
{t("showcase.common.reset")}
|
|
705
715
|
</ITButton>
|
|
706
716
|
</ITFlex>
|
|
707
717
|
<div>
|
|
708
718
|
<ITText as="label" htmlFor="break_ctrl" className="text-xs font-semibold text-slate-600 dark:text-slate-400 block mb-1">
|
|
709
|
-
|
|
719
|
+
{t("showcase.structure.breakWrapLabel")}
|
|
710
720
|
</ITText>
|
|
711
721
|
<input
|
|
712
722
|
id="break_ctrl"
|
|
@@ -716,42 +726,46 @@ export const TextShowcase = () => {
|
|
|
716
726
|
value={breakLength}
|
|
717
727
|
onChange={(e) => setBreakLength(e.target.value)}
|
|
718
728
|
className="w-full bg-slate-50 dark:bg-slate-900 border border-slate-200 dark:border-slate-800 rounded-lg p-2 text-xs text-slate-800 dark:text-slate-100 outline-none focus:ring-2 focus:ring-primary-500"
|
|
719
|
-
placeholder="
|
|
729
|
+
placeholder={t("showcase.structure.noCut")}
|
|
720
730
|
/>
|
|
721
731
|
<ITFlex justify="between" align="center" className="mt-1.5">
|
|
722
732
|
<ITText muted as="span" className="text-[10px]">
|
|
723
|
-
|
|
733
|
+
{t("showcase.structure.cutHint")}
|
|
724
734
|
</ITText>
|
|
725
735
|
<button
|
|
726
736
|
type="button"
|
|
727
737
|
onClick={() => setBreakLength("0")}
|
|
728
738
|
className="text-[10px] font-semibold text-primary-600 hover:text-primary-700 dark:text-primary-400"
|
|
729
739
|
>
|
|
730
|
-
|
|
740
|
+
{t("showcase.common.reset")}
|
|
731
741
|
</button>
|
|
732
742
|
</ITFlex>
|
|
733
743
|
</div>
|
|
734
744
|
<div className="flex items-center justify-between pt-1">
|
|
735
|
-
<ITText as="span" className="text-
|
|
736
|
-
<ITSlideToggle isOn={bold} onToggle={setBold} size="sm"
|
|
745
|
+
<ITText as="span" className="font-mono text-[11px] font-medium uppercase tracking-[0.14em] text-slate-500 dark:text-slate-400">{t("showcase.structure.boldLabel")}</ITText>
|
|
746
|
+
<ITSlideToggle isOn={bold} onToggle={setBold} size="sm"
|
|
747
|
+
ariaLabel={t("showcase.structure.boldLabel")}
|
|
748
|
+
/>
|
|
737
749
|
</div>
|
|
738
750
|
<div className="flex items-center justify-between">
|
|
739
|
-
<ITText as="span" className="text-
|
|
740
|
-
<ITSlideToggle isOn={muted} onToggle={setMuted} size="sm"
|
|
751
|
+
<ITText as="span" className="font-mono text-[11px] font-medium uppercase tracking-[0.14em] text-slate-500 dark:text-slate-400">{t("showcase.structure.mutedLabel")}</ITText>
|
|
752
|
+
<ITSlideToggle isOn={muted} onToggle={setMuted} size="sm"
|
|
753
|
+
ariaLabel={t("showcase.structure.mutedLabel")}
|
|
754
|
+
/>
|
|
741
755
|
</div>
|
|
742
756
|
</ITStack>
|
|
743
757
|
}
|
|
744
758
|
gallery={
|
|
745
759
|
<ITStack spacing={8}>
|
|
746
760
|
<GallerySection
|
|
747
|
-
title="
|
|
748
|
-
subtitle="
|
|
761
|
+
title={t("showcase.structure.galleryRealCases")}
|
|
762
|
+
subtitle={t("showcase.structure.galleryTextSubtitle")}
|
|
749
763
|
>
|
|
750
764
|
<div className="grid grid-cols-1 lg:grid-cols-2 gap-5">
|
|
751
765
|
|
|
752
766
|
{/* 1. Article header — eyebrow + title + meta */}
|
|
753
767
|
<PatternCard
|
|
754
|
-
title="
|
|
768
|
+
title={t("showcase.structure.patternArticleHeader")}
|
|
755
769
|
desc="eyebrow tag + h1 title + author/date/read-time meta"
|
|
756
770
|
code={TEXT_PATTERN_CODES.articleHeader}
|
|
757
771
|
>
|
|
@@ -779,7 +793,7 @@ export const TextShowcase = () => {
|
|
|
779
793
|
|
|
780
794
|
{/* 2. Section heading — h2 + description + action link */}
|
|
781
795
|
<PatternCard
|
|
782
|
-
title="
|
|
796
|
+
title={t("showcase.structure.patternSectionHeading")}
|
|
783
797
|
desc="h2 title + description + action link on the right"
|
|
784
798
|
code={TEXT_PATTERN_CODES.sectionHeading}
|
|
785
799
|
>
|
|
@@ -798,7 +812,7 @@ export const TextShowcase = () => {
|
|
|
798
812
|
|
|
799
813
|
{/* 3. Empty state — big title + description + muted helper */}
|
|
800
814
|
<PatternCard
|
|
801
|
-
title="
|
|
815
|
+
title={t("showcase.structure.patternEmptyState")}
|
|
802
816
|
desc="big title + description + muted helper text"
|
|
803
817
|
code={TEXT_PATTERN_CODES.emptyState}
|
|
804
818
|
>
|
|
@@ -826,7 +840,7 @@ export const TextShowcase = () => {
|
|
|
826
840
|
|
|
827
841
|
{/* 4. Inline content — paragraph with bold name + inline code + muted meta */}
|
|
828
842
|
<PatternCard
|
|
829
|
-
title="
|
|
843
|
+
title={t("showcase.structure.patternInlineContent")}
|
|
830
844
|
desc="paragraph with bold name + inline code + muted timestamp"
|
|
831
845
|
code={TEXT_PATTERN_CODES.inlineContent}
|
|
832
846
|
>
|
|
@@ -854,13 +868,13 @@ export const TextShowcase = () => {
|
|
|
854
868
|
|
|
855
869
|
{/* 5. Form labels — label + helper text */}
|
|
856
870
|
<PatternCard
|
|
857
|
-
title="
|
|
871
|
+
title={t("showcase.structure.patternFormLabels")}
|
|
858
872
|
desc="label + required asterisk + muted helper text"
|
|
859
873
|
code={TEXT_PATTERN_CODES.formLabels}
|
|
860
874
|
>
|
|
861
875
|
<ITStack spacing={4} className="max-w-sm">
|
|
862
876
|
<div>
|
|
863
|
-
<ITText as="label" className="text-
|
|
877
|
+
<ITText as="label" className="block mb-1 font-mono text-[11px] font-medium uppercase tracking-[0.14em] text-slate-500 dark:text-slate-400">
|
|
864
878
|
Workspace name <ITText as="span" className="text-danger-500">*</ITText>
|
|
865
879
|
</ITText>
|
|
866
880
|
<ITInput
|
|
@@ -875,7 +889,7 @@ export const TextShowcase = () => {
|
|
|
875
889
|
</ITText>
|
|
876
890
|
</div>
|
|
877
891
|
<div>
|
|
878
|
-
<ITText as="label" className="text-
|
|
892
|
+
<ITText as="label" className="block mb-1 font-mono text-[11px] font-medium uppercase tracking-[0.14em] text-slate-500 dark:text-slate-400">
|
|
879
893
|
Description
|
|
880
894
|
</ITText>
|
|
881
895
|
<ITInput
|
|
@@ -903,6 +917,7 @@ export const TextShowcase = () => {
|
|
|
903
917
|
|
|
904
918
|
// 3. ITLayout & ITNavbar Showcase
|
|
905
919
|
export const LayoutShowcase = () => {
|
|
920
|
+
const { t } = useITTranslation();
|
|
906
921
|
const [collapsed, setCollapsed] = useState(true);
|
|
907
922
|
const [activeId, setActiveId] = useState("dashboard");
|
|
908
923
|
const [navActiveId, setNavActiveId] = useState<string | null>("1");
|
|
@@ -913,55 +928,55 @@ export const LayoutShowcase = () => {
|
|
|
913
928
|
centerContent: (
|
|
914
929
|
<input
|
|
915
930
|
type="search"
|
|
916
|
-
placeholder="
|
|
931
|
+
placeholder={t("sandbox.search.placeholder")}
|
|
917
932
|
className="w-full rounded-lg border border-slate-200 dark:border-slate-700 bg-white dark:bg-slate-900 px-3 py-1.5 text-xs text-slate-700 dark:text-slate-200 outline-none focus:ring-2 focus:ring-primary-500/40"
|
|
918
933
|
/>
|
|
919
934
|
),
|
|
920
935
|
navItems: [
|
|
921
|
-
{ id: "home", label: "
|
|
922
|
-
{ id: "docs", label: "
|
|
923
|
-
{ id: "alerts", label: "
|
|
936
|
+
{ id: "home", label: t("showcase.common.home"), icon: <FaHome />, action: () => setActiveId("home") },
|
|
937
|
+
{ id: "docs", label: t("showcase.structure.navDocuments"), icon: <FaFileAlt />, action: () => setActiveId("docs") },
|
|
938
|
+
{ id: "alerts", label: t("showcase.structure.navAlerts"), icon: <FaBell />, action: () => setActiveId("alerts") },
|
|
924
939
|
],
|
|
925
940
|
onNavItemClick: (id: string) => setActiveId(id),
|
|
926
941
|
userMenu: {
|
|
927
942
|
userName: "Auditor AXZY",
|
|
928
943
|
userEmail: "auditor@axzy.dev",
|
|
929
944
|
menuItems: [
|
|
930
|
-
{ label: "
|
|
931
|
-
{ label: "
|
|
945
|
+
{ label: t("showcase.structure.navSettings"), onClick: () => {} },
|
|
946
|
+
{ label: t("showcase.structure.navLogout"), onClick: () => {} },
|
|
932
947
|
],
|
|
933
948
|
},
|
|
934
949
|
};
|
|
935
950
|
|
|
936
951
|
const sidebar: ITSidebarProps = {
|
|
937
952
|
navigationItems: [
|
|
938
|
-
{ id: "dashboard", label: "
|
|
939
|
-
{ id: "users", label: "
|
|
953
|
+
{ id: "dashboard", label: t("showcase.structure.navDashboard"), icon: <FaChartLine />, isActive: activeId === "dashboard", action: () => setActiveId("dashboard") },
|
|
954
|
+
{ id: "users", label: t("showcase.structure.navUsers"), icon: <FaUsers />, isActive: activeId === "users", action: () => setActiveId("users"), badge: 4 },
|
|
940
955
|
{
|
|
941
956
|
id: "sales",
|
|
942
|
-
label: "
|
|
957
|
+
label: t("showcase.structure.navSales"),
|
|
943
958
|
icon: <FaShoppingCart />,
|
|
944
959
|
isActive: activeId === "sales" || activeId === "orders" || activeId === "quotes",
|
|
945
960
|
subitems: [
|
|
946
961
|
{
|
|
947
962
|
id: "sales-gestion",
|
|
948
|
-
label: "
|
|
963
|
+
label: t("showcase.structure.navManagement"),
|
|
949
964
|
items: [
|
|
950
|
-
{ id: "orders", label: "
|
|
951
|
-
{ id: "invoices", label: "
|
|
965
|
+
{ id: "orders", label: t("showcase.structure.navOrders"), action: () => setActiveId("orders") },
|
|
966
|
+
{ id: "invoices", label: t("showcase.structure.navInvoices"), action: () => setActiveId("invoices") },
|
|
952
967
|
],
|
|
953
968
|
},
|
|
954
969
|
{
|
|
955
970
|
id: "sales-catalogo",
|
|
956
|
-
label: "
|
|
971
|
+
label: t("showcase.structure.navCatalog"),
|
|
957
972
|
items: [
|
|
958
|
-
{ id: "quotes", label: "
|
|
973
|
+
{ id: "quotes", label: t("showcase.structure.navQuotes"), action: () => setActiveId("quotes") },
|
|
959
974
|
],
|
|
960
975
|
},
|
|
961
976
|
],
|
|
962
977
|
},
|
|
963
|
-
{ id: "products", label: "
|
|
964
|
-
{ id: "settings", label: "
|
|
978
|
+
{ id: "products", label: t("showcase.structure.navProducts"), icon: <FaBoxOpen />, isActive: activeId === "products", action: () => setActiveId("products"), badge: 12 },
|
|
979
|
+
{ id: "settings", label: t("showcase.structure.navConfiguration"), icon: <FaCog />, isActive: activeId === "settings", action: () => setActiveId("settings"), badge: 3, badgeProps: { color: "warning", variant: "outlined" } },
|
|
965
980
|
],
|
|
966
981
|
isCollapsed: collapsed,
|
|
967
982
|
header: (
|
|
@@ -976,7 +991,7 @@ export const LayoutShowcase = () => {
|
|
|
976
991
|
notification: {
|
|
977
992
|
count: 5,
|
|
978
993
|
icon: <FaBell />,
|
|
979
|
-
label: "
|
|
994
|
+
label: t("sandbox.notifications"),
|
|
980
995
|
onClick: () => setActiveId("notifications"),
|
|
981
996
|
badgeProps: { color: "danger" },
|
|
982
997
|
},
|
|
@@ -1027,27 +1042,15 @@ export const LayoutShowcase = () => {
|
|
|
1027
1042
|
</ITLayout>`;
|
|
1028
1043
|
|
|
1029
1044
|
const navbarItems = [
|
|
1030
|
-
{ id: "1", label: "
|
|
1031
|
-
{ id: "2", label: "
|
|
1032
|
-
{ id: "3", label: "
|
|
1045
|
+
{ id: "1", label: t("showcase.common.home"), icon: <FaHome />, isActive: navActiveId === "1", action: () => setNavActiveId("1") },
|
|
1046
|
+
{ id: "2", label: t("showcase.structure.navDocuments"), icon: <FaFileAlt />, isActive: navActiveId === "2", action: () => setNavActiveId("2") },
|
|
1047
|
+
{ id: "3", label: t("showcase.structure.navAlerts"), icon: <FaBell />, isActive: navActiveId === "3", action: () => setNavActiveId("3") },
|
|
1033
1048
|
];
|
|
1034
1049
|
|
|
1035
|
-
const navbarCode = `<ITNavbar
|
|
1036
|
-
logoText="AXZY"
|
|
1037
|
-
navigationItems={[
|
|
1038
|
-
{ id: "1", label: "Inicio", icon: <FaHome />, isActive: true },
|
|
1039
|
-
{ id: "2", label: "Documentos", icon: <FaFileAlt /> },
|
|
1040
|
-
{ id: "3", label: "Alertas", icon: <FaBell /> }
|
|
1041
|
-
]}
|
|
1042
|
-
userMenu={{
|
|
1043
|
-
userName: "Auditor AXZY",
|
|
1044
|
-
userEmail: "auditor@axzy.dev",
|
|
1045
|
-
menuItems: [{ label: "Ajustes", onClick: () => {} }]
|
|
1046
|
-
}}
|
|
1047
|
-
/>`;
|
|
1048
1050
|
|
|
1049
1051
|
return (
|
|
1050
1052
|
<ShowcaseLayout
|
|
1053
|
+
demoAncho="completo"
|
|
1051
1054
|
title="ITLayout & ITNavbar"
|
|
1052
1055
|
description="Chasis estructural del portal con barra superior y lateral colapsable. Totalmente responsivo con drawer móvil."
|
|
1053
1056
|
code={code}
|
|
@@ -1056,28 +1059,28 @@ export const LayoutShowcase = () => {
|
|
|
1056
1059
|
<ITLayout topBar={topBar} sidebar={sidebar}>
|
|
1057
1060
|
<ITStack spacing={5}>
|
|
1058
1061
|
<ITPageHeader
|
|
1059
|
-
title="
|
|
1060
|
-
description="
|
|
1062
|
+
title={t("showcase.structure.navDashboard")}
|
|
1063
|
+
description={t("showcase.structure.dashboardDesc")}
|
|
1061
1064
|
icon={<FaChartLine size={20} />}
|
|
1062
1065
|
iconColor="#6366f1"
|
|
1063
1066
|
/>
|
|
1064
1067
|
<ITGrid container spacing={3}>
|
|
1065
1068
|
<ITGrid item xs={12} sm={6} lg={3}>
|
|
1066
|
-
<ITStatCard label="
|
|
1069
|
+
<ITStatCard label={t("showcase.structure.navUsers")} value="1,245" trend="+12%" trendDirection="up" />
|
|
1067
1070
|
</ITGrid>
|
|
1068
1071
|
<ITGrid item xs={12} sm={6} lg={3}>
|
|
1069
|
-
<ITStatCard label="
|
|
1072
|
+
<ITStatCard label={t("showcase.structure.statSalesToday")} value="$4,320" trend="+5.4%" trendDirection="up" color="bg-blue-50 dark:bg-blue-950/20" />
|
|
1070
1073
|
</ITGrid>
|
|
1071
1074
|
<ITGrid item xs={12} sm={6} lg={3}>
|
|
1072
|
-
<ITStatCard label="
|
|
1075
|
+
<ITStatCard label={t("showcase.structure.navOrders")} value="89" trend="-2.1%" trendDirection="down" color="bg-amber-50 dark:bg-amber-950/20" />
|
|
1073
1076
|
</ITGrid>
|
|
1074
1077
|
<ITGrid item xs={12} sm={6} lg={3}>
|
|
1075
|
-
<ITStatCard label="
|
|
1078
|
+
<ITStatCard label={t("showcase.structure.statTickets")} value="12" trend="-8%" trendDirection="down" color="bg-rose-50 dark:bg-rose-950/20" />
|
|
1076
1079
|
</ITGrid>
|
|
1077
1080
|
</ITGrid>
|
|
1078
|
-
<ITCard title="
|
|
1081
|
+
<ITCard title={t("showcase.structure.recentActivity")}>
|
|
1079
1082
|
<ITText className="text-sm text-slate-600 dark:text-slate-300">
|
|
1080
|
-
|
|
1083
|
+
{t("showcase.structure.layoutBody")}
|
|
1081
1084
|
</ITText>
|
|
1082
1085
|
</ITCard>
|
|
1083
1086
|
</ITStack>
|
|
@@ -1087,19 +1090,23 @@ export const LayoutShowcase = () => {
|
|
|
1087
1090
|
controls={
|
|
1088
1091
|
<ITStack spacing={4}>
|
|
1089
1092
|
<div className="flex items-center justify-between">
|
|
1090
|
-
<span className="text-
|
|
1091
|
-
<ITSlideToggle isOn={collapsed} onToggle={setCollapsed} size="sm"
|
|
1093
|
+
<span className="font-mono text-[11px] font-medium uppercase tracking-[0.14em] text-slate-500 dark:text-slate-400">{t("showcase.structure.sidebarCollapsed")}</span>
|
|
1094
|
+
<ITSlideToggle isOn={collapsed} onToggle={setCollapsed} size="sm"
|
|
1095
|
+
ariaLabel={t("showcase.structure.sidebarCollapsed")}
|
|
1096
|
+
/>
|
|
1092
1097
|
</div>
|
|
1093
1098
|
<div className="text-xs text-slate-500">
|
|
1094
|
-
|
|
1099
|
+
{t("showcase.structure.layoutHint")}
|
|
1095
1100
|
</div>
|
|
1096
1101
|
</ITStack>
|
|
1097
1102
|
}
|
|
1098
1103
|
gallery={
|
|
1099
|
-
<ITStack spacing={
|
|
1104
|
+
<ITStack spacing={8}>
|
|
1100
1105
|
<div>
|
|
1101
|
-
<
|
|
1102
|
-
|
|
1106
|
+
<h3 className="mb-3 font-mono text-[11px] font-medium uppercase tracking-[0.14em] text-slate-500 dark:text-slate-400">
|
|
1107
|
+
{t("showcase.structure.galleryNavbarStandalone")}
|
|
1108
|
+
</h3>
|
|
1109
|
+
<div className="overflow-hidden rounded-[10px] border border-slate-200 dark:border-slate-800">
|
|
1103
1110
|
<ITNavbar
|
|
1104
1111
|
logoText="AXZY"
|
|
1105
1112
|
navigationItems={navbarItems}
|
|
@@ -1107,74 +1114,90 @@ export const LayoutShowcase = () => {
|
|
|
1107
1114
|
userName: "Auditor AXZY",
|
|
1108
1115
|
userEmail: "auditor@axzy.dev",
|
|
1109
1116
|
menuItems: [
|
|
1110
|
-
{ label: "
|
|
1111
|
-
{ label: "
|
|
1117
|
+
{ label: t("showcase.structure.navSettings"), onClick: () => {} },
|
|
1118
|
+
{ label: t("showcase.structure.navLogout"), onClick: () => {} },
|
|
1112
1119
|
],
|
|
1113
1120
|
}}
|
|
1114
1121
|
>
|
|
1115
|
-
<div className="p-
|
|
1116
|
-
|
|
1122
|
+
<div className="p-6">
|
|
1123
|
+
<p className="font-mono text-[11px] uppercase tracking-[0.14em] text-slate-500 dark:text-slate-400">
|
|
1124
|
+
{navActiveId
|
|
1125
|
+
? t("showcase.structure.activeItem", {
|
|
1126
|
+
label: navbarItems.find((item) => item.isActive)?.label ?? "",
|
|
1127
|
+
})
|
|
1128
|
+
: t("showcase.structure.selectNavItem")}
|
|
1129
|
+
</p>
|
|
1117
1130
|
</div>
|
|
1118
1131
|
</ITNavbar>
|
|
1119
1132
|
</div>
|
|
1120
|
-
<div className="mt-3">
|
|
1121
|
-
<CodeViewer code={navbarCode} />
|
|
1122
|
-
</div>
|
|
1123
1133
|
</div>
|
|
1124
1134
|
|
|
1125
1135
|
<div>
|
|
1126
|
-
<
|
|
1127
|
-
|
|
1136
|
+
<h3 className="mb-3 font-mono text-[11px] font-medium uppercase tracking-[0.14em] text-slate-500 dark:text-slate-400">
|
|
1137
|
+
{t("showcase.structure.galleryNavbarSubmenus")}
|
|
1138
|
+
</h3>
|
|
1139
|
+
<div className="overflow-hidden rounded-[10px] border border-slate-200 dark:border-slate-800">
|
|
1128
1140
|
<ITNavbar
|
|
1129
1141
|
logoText="Admin"
|
|
1130
1142
|
navigationItems={[
|
|
1131
|
-
{ id: "u", label: "
|
|
1143
|
+
{ id: "u", label: t("showcase.structure.navUsers"), icon: <FaUsers /> },
|
|
1132
1144
|
{
|
|
1133
1145
|
id: "s",
|
|
1134
|
-
label: "
|
|
1146
|
+
label: t("showcase.structure.navSales"),
|
|
1135
1147
|
icon: <FaShoppingCart />,
|
|
1136
1148
|
subitems: [
|
|
1137
|
-
{ id: "o", label: "
|
|
1138
|
-
{ id: "i", label: "
|
|
1149
|
+
{ id: "o", label: t("showcase.structure.navOrders"), action: () => {} },
|
|
1150
|
+
{ id: "i", label: t("showcase.structure.navInvoices"), action: () => {} },
|
|
1139
1151
|
],
|
|
1140
1152
|
},
|
|
1141
|
-
{ id: "c", label: "
|
|
1153
|
+
{ id: "c", label: t("showcase.structure.navConfiguration"), icon: <FaCog /> },
|
|
1142
1154
|
]}
|
|
1143
1155
|
userMenu={{
|
|
1144
1156
|
userName: "Admin",
|
|
1145
1157
|
userEmail: "admin@axzy.dev",
|
|
1146
|
-
menuItems: [{ label: "
|
|
1158
|
+
menuItems: [{ label: t("showcase.structure.navExit"), onClick: () => {} }],
|
|
1147
1159
|
}}
|
|
1148
1160
|
>
|
|
1149
|
-
<div className="p-
|
|
1150
|
-
|
|
1161
|
+
<div className="p-6">
|
|
1162
|
+
<p className="font-mono text-[11px] uppercase tracking-[0.14em] text-slate-500 dark:text-slate-400">
|
|
1163
|
+
{t("showcase.structure.submenuHint")}
|
|
1164
|
+
</p>
|
|
1151
1165
|
</div>
|
|
1152
1166
|
</ITNavbar>
|
|
1153
1167
|
</div>
|
|
1154
1168
|
</div>
|
|
1155
1169
|
|
|
1156
1170
|
<div>
|
|
1157
|
-
<
|
|
1158
|
-
|
|
1171
|
+
<h3 className="mb-3 font-mono text-[11px] font-medium uppercase tracking-[0.14em] text-slate-500 dark:text-slate-400">
|
|
1172
|
+
{t("showcase.structure.gallerySidebarBadges")}
|
|
1173
|
+
</h3>
|
|
1174
|
+
<div className="flex h-[320px] overflow-hidden rounded-[10px] border border-slate-200 dark:border-slate-800">
|
|
1159
1175
|
<ITSidebar
|
|
1160
1176
|
visibleOnMobile
|
|
1161
1177
|
className="h-full"
|
|
1162
1178
|
subitemConnector="dot"
|
|
1163
1179
|
navigationItems={[
|
|
1164
|
-
{ id: "home", label: "
|
|
1165
|
-
{ id: "inbox", label: "
|
|
1166
|
-
{ id: "alerts", label: "
|
|
1167
|
-
{ id: "settings", label: "
|
|
1180
|
+
{ id: "home", label: t("showcase.common.home"), icon: <FaHome />, isActive: true, action: () => {} },
|
|
1181
|
+
{ id: "inbox", label: t("showcase.structure.navInbox"), icon: <FaUsers />, badge: 12, action: () => {} },
|
|
1182
|
+
{ id: "alerts", label: t("showcase.structure.navAlerts"), icon: <FaBell />, badge: 3, badgeProps: { color: "warning", variant: "outlined" }, action: () => {} },
|
|
1183
|
+
{ id: "settings", label: t("showcase.structure.navConfiguration"), icon: <FaCog />, action: () => {} },
|
|
1168
1184
|
]}
|
|
1169
1185
|
notification={{
|
|
1170
1186
|
count: 5,
|
|
1171
1187
|
icon: <FaBell />,
|
|
1172
|
-
label: "
|
|
1188
|
+
label: t("sandbox.notifications"),
|
|
1173
1189
|
onClick: () => {},
|
|
1174
1190
|
}}
|
|
1175
1191
|
/>
|
|
1176
|
-
<div className="flex-1 p-6
|
|
1177
|
-
|
|
1192
|
+
<div className="flex-1 p-6">
|
|
1193
|
+
<p className="font-mono text-[11px] leading-relaxed text-slate-500 dark:text-slate-400">
|
|
1194
|
+
{t("showcase.structure.sidebarItemsHint1")}{" "}
|
|
1195
|
+
<code className="rounded-[4px] border border-slate-200 px-1 dark:border-slate-800">badge</code> +{" "}
|
|
1196
|
+
<code className="rounded-[4px] border border-slate-200 px-1 dark:border-slate-800">badgeProps</code>
|
|
1197
|
+
{t("showcase.structure.sidebarItemsHint2")}{" "}
|
|
1198
|
+
<code className="rounded-[4px] border border-slate-200 px-1 dark:border-slate-800">notification</code>{" "}
|
|
1199
|
+
{t("showcase.structure.sidebarItemsHint3")}
|
|
1200
|
+
</p>
|
|
1178
1201
|
</div>
|
|
1179
1202
|
</div>
|
|
1180
1203
|
</div>
|
|
@@ -1215,13 +1238,14 @@ export const LayoutShowcase = () => {
|
|
|
1215
1238
|
// ITAccordion Showcase
|
|
1216
1239
|
// ─────────────────────────────────────────
|
|
1217
1240
|
export const AccordionShowcase = () => {
|
|
1241
|
+
const { t } = useITTranslation();
|
|
1218
1242
|
const [allowMultiple, setAllowMultiple] = useState(false);
|
|
1219
1243
|
|
|
1220
1244
|
const items = [
|
|
1221
|
-
{ id: "what", title: "
|
|
1222
|
-
{ id: "install", title: "
|
|
1223
|
-
{ id: "theme", title: "
|
|
1224
|
-
{ id: "disabled", title: "
|
|
1245
|
+
{ id: "what", title: t("showcase.structure.accWhat"), content: t("showcase.structure.accWhatBody") },
|
|
1246
|
+
{ id: "install", title: t("showcase.structure.accInstall"), content: "pnpm add @axzydev/axzy_ui_system" },
|
|
1247
|
+
{ id: "theme", title: t("showcase.structure.accTheme"), content: t("showcase.structure.accThemeBody") },
|
|
1248
|
+
{ id: "disabled", title: t("showcase.structure.accDisabled"), content: t("showcase.structure.accDisabledBody"), disabled: true },
|
|
1225
1249
|
];
|
|
1226
1250
|
|
|
1227
1251
|
const code = `<ITAccordion\n allowMultiple={${allowMultiple}}\n defaultOpenIds={['what']}\n items={[\n { id: 'what', title: '¿Qué es AXZY?', content: '...' },\n { id: 'install', title: '¿Cómo lo instalo?', content: '...' },\n ]}\n/>`;
|
|
@@ -1229,7 +1253,7 @@ export const AccordionShowcase = () => {
|
|
|
1229
1253
|
return (
|
|
1230
1254
|
<ShowcaseLayout
|
|
1231
1255
|
title="ITAccordion"
|
|
1232
|
-
description="
|
|
1256
|
+
description={t("showcase.structure.accordionDesc")}
|
|
1233
1257
|
code={code}
|
|
1234
1258
|
demo={
|
|
1235
1259
|
<div className="w-full max-w-xl">
|
|
@@ -1238,18 +1262,20 @@ export const AccordionShowcase = () => {
|
|
|
1238
1262
|
}
|
|
1239
1263
|
controls={
|
|
1240
1264
|
<div className="flex items-center justify-between">
|
|
1241
|
-
<span className="text-
|
|
1242
|
-
<ITSlideToggle isOn={allowMultiple} onToggle={setAllowMultiple} size="sm"
|
|
1265
|
+
<span className="font-mono text-[11px] font-medium uppercase tracking-[0.14em] text-slate-500 dark:text-slate-400">{t("showcase.structure.allowMultiple")}</span>
|
|
1266
|
+
<ITSlideToggle isOn={allowMultiple} onToggle={setAllowMultiple} size="sm"
|
|
1267
|
+
ariaLabel={t("showcase.structure.allowMultiple")}
|
|
1268
|
+
/>
|
|
1243
1269
|
</div>
|
|
1244
1270
|
}
|
|
1245
1271
|
gallery={
|
|
1246
1272
|
<div className="grid grid-cols-1 md:grid-cols-2 gap-8">
|
|
1247
1273
|
<div>
|
|
1248
|
-
<p className="mb-3 text-[10px] font-bold uppercase tracking-wider text-slate-400">
|
|
1274
|
+
<p className="mb-3 text-[10px] font-bold uppercase tracking-wider text-slate-400">{t("showcase.structure.accordionBordered")}</p>
|
|
1249
1275
|
<ITAccordion items={items.slice(0, 3)} variant="bordered" defaultOpenIds={["install"]} />
|
|
1250
1276
|
</div>
|
|
1251
1277
|
<div>
|
|
1252
|
-
<p className="mb-3 text-[10px] font-bold uppercase tracking-wider text-slate-400">
|
|
1278
|
+
<p className="mb-3 text-[10px] font-bold uppercase tracking-wider text-slate-400">{t("showcase.structure.accordionSeparated")}</p>
|
|
1253
1279
|
<ITAccordion items={items.slice(0, 3)} defaultOpenIds={["theme"]} />
|
|
1254
1280
|
</div>
|
|
1255
1281
|
</div>
|