siesa-ui-kit 1.0.2 → 1.0.3
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/package.json +2 -9
- package/claude/settings.local.json +0 -7
- package/docs/border-radius.md +0 -1261
- package/docs/colors.md +0 -832
- package/docs/dark-mode-guide.md +0 -1426
- package/docs/filters.md +0 -1243
- package/docs/icons.md +0 -1283
- package/docs/shadows.md +0 -1377
- package/docs/spacing.md +0 -1684
- package/docs/typography.md +0 -1268
- package/postcss.config.cjs +0 -6
- package/public/,Business Logo.png +0 -0
- package/public/.Siesa Logo.png +0 -0
- package/public/bg_siesa.png +0 -0
- package/public/siesa_logo_mobile.png +0 -0
- package/public/vite.svg +0 -1
- package/src/App.css +0 -42
- package/src/App.tsx +0 -8
- package/src/ButtonTest.tsx +0 -147
- package/src/assets/fonts/README.md +0 -261
- package/src/assets/fonts/SiesaBT/SiesaBT-Bold.otf +0 -0
- package/src/assets/fonts/SiesaBT/SiesaBT-Light.otf +0 -0
- package/src/assets/fonts/SiesaBT/SiesaBT-Regular.otf +0 -0
- package/src/assets/react.svg +0 -1
- package/src/components/Alert/Alert.stories.tsx +0 -332
- package/src/components/Alert/Alert.tsx +0 -106
- package/src/components/Alert/Alert.types.ts +0 -54
- package/src/components/Avatar/Avatar.stories.tsx +0 -494
- package/src/components/Avatar/Avatar.tsx +0 -143
- package/src/components/Avatar/Avatar.types.ts +0 -53
- package/src/components/Badge/Badge.stories.tsx +0 -339
- package/src/components/Badge/Badge.tsx +0 -278
- package/src/components/Badge/Badge.types.ts +0 -58
- package/src/components/Button/Button.stories.tsx +0 -950
- package/src/components/Button/Button.tsx +0 -337
- package/src/components/Button/Button.types.ts +0 -180
- package/src/components/Button/icons.tsx +0 -87
- package/src/components/Button/index.ts +0 -3
- package/src/components/Checkbox/Checkbox.stories.tsx +0 -453
- package/src/components/Checkbox/Checkbox.tsx +0 -208
- package/src/components/Checkbox/Checkbox.types.ts +0 -61
- package/src/components/DescriptionList/DescriptionList.stories.tsx +0 -250
- package/src/components/DescriptionList/DescriptionList.tsx +0 -96
- package/src/components/DescriptionList/DescriptionList.types.ts +0 -29
- package/src/components/Divider/Divider.stories.tsx +0 -263
- package/src/components/Divider/Divider.tsx +0 -80
- package/src/components/Divider/Divider.types.ts +0 -24
- package/src/components/Dropdown/Dropdown.stories.tsx +0 -552
- package/src/components/Dropdown/Dropdown.tsx +0 -422
- package/src/components/Dropdown/Dropdown.types.ts +0 -146
- package/src/components/Dropdown/README.md +0 -266
- package/src/components/Dropdown/icons.tsx +0 -72
- package/src/components/Dropdown/index.ts +0 -8
- package/src/components/DropdownItemCollapsible/DropdownItemCollapsible.stories.tsx +0 -317
- package/src/components/DropdownItemCollapsible/DropdownItemCollapsible.tsx +0 -287
- package/src/components/DropdownItemCollapsible/DropdownItemCollapsible.types.ts +0 -111
- package/src/components/DropdownItemCollapsible/README.md +0 -264
- package/src/components/DropdownItemCollapsible/icons.tsx +0 -57
- package/src/components/DropdownItemCollapsible/index.ts +0 -12
- package/src/components/DropdownItemHeading/DropdownItemHeading.stories.tsx +0 -386
- package/src/components/DropdownItemHeading/DropdownItemHeading.tsx +0 -216
- package/src/components/DropdownItemHeading/DropdownItemHeading.types.ts +0 -93
- package/src/components/DropdownItemHeading/README.md +0 -573
- package/src/components/DropdownItemHeading/icons.tsx +0 -125
- package/src/components/DropdownItemHeading/index.ts +0 -3
- package/src/components/Input/Input.stories.tsx +0 -583
- package/src/components/Input/Input.tsx +0 -204
- package/src/components/Input/Input.types.ts +0 -80
- package/src/components/Input/icons.tsx +0 -145
- package/src/components/Input/index.ts +0 -2
- package/src/components/LoginView/LoginView.stories.tsx +0 -148
- package/src/components/LoginView/LoginView.tsx +0 -426
- package/src/components/LoginView/LoginView.types.ts +0 -52
- package/src/components/LoginView/README.md +0 -396
- package/src/components/LoginView/icons.tsx +0 -85
- package/src/components/LoginView/index.ts +0 -3
- package/src/components/Navbar/Navbar.stories.tsx +0 -810
- package/src/components/Navbar/Navbar.tsx +0 -755
- package/src/components/Navbar/Navbar.types.ts +0 -219
- package/src/components/Navbar/README.md +0 -279
- package/src/components/Navbar/icons.tsx +0 -102
- package/src/components/Navbar/index.ts +0 -8
- package/src/components/NavigationBar/NavigationBar.stories.tsx +0 -406
- package/src/components/NavigationBar/NavigationBar.tsx +0 -246
- package/src/components/NavigationBar/NavigationBar.types.ts +0 -74
- package/src/components/NavigationBar/README.md +0 -469
- package/src/components/NavigationBar/index.ts +0 -2
- package/src/components/NavigationRail/NavigationRail.stories.tsx +0 -417
- package/src/components/NavigationRail/NavigationRail.tsx +0 -418
- package/src/components/NavigationRail/NavigationRail.types.ts +0 -109
- package/src/components/NavigationRail/README.md +0 -224
- package/src/components/NavigationRail/index.ts +0 -2
- package/src/components/NavigationRailItem/NavigationRailItem.stories.tsx +0 -667
- package/src/components/NavigationRailItem/NavigationRailItem.tsx +0 -313
- package/src/components/NavigationRailItem/NavigationRailItem.types.ts +0 -167
- package/src/components/NavigationRailItem/README.md +0 -476
- package/src/components/NavigationRailItem/index.ts +0 -2
- package/src/components/NavigationRailPanel/NavigationRailPanel.stories.tsx +0 -462
- package/src/components/NavigationRailPanel/NavigationRailPanel.tsx +0 -332
- package/src/components/NavigationRailPanel/NavigationRailPanel.types.ts +0 -178
- package/src/components/NavigationRailPanel/README.md +0 -461
- package/src/components/NavigationRailPanel/index.ts +0 -6
- package/src/components/NavigationRailTypes/NavigationRailTypes.stories.tsx +0 -528
- package/src/components/NavigationRailTypes/NavigationRailTypes.tsx +0 -378
- package/src/components/NavigationRailTypes/NavigationRailTypes.types.ts +0 -130
- package/src/components/NavigationRailTypes/README.md +0 -573
- package/src/components/NavigationRailTypes/icons.tsx +0 -141
- package/src/components/NavigationRailTypes/index.ts +0 -7
- package/src/components/Notification/Notification.stories.tsx +0 -513
- package/src/components/Notification/Notification.tsx +0 -145
- package/src/components/Notification/Notification.types.ts +0 -142
- package/src/components/Notification/README.md +0 -409
- package/src/components/Notification/index.ts +0 -3
- package/src/components/POSConvention/POSConvention.stories.tsx +0 -235
- package/src/components/POSConvention/POSConvention.tsx +0 -129
- package/src/components/POSConvention/POSConvention.types.ts +0 -38
- package/src/components/POSConvention/README.md +0 -123
- package/src/components/POSConvention/icons.tsx +0 -45
- package/src/components/POSConvention/index.ts +0 -3
- package/src/components/POSLocationButton/POSLocationButton.stories.tsx +0 -531
- package/src/components/POSLocationButton/POSLocationButton.tsx +0 -247
- package/src/components/POSLocationButton/POSLocationButton.types.ts +0 -87
- package/src/components/POSLocationButton/README.md +0 -253
- package/src/components/POSLocationButton/icons.tsx +0 -120
- package/src/components/POSLocationButton/index.ts +0 -14
- package/src/components/POSNumberButton/POSNumberButton.stories.tsx +0 -415
- package/src/components/POSNumberButton/POSNumberButton.tsx +0 -179
- package/src/components/POSNumberButton/POSNumberButton.types.ts +0 -51
- package/src/components/POSNumberButton/README.md +0 -321
- package/src/components/POSNumberButton/index.ts +0 -3
- package/src/components/POSProductButton/POSProductButton.stories.tsx +0 -318
- package/src/components/POSProductButton/POSProductButton.tsx +0 -152
- package/src/components/POSProductButton/POSProductButton.types.ts +0 -46
- package/src/components/POSProductButton/README.md +0 -269
- package/src/components/POSProductButton/index.ts +0 -2
- package/src/components/POSProductCard/POSProductCard.stories.tsx +0 -642
- package/src/components/POSProductCard/POSProductCard.tsx +0 -208
- package/src/components/POSProductCard/POSProductCard.types.ts +0 -76
- package/src/components/POSProductCard/README.md +0 -179
- package/src/components/POSProductCard/icons.tsx +0 -26
- package/src/components/POSProductCard/index.ts +0 -2
- package/src/components/POSProductSidebarItems/POSProductSidebarItems.stories.tsx +0 -753
- package/src/components/POSProductSidebarItems/POSProductSidebarItems.tsx +0 -332
- package/src/components/POSProductSidebarItems/POSProductSidebarItems.types.ts +0 -119
- package/src/components/POSProductSidebarItems/README.md +0 -198
- package/src/components/POSProductSidebarItems/icons.tsx +0 -21
- package/src/components/POSProductSidebarItems/index.ts +0 -3
- package/src/components/POSTable/POSTable.stories.tsx +0 -737
- package/src/components/POSTable/POSTable.tsx +0 -401
- package/src/components/POSTable/POSTable.types.ts +0 -83
- package/src/components/POSTable/README.md +0 -286
- package/src/components/POSTable/index.ts +0 -7
- package/src/components/Pagination/Pagination.stories.tsx +0 -555
- package/src/components/Pagination/Pagination.tsx +0 -286
- package/src/components/Pagination/Pagination.types.ts +0 -93
- package/src/components/Pagination/README.md +0 -298
- package/src/components/Pagination/icons.tsx +0 -47
- package/src/components/Pagination/index.ts +0 -3
- package/src/components/Quantity/Quantity.stories.tsx +0 -457
- package/src/components/Quantity/Quantity.tsx +0 -289
- package/src/components/Quantity/Quantity.types.ts +0 -70
- package/src/components/Radio/Radio.stories.tsx +0 -523
- package/src/components/Radio/Radio.tsx +0 -170
- package/src/components/Radio/Radio.types.ts +0 -122
- package/src/components/Select/README.md +0 -299
- package/src/components/Select/Select.stories.tsx +0 -673
- package/src/components/Select/Select.tsx +0 -454
- package/src/components/Select/Select.types.ts +0 -148
- package/src/components/Select/icons.tsx +0 -50
- package/src/components/Select/index.ts +0 -3
- package/src/components/SignUpView/SignUpView.stories.tsx +0 -129
- package/src/components/SignUpView/SignUpView.tsx +0 -503
- package/src/components/SignUpView/SignUpView.types.ts +0 -58
- package/src/components/SignUpView/icons.tsx +0 -71
- package/src/components/SignUpView/index.ts +0 -3
- package/src/components/Switch/README.md +0 -112
- package/src/components/Switch/Switch.stories.tsx +0 -550
- package/src/components/Switch/Switch.tsx +0 -246
- package/src/components/Switch/Switch.types.ts +0 -67
- package/src/components/Table/README.md +0 -369
- package/src/components/Table/Table.stories.tsx +0 -805
- package/src/components/Table/Table.tsx +0 -688
- package/src/components/Table/Table.types.ts +0 -204
- package/src/components/Table/index.ts +0 -9
- package/src/components/Tabs/README.md +0 -201
- package/src/components/Tabs/Tabs.stories.tsx +0 -580
- package/src/components/Tabs/Tabs.tsx +0 -356
- package/src/components/Tabs/Tabs.types.ts +0 -127
- package/src/components/Tabs/icons.tsx +0 -129
- package/src/components/Tabs/index.ts +0 -11
- package/src/components/Textarea/Textarea.stories.tsx +0 -535
- package/src/components/Textarea/Textarea.tsx +0 -188
- package/src/components/Textarea/Textarea.types.ts +0 -54
- package/src/context/ThemeContext.tsx +0 -99
- package/src/context/index.ts +0 -1
- package/src/index.css +0 -29
- package/src/index.ts +0 -102
- package/src/main.tsx +0 -10
- package/src/views/ListView/ListView.stories.tsx +0 -329
- package/src/views/ListView/ListView.tsx +0 -570
- package/src/views/ListView/ListView.types.ts +0 -211
- package/src/views/ListView/icons.tsx +0 -282
- package/src/views/ListView/index.ts +0 -11
- package/src/views/LoginView/LoginView.stories.tsx +0 -148
- package/src/views/LoginView/LoginView.tsx +0 -426
- package/src/views/LoginView/LoginView.types.ts +0 -52
- package/src/views/LoginView/README.md +0 -396
- package/src/views/LoginView/icons.tsx +0 -85
- package/src/views/LoginView/index.ts +0 -3
- package/src/views/ProductsView/ProductsView.stories.tsx +0 -344
- package/src/views/ProductsView/ProductsView.tsx +0 -480
- package/src/views/ProductsView/ProductsView.types.ts +0 -238
- package/src/views/ProductsView/README.md +0 -312
- package/src/views/ProductsView/icons.tsx +0 -38
- package/src/views/ProductsView/index.ts +0 -8
- package/src/views/RecoverPasswordView/README.md +0 -269
- package/src/views/RecoverPasswordView/RecoverPasswordView.stories.tsx +0 -131
- package/src/views/RecoverPasswordView/RecoverPasswordView.tsx +0 -376
- package/src/views/RecoverPasswordView/RecoverPasswordView.types.ts +0 -56
- package/src/views/RecoverPasswordView/icons.tsx +0 -17
- package/src/views/RecoverPasswordView/index.ts +0 -2
- package/src/views/SignUpView/SignUpView.stories.tsx +0 -129
- package/src/views/SignUpView/SignUpView.tsx +0 -503
- package/src/views/SignUpView/SignUpView.types.ts +0 -58
- package/src/views/SignUpView/icons.tsx +0 -71
- package/src/views/SignUpView/index.ts +0 -3
- package/src/views/TableLayoutView/README.md +0 -268
- package/src/views/TableLayoutView/TableLayoutView.stories.tsx +0 -235
- package/src/views/TableLayoutView/TableLayoutView.tsx +0 -461
- package/src/views/TableLayoutView/TableLayoutView.types.ts +0 -209
- package/src/views/TableLayoutView/icons.tsx +0 -113
- package/src/views/TableLayoutView/index.ts +0 -6
- package/storybook/main.ts +0 -20
- package/storybook/preview.tsx +0 -84
- package/storybook/vitest.setup.ts +0 -7
- package/tailwind.config.js +0 -128
|
@@ -1,378 +0,0 @@
|
|
|
1
|
-
import React, { useState } from 'react';
|
|
2
|
-
import type { NavigationRailTypesProps, NavigationRailItem } from './NavigationRailTypes.types';
|
|
3
|
-
import { ChevronRightIcon, ChevronLeftIcon, ClockIcon, MagnifyingGlassIcon } from './icons';
|
|
4
|
-
import { Button } from '../Button/Button';
|
|
5
|
-
import { Divider } from '../Divider/Divider';
|
|
6
|
-
import { DropdownItemCollapsible } from '../DropdownItemCollapsible/DropdownItemCollapsible';
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* Componente NavigationRailTypes del sistema de diseño Siesa
|
|
10
|
-
*
|
|
11
|
-
* Barra de navegación lateral que permite dos modos visuales:
|
|
12
|
-
* - **Collapsed (Colapsado)**: 80px width, solo iconos con botón de búsqueda
|
|
13
|
-
* - **Expanded (Expandido)**: 215px width, con labels y búsqueda integrada
|
|
14
|
-
*
|
|
15
|
-
* **Características:**
|
|
16
|
-
* - Dos modos: collapsed e expanded (toggle con botón "Colapsar")
|
|
17
|
-
* - Soporta items con badges de notificación
|
|
18
|
-
* - Items colapsables para agrupar navegación relacionada
|
|
19
|
-
* - Botón "Recientes" en footer
|
|
20
|
-
* - Búsqueda integrada (solo en modo expanded)
|
|
21
|
-
* - Dark mode completo
|
|
22
|
-
* - Focus rings adaptativos
|
|
23
|
-
*
|
|
24
|
-
* **Especificaciones de Figma:**
|
|
25
|
-
* - Collapsed: 80px width, items con height 44px + gap 12px
|
|
26
|
-
* - Expanded: 215px width, items reutilizan DropdownItemCollapsible
|
|
27
|
-
* - Icono search: 16x16px, azul (#0e79fd)
|
|
28
|
-
* - Borde derecho: 1px solid #e4e4e7 (collapsed)
|
|
29
|
-
* - Borde izquierdo: 1px solid #e4e4e7 (expanded)
|
|
30
|
-
* - Height total: 900px (scroll si necesario)
|
|
31
|
-
*
|
|
32
|
-
* **Estructura:**
|
|
33
|
-
* 1. Header (Search en expanded) - altura variable
|
|
34
|
-
* 2. Menu & Destinations - flex 1 con items scrollables
|
|
35
|
-
* 3. Footer - Actions con divider y botones
|
|
36
|
-
*
|
|
37
|
-
* **Estados de Items:**
|
|
38
|
-
* - `default`: Text color content-primary
|
|
39
|
-
* - `hover`: Fondo hover-overlay, icon color content-custom-primary
|
|
40
|
-
* - `active`: Fondo custom-primary, text color custom-primary
|
|
41
|
-
* - `disabled`: Opacity 50%, sin interacción
|
|
42
|
-
*
|
|
43
|
-
* **Colores (Light Mode):**
|
|
44
|
-
* - Background: background-primary (#ffffff)
|
|
45
|
-
* - Borders: border-primary (#e4e4e7)
|
|
46
|
-
* - Text: content-primary (#18181b)
|
|
47
|
-
* - Icons: content-secondary (#a1a1aa)
|
|
48
|
-
* - Icon hover: content-custom-primary (#0e79fd)
|
|
49
|
-
* - Divider: border-primary (#e4e4e7)
|
|
50
|
-
* - Search input: bg-primary, border-primary, placeholder: content-tertiary
|
|
51
|
-
*
|
|
52
|
-
* **Colores (Dark Mode):**
|
|
53
|
-
* - Background: background-primary/dark (#09090b)
|
|
54
|
-
* - Borders: border-primary/dark (#3f3f46)
|
|
55
|
-
* - Text: content-primary/dark (#fafafa)
|
|
56
|
-
* - Icons: content-secondary/dark (#a1a1aa)
|
|
57
|
-
* - Icon hover: content-custom-primary/dark (#bfe2fe)
|
|
58
|
-
* - Divider: border-primary/dark (#3f3f46)
|
|
59
|
-
*
|
|
60
|
-
* **Tipografía:**
|
|
61
|
-
* - Items labels: Paragraph/Small (14px, Regular, line-height 20px)
|
|
62
|
-
* - Heading: Paragraph/Tiny (12px, Regular, line-height 16px) - si aplica
|
|
63
|
-
* - Button labels: Label Small (14px, Bold)
|
|
64
|
-
*
|
|
65
|
-
* @see docs/colors.md - Sistema de colores
|
|
66
|
-
* @see docs/typography.md - Sistema tipográfico
|
|
67
|
-
* @see docs/spacing.md - Sistema de espaciado (gap-3, px-4, py-2, etc)
|
|
68
|
-
* @see https://www.figma.com/design/5XNqf2YTxvwemxwo1LMQ6j/Siesa-UI-Kit?node-id=6135-36219
|
|
69
|
-
*
|
|
70
|
-
* @example
|
|
71
|
-
* ```tsx
|
|
72
|
-
* const navItems: NavigationRailItem[] = [
|
|
73
|
-
* {
|
|
74
|
-
* id: 'home',
|
|
75
|
-
* label: 'Home',
|
|
76
|
-
* icon: <HomeIcon />,
|
|
77
|
-
* active: true,
|
|
78
|
-
* onClick: () => navigate('/home'),
|
|
79
|
-
* },
|
|
80
|
-
* {
|
|
81
|
-
* id: 'users',
|
|
82
|
-
* label: 'Users',
|
|
83
|
-
* icon: <UsersIcon />,
|
|
84
|
-
* badge: true,
|
|
85
|
-
* onClick: () => navigate('/users'),
|
|
86
|
-
* },
|
|
87
|
-
* ];
|
|
88
|
-
*
|
|
89
|
-
* const [isCollapsed, setIsCollapsed] = useState(true);
|
|
90
|
-
*
|
|
91
|
-
* <NavigationRailTypes
|
|
92
|
-
* collapsed={isCollapsed}
|
|
93
|
-
* items={navItems}
|
|
94
|
-
* showRecentButton={true}
|
|
95
|
-
* onCollapsedChange={setIsCollapsed}
|
|
96
|
-
* onItemClick={(index, item) => console.log('Selected:', item.id)}
|
|
97
|
-
* />
|
|
98
|
-
* ```
|
|
99
|
-
*
|
|
100
|
-
* @see NavigationRailTypes.types.ts - Props e interfaces
|
|
101
|
-
*/
|
|
102
|
-
export const NavigationRailTypes = React.forwardRef<
|
|
103
|
-
HTMLDivElement,
|
|
104
|
-
NavigationRailTypesProps
|
|
105
|
-
>(
|
|
106
|
-
(
|
|
107
|
-
{
|
|
108
|
-
collapsed = true,
|
|
109
|
-
items = [],
|
|
110
|
-
showRecentButton = true,
|
|
111
|
-
onCollapsedChange,
|
|
112
|
-
onItemClick,
|
|
113
|
-
className,
|
|
114
|
-
},
|
|
115
|
-
ref
|
|
116
|
-
) => {
|
|
117
|
-
const [searchQuery, setSearchQuery] = useState('');
|
|
118
|
-
|
|
119
|
-
const handleCollapsedToggle = () => {
|
|
120
|
-
onCollapsedChange?.(!collapsed);
|
|
121
|
-
};
|
|
122
|
-
|
|
123
|
-
const handleItemClick = (index: number, item: NavigationRailItem) => {
|
|
124
|
-
item.onClick?.(new Event('click') as any);
|
|
125
|
-
onItemClick?.(index, item);
|
|
126
|
-
};
|
|
127
|
-
|
|
128
|
-
return (
|
|
129
|
-
<div
|
|
130
|
-
ref={ref}
|
|
131
|
-
className={`
|
|
132
|
-
${collapsed ? 'w-[80px]' : 'w-[215px]'}
|
|
133
|
-
bg-background-primary dark:bg-background-primary
|
|
134
|
-
dark:border-border-primary dark:border-l
|
|
135
|
-
${collapsed ? 'border-r dark:border-border-primary border-border-primary' : 'border-l dark:border-border-primary border-border-primary'}
|
|
136
|
-
border-solid
|
|
137
|
-
h-[900px]
|
|
138
|
-
flex flex-col
|
|
139
|
-
items-center
|
|
140
|
-
relative
|
|
141
|
-
transition-all duration-300
|
|
142
|
-
${className || ''}
|
|
143
|
-
`}
|
|
144
|
-
>
|
|
145
|
-
{/* Sección de búsqueda - solo en modo expandido */}
|
|
146
|
-
{!collapsed && (
|
|
147
|
-
<div className="w-full flex flex-col gap-3 px-3 py-3 relative shrink-0">
|
|
148
|
-
<div className="w-full flex flex-col gap-2 items-start relative shrink-0">
|
|
149
|
-
<div className="w-full bg-background-primary dark:bg-background-primary border border-border-primary dark:border-border-primary border-solid flex items-center overflow-hidden px-3 py-1.5 relative rounded-lg shadow-sm shrink-0">
|
|
150
|
-
<div className="flex flex-1 gap-2 items-center min-h-px min-w-px relative shrink-0">
|
|
151
|
-
<MagnifyingGlassIcon className="opacity-50 overflow-clip relative shrink-0 size-4 text-content-secondary dark:text-content-secondary" />
|
|
152
|
-
<input
|
|
153
|
-
type="text"
|
|
154
|
-
placeholder="Buscar módulo"
|
|
155
|
-
value={searchQuery}
|
|
156
|
-
onChange={(e) => setSearchQuery(e.target.value)}
|
|
157
|
-
className="
|
|
158
|
-
flex-1 bg-transparent
|
|
159
|
-
font-['SiesaBT',sans-serif] font-normal text-sm leading-5
|
|
160
|
-
text-content-primary dark:text-content-primary
|
|
161
|
-
placeholder:text-content-tertiary dark:placeholder:text-content-tertiary
|
|
162
|
-
outline-none
|
|
163
|
-
"
|
|
164
|
-
/>
|
|
165
|
-
</div>
|
|
166
|
-
</div>
|
|
167
|
-
</div>
|
|
168
|
-
<Divider className="w-full" />
|
|
169
|
-
</div>
|
|
170
|
-
)}
|
|
171
|
-
|
|
172
|
-
{/* Main content - Menu & Destinations */}
|
|
173
|
-
<div
|
|
174
|
-
className={`
|
|
175
|
-
flex-1 flex flex-col
|
|
176
|
-
items-center min-h-px min-w-px
|
|
177
|
-
relative shrink-0
|
|
178
|
-
px-0
|
|
179
|
-
${collapsed
|
|
180
|
-
? 'gap-7 py-2 w-[80px]'
|
|
181
|
-
: 'gap-0.5 p-3 w-full bg-background-primary dark:bg-background-primary border-l dark:border-border-primary border-border-primary border-solid'
|
|
182
|
-
}
|
|
183
|
-
`}
|
|
184
|
-
>
|
|
185
|
-
{/* Botón Search en collapsed */}
|
|
186
|
-
{collapsed && (
|
|
187
|
-
<Button
|
|
188
|
-
type="default"
|
|
189
|
-
size="xl"
|
|
190
|
-
iconOnly
|
|
191
|
-
leftIcon={<MagnifyingGlassIcon className="overflow-clip relative shrink-0 size-4 text-primary-inverse-content dark:text-primary-inverse-content" />}
|
|
192
|
-
ariaLabel="Search"
|
|
193
|
-
/>
|
|
194
|
-
)}
|
|
195
|
-
|
|
196
|
-
{/* Items container */}
|
|
197
|
-
<div
|
|
198
|
-
className={`
|
|
199
|
-
flex flex-col items-center min-h-px min-w-px
|
|
200
|
-
relative shrink-0
|
|
201
|
-
flex-1
|
|
202
|
-
overflow-y-auto
|
|
203
|
-
${collapsed
|
|
204
|
-
? 'gap-3 leading-none w-[80px]'
|
|
205
|
-
: 'gap-0.5 p-3 w-full'
|
|
206
|
-
}
|
|
207
|
-
`}
|
|
208
|
-
>
|
|
209
|
-
{items.length === 0 ? (
|
|
210
|
-
// Items de demo/ejemplo
|
|
211
|
-
<>
|
|
212
|
-
{collapsed &&
|
|
213
|
-
Array.from({ length: 4 }).map((_, idx) => (
|
|
214
|
-
<div
|
|
215
|
-
key={`demo-collapsed-${idx}`}
|
|
216
|
-
className={`
|
|
217
|
-
flex flex-col gap-1 items-center
|
|
218
|
-
px-0.5 py-0 relative
|
|
219
|
-
`}
|
|
220
|
-
>
|
|
221
|
-
<div className="flex flex-col items-center justify-center overflow-clip px-4 py-1 relative rounded-full shrink-0">
|
|
222
|
-
<svg
|
|
223
|
-
className="overflow-clip relative shrink-0 size-4 text-content-secondary dark:text-content-secondary"
|
|
224
|
-
fill="none"
|
|
225
|
-
viewBox="0 0 24 24"
|
|
226
|
-
stroke="currentColor"
|
|
227
|
-
>
|
|
228
|
-
<path
|
|
229
|
-
strokeLinecap="round"
|
|
230
|
-
strokeLinejoin="round"
|
|
231
|
-
strokeWidth={2}
|
|
232
|
-
d="M3 12a9 9 0 1118 0 9 9 0 01-18 0z"
|
|
233
|
-
/>
|
|
234
|
-
</svg>
|
|
235
|
-
</div>
|
|
236
|
-
</div>
|
|
237
|
-
))}
|
|
238
|
-
|
|
239
|
-
{!collapsed &&
|
|
240
|
-
Array.from({ length: 6 }).map((_, idx) => (
|
|
241
|
-
<DropdownItemCollapsible
|
|
242
|
-
key={`demo-expanded-${idx}`}
|
|
243
|
-
label="Item"
|
|
244
|
-
showDivider={false}
|
|
245
|
-
showHeading={false}
|
|
246
|
-
/>
|
|
247
|
-
))}
|
|
248
|
-
</>
|
|
249
|
-
) : collapsed ? (
|
|
250
|
-
// Items reales - collapsed mode
|
|
251
|
-
<>
|
|
252
|
-
{items.map((item, idx) => (
|
|
253
|
-
<button
|
|
254
|
-
key={item.id}
|
|
255
|
-
onClick={() => handleItemClick(idx, item)}
|
|
256
|
-
disabled={item.disabled}
|
|
257
|
-
className={`
|
|
258
|
-
flex flex-col gap-1 items-center
|
|
259
|
-
px-0.5 py-0
|
|
260
|
-
relative
|
|
261
|
-
rounded-full
|
|
262
|
-
focus:outline-none focus:ring-4 focus:ring-offset-2
|
|
263
|
-
focus:ring-primary-custom-400 focus:ring-offset-background-primary
|
|
264
|
-
dark:focus:ring-offset-background-primary
|
|
265
|
-
hover:opacity-80
|
|
266
|
-
disabled:opacity-50 disabled:pointer-events-none
|
|
267
|
-
transition-all duration-200
|
|
268
|
-
${item.active ? 'text-background-inverse-custom-primary dark:text-background-inverse-custom-primary' : 'text-content-secondary dark:text-content-secondary'}
|
|
269
|
-
`}
|
|
270
|
-
aria-label={item.ariaLabel || item.label}
|
|
271
|
-
>
|
|
272
|
-
<div className="flex flex-col items-center justify-center overflow-clip px-4 py-1 relative rounded-full shrink-0">
|
|
273
|
-
{item.icon}
|
|
274
|
-
</div>
|
|
275
|
-
{(item.badge || item.badgeCount) && (
|
|
276
|
-
<div
|
|
277
|
-
className={`
|
|
278
|
-
absolute top-0 right-0
|
|
279
|
-
${item.badgeCount
|
|
280
|
-
? 'w-5 h-5 text-xs font-bold flex items-center justify-center rounded-full'
|
|
281
|
-
: 'w-2 h-2 rounded-full'
|
|
282
|
-
}
|
|
283
|
-
${item.badgeColor === 'blue'
|
|
284
|
-
? 'bg-primary-custom-600 dark:bg-primary-custom-600 text-primary-inverse-content'
|
|
285
|
-
: 'bg-red-600 dark:bg-red-600 text-white'
|
|
286
|
-
}
|
|
287
|
-
`}
|
|
288
|
-
>
|
|
289
|
-
{item.badgeCount ? (item.badgeCount > 99 ? '99+' : item.badgeCount) : ''}
|
|
290
|
-
</div>
|
|
291
|
-
)}
|
|
292
|
-
</button>
|
|
293
|
-
))}
|
|
294
|
-
</>
|
|
295
|
-
) : (
|
|
296
|
-
// Items reales - expanded mode
|
|
297
|
-
<>
|
|
298
|
-
{items.map((item, idx) => (
|
|
299
|
-
<div key={item.id} className="w-full">
|
|
300
|
-
{/* TODO: Implementar items expandidos usando DropdownItemCollapsible */}
|
|
301
|
-
<DropdownItemCollapsible
|
|
302
|
-
label={item.label}
|
|
303
|
-
icon={item.icon}
|
|
304
|
-
showDivider={idx < items.length - 1}
|
|
305
|
-
showHeading={false}
|
|
306
|
-
disabled={item.disabled}
|
|
307
|
-
onClick={() => handleItemClick(idx, item)}
|
|
308
|
-
/>
|
|
309
|
-
</div>
|
|
310
|
-
))}
|
|
311
|
-
</>
|
|
312
|
-
)}
|
|
313
|
-
</div>
|
|
314
|
-
|
|
315
|
-
{/* Footer - Actions */}
|
|
316
|
-
<div className={`w-full flex flex-col gap-3 items-center relative shrink-0 ${!collapsed ? 'px-3' : ''}`}>
|
|
317
|
-
<Divider className="w-full" />
|
|
318
|
-
|
|
319
|
-
<div
|
|
320
|
-
className={`
|
|
321
|
-
flex flex-col gap-3 relative shrink-0
|
|
322
|
-
${collapsed ? 'items-start px-3' : 'w-full items-stretch'}
|
|
323
|
-
`}
|
|
324
|
-
>
|
|
325
|
-
{/* Botón Recientes */}
|
|
326
|
-
{showRecentButton && collapsed && (
|
|
327
|
-
<Button
|
|
328
|
-
type="outline"
|
|
329
|
-
size="base"
|
|
330
|
-
iconOnly
|
|
331
|
-
leftIcon={<ClockIcon className="size-4 text-primary-custom-600 dark:text-primary-custom-600" />}
|
|
332
|
-
ariaLabel="Recientes"
|
|
333
|
-
/>
|
|
334
|
-
)}
|
|
335
|
-
|
|
336
|
-
{showRecentButton && !collapsed && (
|
|
337
|
-
<Button
|
|
338
|
-
type="outline"
|
|
339
|
-
size="base"
|
|
340
|
-
leftIcon={<ClockIcon className="size-4 text-primary-custom-600 dark:text-primary-custom-600" />}
|
|
341
|
-
fullWidth
|
|
342
|
-
>
|
|
343
|
-
Recientes
|
|
344
|
-
</Button>
|
|
345
|
-
)}
|
|
346
|
-
|
|
347
|
-
{/* Botón Colapsar/Expandir */}
|
|
348
|
-
{collapsed ? (
|
|
349
|
-
<Button
|
|
350
|
-
type="plain"
|
|
351
|
-
size="base"
|
|
352
|
-
iconOnly
|
|
353
|
-
leftIcon={<ChevronRightIcon className="overflow-clip relative shrink-0 size-4 text-background-inverse-custom-primary dark:text-background-inverse-custom-primary" />}
|
|
354
|
-
onClick={handleCollapsedToggle}
|
|
355
|
-
ariaLabel="Expandir"
|
|
356
|
-
/>
|
|
357
|
-
) : (
|
|
358
|
-
<Button
|
|
359
|
-
type="outline"
|
|
360
|
-
size="base"
|
|
361
|
-
leftIcon={<ChevronLeftIcon className="overflow-clip relative shrink-0 size-4 text-content-custom-primary dark:text-content-custom-primary" />}
|
|
362
|
-
onClick={handleCollapsedToggle}
|
|
363
|
-
fullWidth
|
|
364
|
-
>
|
|
365
|
-
Colapsar
|
|
366
|
-
</Button>
|
|
367
|
-
)}
|
|
368
|
-
</div>
|
|
369
|
-
</div>
|
|
370
|
-
</div>
|
|
371
|
-
</div>
|
|
372
|
-
);
|
|
373
|
-
}
|
|
374
|
-
);
|
|
375
|
-
|
|
376
|
-
NavigationRailTypes.displayName = 'NavigationRailTypes';
|
|
377
|
-
|
|
378
|
-
export default NavigationRailTypes;
|
|
@@ -1,130 +0,0 @@
|
|
|
1
|
-
import type { ReactNode } from 'react';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Props del componente NavigationRailTypes
|
|
5
|
-
*
|
|
6
|
-
* @see https://www.figma.com/design/5XNqf2YTxvwemxwo1LMQ6j/Siesa-UI-Kit?node-id=6135-36219
|
|
7
|
-
*/
|
|
8
|
-
export interface NavigationRailTypesProps {
|
|
9
|
-
/**
|
|
10
|
-
* Determina si el rail está colapsado (iconos solo) o expandido (con labels)
|
|
11
|
-
* - `true`: Modo colapsado (80px width, solo iconos)
|
|
12
|
-
* - `false`: Modo expandido (215px width, con labels)
|
|
13
|
-
* @default true
|
|
14
|
-
*/
|
|
15
|
-
collapsed?: boolean;
|
|
16
|
-
|
|
17
|
-
/**
|
|
18
|
-
* Items de navegación a mostrar en la barra
|
|
19
|
-
* Se muestran en modo comprimido (iconos) o expandido (con descripción)
|
|
20
|
-
*/
|
|
21
|
-
items?: NavigationRailItem[];
|
|
22
|
-
|
|
23
|
-
/**
|
|
24
|
-
* Si mostrar el botón "Recientes" en el footer
|
|
25
|
-
* @default true
|
|
26
|
-
*/
|
|
27
|
-
showRecentButton?: boolean;
|
|
28
|
-
|
|
29
|
-
/**
|
|
30
|
-
* Callback cuando el estado collapsed cambia
|
|
31
|
-
* Útil para sincronizar con estado global
|
|
32
|
-
*/
|
|
33
|
-
onCollapsedChange?: (collapsed: boolean) => void;
|
|
34
|
-
|
|
35
|
-
/**
|
|
36
|
-
* Callback cuando se clickea un item
|
|
37
|
-
* @param index - índice del item clickeado
|
|
38
|
-
* @param item - datos del item
|
|
39
|
-
*/
|
|
40
|
-
onItemClick?: (index: number, item: NavigationRailItem) => void;
|
|
41
|
-
|
|
42
|
-
/**
|
|
43
|
-
* Classes CSS adicionales
|
|
44
|
-
*/
|
|
45
|
-
className?: string;
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
/**
|
|
49
|
-
* Props para cada item de navegación en el rail
|
|
50
|
-
*/
|
|
51
|
-
export interface NavigationRailItem {
|
|
52
|
-
/**
|
|
53
|
-
* Identificador único del item
|
|
54
|
-
*/
|
|
55
|
-
id: string;
|
|
56
|
-
|
|
57
|
-
/**
|
|
58
|
-
* Etiqueta del item (visible en modo expandido)
|
|
59
|
-
*/
|
|
60
|
-
label: string;
|
|
61
|
-
|
|
62
|
-
/**
|
|
63
|
-
* Icono a mostrar (16x16px recomendado)
|
|
64
|
-
*/
|
|
65
|
-
icon: ReactNode;
|
|
66
|
-
|
|
67
|
-
/**
|
|
68
|
-
* Si el item está activo/seleccionado
|
|
69
|
-
* @default false
|
|
70
|
-
*/
|
|
71
|
-
active?: boolean;
|
|
72
|
-
|
|
73
|
-
/**
|
|
74
|
-
* Si el item está deshabilitado
|
|
75
|
-
* @default false
|
|
76
|
-
*/
|
|
77
|
-
disabled?: boolean;
|
|
78
|
-
|
|
79
|
-
/**
|
|
80
|
-
* Callback cuando se hace click en el item
|
|
81
|
-
*/
|
|
82
|
-
onClick?: (e: React.MouseEvent<HTMLButtonElement>) => void;
|
|
83
|
-
|
|
84
|
-
/**
|
|
85
|
-
* URL para navigation (si se usa como link)
|
|
86
|
-
*/
|
|
87
|
-
href?: string;
|
|
88
|
-
|
|
89
|
-
/**
|
|
90
|
-
* Atributos ARIA para accesibilidad
|
|
91
|
-
*/
|
|
92
|
-
ariaLabel?: string;
|
|
93
|
-
|
|
94
|
-
/**
|
|
95
|
-
* Badge de notificación (dot rojo pequeño)
|
|
96
|
-
*/
|
|
97
|
-
badge?: boolean;
|
|
98
|
-
|
|
99
|
-
/**
|
|
100
|
-
* Contador de notificaciones (99+ para >99)
|
|
101
|
-
*/
|
|
102
|
-
badgeCount?: number;
|
|
103
|
-
|
|
104
|
-
/**
|
|
105
|
-
* Color del badge
|
|
106
|
-
* @default 'red'
|
|
107
|
-
*/
|
|
108
|
-
badgeColor?: 'red' | 'blue' | 'green' | 'yellow' | 'orange';
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
/**
|
|
112
|
-
* Props para el item colapsable (reutiliza DropdownItemCollapsible)
|
|
113
|
-
* Solo se usa en modo expandido
|
|
114
|
-
*/
|
|
115
|
-
export interface NavigationRailCollapsibleItem extends NavigationRailItem {
|
|
116
|
-
/**
|
|
117
|
-
* Items anidados (solo en modo expandido)
|
|
118
|
-
*/
|
|
119
|
-
children?: NavigationRailItem[];
|
|
120
|
-
|
|
121
|
-
/**
|
|
122
|
-
* Si el item está expandido inicialmente
|
|
123
|
-
*/
|
|
124
|
-
defaultOpen?: boolean;
|
|
125
|
-
|
|
126
|
-
/**
|
|
127
|
-
* Si el item es colapsable
|
|
128
|
-
*/
|
|
129
|
-
isCollapsible?: boolean;
|
|
130
|
-
}
|