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,667 +0,0 @@
|
|
|
1
|
-
import type { Meta, StoryObj } from '@storybook/react';
|
|
2
|
-
import React from 'react';
|
|
3
|
-
import { NavigationRailItem } from './NavigationRailItem';
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* NavigationRailItem - Componente de item para NavigationRail
|
|
7
|
-
*
|
|
8
|
-
* Componente independiente para items individuales de la barra de navegación vertical.
|
|
9
|
-
* Implementado pixel-perfect según Figma (node 4294-22931) con soporte completo
|
|
10
|
-
* para todos los estados, badges y dark mode.
|
|
11
|
-
*
|
|
12
|
-
* **Características principales:**
|
|
13
|
-
* - Ancho fijo de 56px según especificaciones de Figma
|
|
14
|
-
* - Estados completos: Enabled, Hover, Selected, Focus, Disabled
|
|
15
|
-
* - Badges de notificación con contador (1-99+)
|
|
16
|
-
* - Tipografía Label XXSmall (10px Bold) del sistema de diseño
|
|
17
|
-
* - Dark mode completo con estrategia 'class'
|
|
18
|
-
* - Focus rings adaptativos con sombras para accesibilidad
|
|
19
|
-
* - Soporte para iconos 16x16px de cualquier librería
|
|
20
|
-
*
|
|
21
|
-
* **Especificaciones de Figma:**
|
|
22
|
-
* - Ancho: 56px (w-14)
|
|
23
|
-
* - Icon container: 32px altura, 16px de padding horizontal, rounded-full
|
|
24
|
-
* - Label: 10px Bold, leading 12px
|
|
25
|
-
* - Gap: 4px entre icon y label
|
|
26
|
-
* - Badge: 13x13px, posición absolute (-top-0.5, left-[34px])
|
|
27
|
-
* - Estados visuales definidos por Figma con colores y sombras específicas
|
|
28
|
-
*
|
|
29
|
-
* **Paleta de colores (según docs/colors.md):**
|
|
30
|
-
* - Primary Custom 600 (#0e79fd) - Color primario
|
|
31
|
-
* - Primary Custom 100 (#dbeefe) - Hover/Selected background
|
|
32
|
-
* - Content Primary - Color de texto por defecto
|
|
33
|
-
* - Content Tertiary - Color de texto deshabilitado
|
|
34
|
-
* - Red 700 (#b91c1c) - Color del badge
|
|
35
|
-
*
|
|
36
|
-
* **Mejores prácticas:**
|
|
37
|
-
* - JSDoc completo con @see references
|
|
38
|
-
* - Tokens del sistema (NO colores hardcodeados)
|
|
39
|
-
* - Dark mode en todos los estados
|
|
40
|
-
* - Focus rings adaptativos
|
|
41
|
-
* - Props con defaults y tipos estrictos
|
|
42
|
-
* - Accesibilidad ARIA completa
|
|
43
|
-
*
|
|
44
|
-
* @see docs/colors.md - Sistema de colores
|
|
45
|
-
* @see docs/typography.md - Sistema tipográfico
|
|
46
|
-
* @see docs/spacing.md - Sistema de espaciado
|
|
47
|
-
* @see docs/shadows.md - Sistema de sombras
|
|
48
|
-
* @see https://www.figma.com/design/5XNqf2YTxvwemxwo1LMQ6j/Siesa-UI-Kit?node-id=4294-22931
|
|
49
|
-
*/
|
|
50
|
-
const meta = {
|
|
51
|
-
title: 'Siesa UI Kit/Navigation/NavigationRailItem',
|
|
52
|
-
component: NavigationRailItem,
|
|
53
|
-
parameters: {
|
|
54
|
-
layout: 'centered',
|
|
55
|
-
docs: {
|
|
56
|
-
description: {
|
|
57
|
-
component: 'Item individual de NavigationRail con soporte completo para estados, badges y dark mode. Diseñado para ser usado dentro de un contenedor NavigationRail o de forma independiente.',
|
|
58
|
-
},
|
|
59
|
-
},
|
|
60
|
-
backgrounds: {
|
|
61
|
-
default: 'light',
|
|
62
|
-
values: [
|
|
63
|
-
{ name: 'light', value: '#ffffff' },
|
|
64
|
-
{ name: 'gray', value: '#f3f4f6' },
|
|
65
|
-
{ name: 'dark', value: '#18181b' },
|
|
66
|
-
],
|
|
67
|
-
},
|
|
68
|
-
},
|
|
69
|
-
tags: ['autodocs'],
|
|
70
|
-
argTypes: {
|
|
71
|
-
icon: {
|
|
72
|
-
description: 'Icono a mostrar (16x16px recomendado)',
|
|
73
|
-
table: {
|
|
74
|
-
type: { summary: 'ReactNode' },
|
|
75
|
-
category: 'Contenido',
|
|
76
|
-
},
|
|
77
|
-
control: false,
|
|
78
|
-
},
|
|
79
|
-
label: {
|
|
80
|
-
control: 'text',
|
|
81
|
-
description: 'Texto del label que aparece debajo del icono',
|
|
82
|
-
table: {
|
|
83
|
-
type: { summary: 'string' },
|
|
84
|
-
category: 'Contenido',
|
|
85
|
-
},
|
|
86
|
-
},
|
|
87
|
-
selected: {
|
|
88
|
-
control: 'boolean',
|
|
89
|
-
description: 'Si el item está seleccionado actualmente',
|
|
90
|
-
table: {
|
|
91
|
-
type: { summary: 'boolean' },
|
|
92
|
-
defaultValue: { summary: 'false' },
|
|
93
|
-
category: 'Estado',
|
|
94
|
-
},
|
|
95
|
-
},
|
|
96
|
-
disabled: {
|
|
97
|
-
control: 'boolean',
|
|
98
|
-
description: 'Si el item está deshabilitado (no interactivo, opacity 55%)',
|
|
99
|
-
table: {
|
|
100
|
-
type: { summary: 'boolean' },
|
|
101
|
-
defaultValue: { summary: 'false' },
|
|
102
|
-
category: 'Estado',
|
|
103
|
-
},
|
|
104
|
-
},
|
|
105
|
-
badge: {
|
|
106
|
-
control: 'boolean',
|
|
107
|
-
description: 'Mostrar badge de notificación (dot rojo simple)',
|
|
108
|
-
table: {
|
|
109
|
-
type: { summary: 'boolean' },
|
|
110
|
-
defaultValue: { summary: 'false' },
|
|
111
|
-
category: 'Notificaciones',
|
|
112
|
-
},
|
|
113
|
-
},
|
|
114
|
-
badgeCount: {
|
|
115
|
-
control: { type: 'number', min: 0, max: 999 },
|
|
116
|
-
description: 'Número a mostrar en el badge (reemplaza el dot, 99+ para >99)',
|
|
117
|
-
table: {
|
|
118
|
-
type: { summary: 'number' },
|
|
119
|
-
category: 'Notificaciones',
|
|
120
|
-
},
|
|
121
|
-
},
|
|
122
|
-
onClick: {
|
|
123
|
-
description: 'Callback cuando se hace click en el item',
|
|
124
|
-
table: {
|
|
125
|
-
type: { summary: '() => void' },
|
|
126
|
-
category: 'Eventos',
|
|
127
|
-
},
|
|
128
|
-
control: false,
|
|
129
|
-
},
|
|
130
|
-
ariaLabel: {
|
|
131
|
-
control: 'text',
|
|
132
|
-
description: 'Label para accesibilidad (ARIA). Por defecto usa el label prop',
|
|
133
|
-
table: {
|
|
134
|
-
type: { summary: 'string' },
|
|
135
|
-
category: 'Accesibilidad',
|
|
136
|
-
},
|
|
137
|
-
},
|
|
138
|
-
id: {
|
|
139
|
-
control: 'text',
|
|
140
|
-
description: 'ID único del item para identificarlo en navegación',
|
|
141
|
-
table: {
|
|
142
|
-
type: { summary: 'string' },
|
|
143
|
-
category: 'Identidad',
|
|
144
|
-
},
|
|
145
|
-
},
|
|
146
|
-
showLabelText: {
|
|
147
|
-
control: 'boolean',
|
|
148
|
-
description: 'Si el label debe ser visible (para variar entre icon-only)',
|
|
149
|
-
table: {
|
|
150
|
-
type: { summary: 'boolean' },
|
|
151
|
-
defaultValue: { summary: 'true' },
|
|
152
|
-
category: 'Visibilidad',
|
|
153
|
-
},
|
|
154
|
-
},
|
|
155
|
-
showIcon: {
|
|
156
|
-
control: 'boolean',
|
|
157
|
-
description: 'Si el icono debe ser visible',
|
|
158
|
-
table: {
|
|
159
|
-
type: { summary: 'boolean' },
|
|
160
|
-
defaultValue: { summary: 'true' },
|
|
161
|
-
category: 'Visibilidad',
|
|
162
|
-
},
|
|
163
|
-
},
|
|
164
|
-
},
|
|
165
|
-
} satisfies Meta<typeof NavigationRailItem>;
|
|
166
|
-
|
|
167
|
-
export default meta;
|
|
168
|
-
type Story = StoryObj<typeof meta>;
|
|
169
|
-
|
|
170
|
-
// ===== ICONO DE EJEMPLO =====
|
|
171
|
-
const HomeIcon = () => (
|
|
172
|
-
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2">
|
|
173
|
-
<path d="M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/>
|
|
174
|
-
<polyline points="9 22 9 12 15 12 15 22"/>
|
|
175
|
-
</svg>
|
|
176
|
-
);
|
|
177
|
-
|
|
178
|
-
const BellIcon = () => (
|
|
179
|
-
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2">
|
|
180
|
-
<path d="M18 8A6 6 0 0 0 6 8c0 7-3 9-3 9h18s-3-2-3-9"/>
|
|
181
|
-
<path d="M13.73 21a2 2 0 0 1-3.46 0"/>
|
|
182
|
-
</svg>
|
|
183
|
-
);
|
|
184
|
-
|
|
185
|
-
const SearchIcon = () => (
|
|
186
|
-
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2">
|
|
187
|
-
<circle cx="11" cy="11" r="8"/>
|
|
188
|
-
<path d="m21 21-4.35-4.35"/>
|
|
189
|
-
</svg>
|
|
190
|
-
);
|
|
191
|
-
|
|
192
|
-
const SettingsIcon = () => (
|
|
193
|
-
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2">
|
|
194
|
-
<circle cx="12" cy="12" r="3"/>
|
|
195
|
-
<path d="M12 1v6m0 6v6M4.22 4.22l4.24 4.24m5.08 5.08l4.24 4.24M1 12h6m6 0h6M4.22 19.78l4.24-4.24m5.08-5.08l4.24-4.24"/>
|
|
196
|
-
</svg>
|
|
197
|
-
);
|
|
198
|
-
|
|
199
|
-
const StarIcon = () => (
|
|
200
|
-
<svg width="16" height="16" viewBox="0 0 24 24" fill="currentColor" stroke="currentColor" strokeWidth="2">
|
|
201
|
-
<polygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"/>
|
|
202
|
-
</svg>
|
|
203
|
-
);
|
|
204
|
-
|
|
205
|
-
// ===== STORIES =====
|
|
206
|
-
|
|
207
|
-
/**
|
|
208
|
-
* Estado por defecto: item habilitado, no seleccionado, sin badge
|
|
209
|
-
*/
|
|
210
|
-
export const Default: Story = {
|
|
211
|
-
args: {
|
|
212
|
-
id: 'home',
|
|
213
|
-
icon: <HomeIcon />,
|
|
214
|
-
label: 'Inicio',
|
|
215
|
-
selected: false,
|
|
216
|
-
disabled: false,
|
|
217
|
-
badge: false,
|
|
218
|
-
},
|
|
219
|
-
};
|
|
220
|
-
|
|
221
|
-
/**
|
|
222
|
-
* Estado seleccionado: background celeste claro, icono azul
|
|
223
|
-
*/
|
|
224
|
-
export const Selected: Story = {
|
|
225
|
-
args: {
|
|
226
|
-
...Default.args,
|
|
227
|
-
selected: true,
|
|
228
|
-
},
|
|
229
|
-
};
|
|
230
|
-
|
|
231
|
-
/**
|
|
232
|
-
* Con badge de notificación (dot rojo simple)
|
|
233
|
-
*/
|
|
234
|
-
export const WithBadge: Story = {
|
|
235
|
-
args: {
|
|
236
|
-
...Default.args,
|
|
237
|
-
id: 'notifications',
|
|
238
|
-
icon: <BellIcon />,
|
|
239
|
-
label: 'Notificaciones',
|
|
240
|
-
badge: true,
|
|
241
|
-
},
|
|
242
|
-
};
|
|
243
|
-
|
|
244
|
-
/**
|
|
245
|
-
* Con badge contador numérico
|
|
246
|
-
*/
|
|
247
|
-
export const WithBadgeCount: Story = {
|
|
248
|
-
args: {
|
|
249
|
-
...Default.args,
|
|
250
|
-
id: 'notifications',
|
|
251
|
-
icon: <BellIcon />,
|
|
252
|
-
label: 'Notificaciones',
|
|
253
|
-
badgeCount: 5,
|
|
254
|
-
},
|
|
255
|
-
};
|
|
256
|
-
|
|
257
|
-
/**
|
|
258
|
-
* Con badge contador mostrando 99+ (cuando count > 99)
|
|
259
|
-
*/
|
|
260
|
-
export const WithBadgeCountMax: Story = {
|
|
261
|
-
args: {
|
|
262
|
-
...Default.args,
|
|
263
|
-
id: 'notifications',
|
|
264
|
-
icon: <BellIcon />,
|
|
265
|
-
label: 'Notificaciones',
|
|
266
|
-
badgeCount: 150,
|
|
267
|
-
},
|
|
268
|
-
};
|
|
269
|
-
|
|
270
|
-
/**
|
|
271
|
-
* Item deshabilitado: opacity 55%, no interactivo
|
|
272
|
-
*/
|
|
273
|
-
export const Disabled: Story = {
|
|
274
|
-
args: {
|
|
275
|
-
...Default.args,
|
|
276
|
-
id: 'premium',
|
|
277
|
-
icon: <StarIcon />,
|
|
278
|
-
label: 'Premium',
|
|
279
|
-
disabled: true,
|
|
280
|
-
},
|
|
281
|
-
};
|
|
282
|
-
|
|
283
|
-
/**
|
|
284
|
-
* Item deshabilitado con badge: el badge también se ve afectado por la opacidad
|
|
285
|
-
*/
|
|
286
|
-
export const DisabledWithBadge: Story = {
|
|
287
|
-
args: {
|
|
288
|
-
...Default.args,
|
|
289
|
-
id: 'premium',
|
|
290
|
-
icon: <StarIcon />,
|
|
291
|
-
label: 'Premium',
|
|
292
|
-
disabled: true,
|
|
293
|
-
badgeCount: 3,
|
|
294
|
-
},
|
|
295
|
-
};
|
|
296
|
-
|
|
297
|
-
/**
|
|
298
|
-
* Solo icono (sin label)
|
|
299
|
-
*/
|
|
300
|
-
export const IconOnly: Story = {
|
|
301
|
-
args: {
|
|
302
|
-
...Default.args,
|
|
303
|
-
showLabelText: false,
|
|
304
|
-
},
|
|
305
|
-
};
|
|
306
|
-
|
|
307
|
-
/**
|
|
308
|
-
* Solo label (sin icono)
|
|
309
|
-
*/
|
|
310
|
-
export const LabelOnly: Story = {
|
|
311
|
-
args: {
|
|
312
|
-
...Default.args,
|
|
313
|
-
showIcon: false,
|
|
314
|
-
},
|
|
315
|
-
};
|
|
316
|
-
|
|
317
|
-
/**
|
|
318
|
-
* Galería de todos los estados básicos
|
|
319
|
-
*/
|
|
320
|
-
export const AllStates: Story = {
|
|
321
|
-
args: { ...Default.args },
|
|
322
|
-
render: () => (
|
|
323
|
-
<div className="flex flex-col gap-12 p-8">
|
|
324
|
-
{/* Fila 1: Estados básicos */}
|
|
325
|
-
<div className="flex gap-8 items-center justify-center p-4 bg-white dark:bg-zinc-900 rounded-lg">
|
|
326
|
-
<div className="text-center">
|
|
327
|
-
<p className="text-xs font-bold mb-4 text-content-tertiary">Enabled</p>
|
|
328
|
-
<NavigationRailItem
|
|
329
|
-
id="home"
|
|
330
|
-
icon={<HomeIcon />}
|
|
331
|
-
label="Inicio"
|
|
332
|
-
/>
|
|
333
|
-
</div>
|
|
334
|
-
<div className="text-center">
|
|
335
|
-
<p className="text-xs font-bold mb-4 text-content-tertiary">Hover</p>
|
|
336
|
-
<NavigationRailItem
|
|
337
|
-
id="search"
|
|
338
|
-
icon={<SearchIcon />}
|
|
339
|
-
label="Buscar"
|
|
340
|
-
className="hover:shadow-md"
|
|
341
|
-
/>
|
|
342
|
-
</div>
|
|
343
|
-
<div className="text-center">
|
|
344
|
-
<p className="text-xs font-bold mb-4 text-content-tertiary">Selected</p>
|
|
345
|
-
<NavigationRailItem
|
|
346
|
-
id="home"
|
|
347
|
-
icon={<HomeIcon />}
|
|
348
|
-
label="Inicio"
|
|
349
|
-
selected={true}
|
|
350
|
-
/>
|
|
351
|
-
</div>
|
|
352
|
-
<div className="text-center">
|
|
353
|
-
<p className="text-xs font-bold mb-4 text-content-tertiary">Disabled</p>
|
|
354
|
-
<NavigationRailItem
|
|
355
|
-
id="premium"
|
|
356
|
-
icon={<StarIcon />}
|
|
357
|
-
label="Premium"
|
|
358
|
-
disabled={true}
|
|
359
|
-
/>
|
|
360
|
-
</div>
|
|
361
|
-
</div>
|
|
362
|
-
|
|
363
|
-
{/* Fila 2: Con badges */}
|
|
364
|
-
<div className="flex gap-8 items-center justify-center p-4 bg-white dark:bg-zinc-900 rounded-lg">
|
|
365
|
-
<div className="text-center">
|
|
366
|
-
<p className="text-xs font-bold mb-4 text-content-tertiary">Badge Dot</p>
|
|
367
|
-
<NavigationRailItem
|
|
368
|
-
id="notifications"
|
|
369
|
-
icon={<BellIcon />}
|
|
370
|
-
label="Notificaciones"
|
|
371
|
-
badge={true}
|
|
372
|
-
/>
|
|
373
|
-
</div>
|
|
374
|
-
<div className="text-center">
|
|
375
|
-
<p className="text-xs font-bold mb-4 text-content-tertiary">Badge Count: 5</p>
|
|
376
|
-
<NavigationRailItem
|
|
377
|
-
id="notifications"
|
|
378
|
-
icon={<BellIcon />}
|
|
379
|
-
label="Notificaciones"
|
|
380
|
-
badgeCount={5}
|
|
381
|
-
/>
|
|
382
|
-
</div>
|
|
383
|
-
<div className="text-center">
|
|
384
|
-
<p className="text-xs font-bold mb-4 text-content-tertiary">Badge Count: 99+</p>
|
|
385
|
-
<NavigationRailItem
|
|
386
|
-
id="notifications"
|
|
387
|
-
icon={<BellIcon />}
|
|
388
|
-
label="Notificaciones"
|
|
389
|
-
badgeCount={150}
|
|
390
|
-
/>
|
|
391
|
-
</div>
|
|
392
|
-
</div>
|
|
393
|
-
|
|
394
|
-
{/* Fila 3: Variaciones de visibilidad */}
|
|
395
|
-
<div className="flex gap-8 items-center justify-center p-4 bg-white dark:bg-zinc-900 rounded-lg">
|
|
396
|
-
<div className="text-center">
|
|
397
|
-
<p className="text-xs font-bold mb-4 text-content-tertiary">Con Icon + Label</p>
|
|
398
|
-
<NavigationRailItem
|
|
399
|
-
id="home"
|
|
400
|
-
icon={<HomeIcon />}
|
|
401
|
-
label="Inicio"
|
|
402
|
-
showIcon={true}
|
|
403
|
-
showLabelText={true}
|
|
404
|
-
/>
|
|
405
|
-
</div>
|
|
406
|
-
<div className="text-center">
|
|
407
|
-
<p className="text-xs font-bold mb-4 text-content-tertiary">Solo Icon</p>
|
|
408
|
-
<NavigationRailItem
|
|
409
|
-
id="home"
|
|
410
|
-
icon={<HomeIcon />}
|
|
411
|
-
label="Inicio"
|
|
412
|
-
showIcon={true}
|
|
413
|
-
showLabelText={false}
|
|
414
|
-
/>
|
|
415
|
-
</div>
|
|
416
|
-
<div className="text-center">
|
|
417
|
-
<p className="text-xs font-bold mb-4 text-content-tertiary">Solo Label</p>
|
|
418
|
-
<NavigationRailItem
|
|
419
|
-
id="home"
|
|
420
|
-
icon={<HomeIcon />}
|
|
421
|
-
label="Inicio"
|
|
422
|
-
showIcon={false}
|
|
423
|
-
showLabelText={true}
|
|
424
|
-
/>
|
|
425
|
-
</div>
|
|
426
|
-
</div>
|
|
427
|
-
</div>
|
|
428
|
-
),
|
|
429
|
-
};
|
|
430
|
-
|
|
431
|
-
/**
|
|
432
|
-
* NavigationRail de ejemplo con múltiples items
|
|
433
|
-
*/
|
|
434
|
-
export const NavigationRailExample: Story = {
|
|
435
|
-
args: { ...Default.args },
|
|
436
|
-
render: () => (
|
|
437
|
-
<div className="flex items-start h-screen bg-white dark:bg-zinc-900 border-r border-border-primary dark:border-dark-border-primary p-2">
|
|
438
|
-
<div className="flex flex-col gap-3 items-center">
|
|
439
|
-
<NavigationRailItem
|
|
440
|
-
id="home"
|
|
441
|
-
icon={<HomeIcon />}
|
|
442
|
-
label="Inicio"
|
|
443
|
-
selected={true}
|
|
444
|
-
/>
|
|
445
|
-
<NavigationRailItem
|
|
446
|
-
id="search"
|
|
447
|
-
icon={<SearchIcon />}
|
|
448
|
-
label="Buscar"
|
|
449
|
-
/>
|
|
450
|
-
<NavigationRailItem
|
|
451
|
-
id="notifications"
|
|
452
|
-
icon={<BellIcon />}
|
|
453
|
-
label="Notificaciones"
|
|
454
|
-
badgeCount={3}
|
|
455
|
-
/>
|
|
456
|
-
<NavigationRailItem
|
|
457
|
-
id="settings"
|
|
458
|
-
icon={<SettingsIcon />}
|
|
459
|
-
label="Configuración"
|
|
460
|
-
/>
|
|
461
|
-
</div>
|
|
462
|
-
</div>
|
|
463
|
-
),
|
|
464
|
-
parameters: {
|
|
465
|
-
layout: 'fullscreen',
|
|
466
|
-
},
|
|
467
|
-
};
|
|
468
|
-
|
|
469
|
-
/**
|
|
470
|
-
* Dark Mode: todos los estados en modo oscuro
|
|
471
|
-
*/
|
|
472
|
-
export const DarkMode: Story = {
|
|
473
|
-
args: { ...Default.args },
|
|
474
|
-
render: () => (
|
|
475
|
-
<div className="dark flex flex-col gap-12 p-8 bg-zinc-900 rounded-lg">
|
|
476
|
-
{/* Fila 1: Estados básicos */}
|
|
477
|
-
<div className="flex gap-8 items-center justify-center p-4 bg-zinc-800 rounded-lg">
|
|
478
|
-
<div className="text-center">
|
|
479
|
-
<p className="text-xs font-bold mb-4 text-gray-400">Enabled</p>
|
|
480
|
-
<NavigationRailItem
|
|
481
|
-
id="home"
|
|
482
|
-
icon={<HomeIcon />}
|
|
483
|
-
label="Inicio"
|
|
484
|
-
/>
|
|
485
|
-
</div>
|
|
486
|
-
<div className="text-center">
|
|
487
|
-
<p className="text-xs font-bold mb-4 text-gray-400">Hover</p>
|
|
488
|
-
<NavigationRailItem
|
|
489
|
-
id="search"
|
|
490
|
-
icon={<SearchIcon />}
|
|
491
|
-
label="Buscar"
|
|
492
|
-
/>
|
|
493
|
-
</div>
|
|
494
|
-
<div className="text-center">
|
|
495
|
-
<p className="text-xs font-bold mb-4 text-gray-400">Selected</p>
|
|
496
|
-
<NavigationRailItem
|
|
497
|
-
id="home"
|
|
498
|
-
icon={<HomeIcon />}
|
|
499
|
-
label="Inicio"
|
|
500
|
-
selected={true}
|
|
501
|
-
/>
|
|
502
|
-
</div>
|
|
503
|
-
<div className="text-center">
|
|
504
|
-
<p className="text-xs font-bold mb-4 text-gray-400">Disabled</p>
|
|
505
|
-
<NavigationRailItem
|
|
506
|
-
id="premium"
|
|
507
|
-
icon={<StarIcon />}
|
|
508
|
-
label="Premium"
|
|
509
|
-
disabled={true}
|
|
510
|
-
/>
|
|
511
|
-
</div>
|
|
512
|
-
</div>
|
|
513
|
-
|
|
514
|
-
{/* Fila 2: Con badges */}
|
|
515
|
-
<div className="flex gap-8 items-center justify-center p-4 bg-zinc-800 rounded-lg">
|
|
516
|
-
<div className="text-center">
|
|
517
|
-
<p className="text-xs font-bold mb-4 text-gray-400">Badge Dot</p>
|
|
518
|
-
<NavigationRailItem
|
|
519
|
-
id="notifications"
|
|
520
|
-
icon={<BellIcon />}
|
|
521
|
-
label="Notificaciones"
|
|
522
|
-
badge={true}
|
|
523
|
-
/>
|
|
524
|
-
</div>
|
|
525
|
-
<div className="text-center">
|
|
526
|
-
<p className="text-xs font-bold mb-4 text-gray-400">Badge Count: 5</p>
|
|
527
|
-
<NavigationRailItem
|
|
528
|
-
id="notifications"
|
|
529
|
-
icon={<BellIcon />}
|
|
530
|
-
label="Notificaciones"
|
|
531
|
-
badgeCount={5}
|
|
532
|
-
/>
|
|
533
|
-
</div>
|
|
534
|
-
</div>
|
|
535
|
-
</div>
|
|
536
|
-
),
|
|
537
|
-
parameters: {
|
|
538
|
-
backgrounds: {
|
|
539
|
-
default: 'dark',
|
|
540
|
-
},
|
|
541
|
-
},
|
|
542
|
-
};
|
|
543
|
-
|
|
544
|
-
/**
|
|
545
|
-
* Interacción: demostrando click handlers y state management
|
|
546
|
-
*/
|
|
547
|
-
export const Interactive: Story = {
|
|
548
|
-
args: { ...Default.args },
|
|
549
|
-
render: function Render() {
|
|
550
|
-
const [selectedId, setSelectedId] = React.useState('home');
|
|
551
|
-
const items = [
|
|
552
|
-
{ id: 'home', icon: <HomeIcon />, label: 'Inicio' },
|
|
553
|
-
{ id: 'search', icon: <SearchIcon />, label: 'Buscar' },
|
|
554
|
-
{ id: 'notifications', icon: <BellIcon />, label: 'Notificaciones', badgeCount: 3 },
|
|
555
|
-
{ id: 'settings', icon: <SettingsIcon />, label: 'Configuración' },
|
|
556
|
-
];
|
|
557
|
-
|
|
558
|
-
return (
|
|
559
|
-
<div className="flex gap-8">
|
|
560
|
-
{/* Navigation Rail */}
|
|
561
|
-
<nav className="flex flex-col gap-3 items-center p-2 bg-white dark:bg-zinc-900 border-r border-border-primary dark:border-dark-border-primary rounded-lg">
|
|
562
|
-
{items.map((item) => (
|
|
563
|
-
<NavigationRailItem
|
|
564
|
-
key={item.id}
|
|
565
|
-
id={item.id}
|
|
566
|
-
icon={item.icon}
|
|
567
|
-
label={item.label}
|
|
568
|
-
badgeCount={item.badgeCount}
|
|
569
|
-
selected={selectedId === item.id}
|
|
570
|
-
onClick={() => setSelectedId(item.id)}
|
|
571
|
-
/>
|
|
572
|
-
))}
|
|
573
|
-
</nav>
|
|
574
|
-
|
|
575
|
-
{/* Content */}
|
|
576
|
-
<div className="flex-1 p-6 bg-gray-50 dark:bg-zinc-800 rounded-lg">
|
|
577
|
-
<h2 className="text-lg font-bold mb-4 dark:text-white">
|
|
578
|
-
{items.find((item) => item.id === selectedId)?.label}
|
|
579
|
-
</h2>
|
|
580
|
-
<p className="text-content-secondary dark:text-dark-content-secondary">
|
|
581
|
-
Seleccionado: <code className="bg-gray-200 dark:bg-zinc-700 px-2 py-1 rounded text-sm">{selectedId}</code>
|
|
582
|
-
</p>
|
|
583
|
-
</div>
|
|
584
|
-
</div>
|
|
585
|
-
);
|
|
586
|
-
},
|
|
587
|
-
};
|
|
588
|
-
|
|
589
|
-
/**
|
|
590
|
-
* Variaciones de labels largos
|
|
591
|
-
*/
|
|
592
|
-
export const LongLabels: Story = {
|
|
593
|
-
args: { ...Default.args },
|
|
594
|
-
render: () => (
|
|
595
|
-
<div className="flex gap-8 items-center justify-center p-4 bg-white dark:bg-zinc-900 rounded-lg">
|
|
596
|
-
<div className="text-center">
|
|
597
|
-
<p className="text-xs font-bold mb-4 text-content-tertiary">Label corto</p>
|
|
598
|
-
<NavigationRailItem
|
|
599
|
-
id="home"
|
|
600
|
-
icon={<HomeIcon />}
|
|
601
|
-
label="Inicio"
|
|
602
|
-
/>
|
|
603
|
-
</div>
|
|
604
|
-
<div className="text-center">
|
|
605
|
-
<p className="text-xs font-bold mb-4 text-content-tertiary">Label mediano</p>
|
|
606
|
-
<NavigationRailItem
|
|
607
|
-
id="search"
|
|
608
|
-
icon={<SearchIcon />}
|
|
609
|
-
label="Búsqueda"
|
|
610
|
-
/>
|
|
611
|
-
</div>
|
|
612
|
-
<div className="text-center">
|
|
613
|
-
<p className="text-xs font-bold mb-4 text-content-tertiary">Label largo con wrap</p>
|
|
614
|
-
<NavigationRailItem
|
|
615
|
-
id="notifications"
|
|
616
|
-
icon={<BellIcon />}
|
|
617
|
-
label="Notificaciones"
|
|
618
|
-
/>
|
|
619
|
-
</div>
|
|
620
|
-
</div>
|
|
621
|
-
),
|
|
622
|
-
};
|
|
623
|
-
|
|
624
|
-
/**
|
|
625
|
-
* Accesibilidad: demostrando ARIA labels y keyboard navigation
|
|
626
|
-
*/
|
|
627
|
-
export const Accessibility: Story = {
|
|
628
|
-
args: { ...Default.args },
|
|
629
|
-
render: () => (
|
|
630
|
-
<div className="flex flex-col gap-6 p-6 bg-white dark:bg-zinc-900 rounded-lg">
|
|
631
|
-
<div>
|
|
632
|
-
<h3 className="text-sm font-bold mb-4 dark:text-white">Con aria-label personalizado:</h3>
|
|
633
|
-
<div className="flex gap-4">
|
|
634
|
-
<NavigationRailItem
|
|
635
|
-
id="home"
|
|
636
|
-
icon={<HomeIcon />}
|
|
637
|
-
label="Home"
|
|
638
|
-
ariaLabel="Ir a la página de inicio del sitio"
|
|
639
|
-
/>
|
|
640
|
-
<NavigationRailItem
|
|
641
|
-
id="search"
|
|
642
|
-
icon={<SearchIcon />}
|
|
643
|
-
label="Search"
|
|
644
|
-
ariaLabel="Abrir el formulario de búsqueda"
|
|
645
|
-
/>
|
|
646
|
-
</div>
|
|
647
|
-
</div>
|
|
648
|
-
|
|
649
|
-
<div>
|
|
650
|
-
<h3 className="text-sm font-bold mb-4 dark:text-white">Con estado disabled:</h3>
|
|
651
|
-
<div className="flex gap-4">
|
|
652
|
-
<NavigationRailItem
|
|
653
|
-
id="premium"
|
|
654
|
-
icon={<StarIcon />}
|
|
655
|
-
label="Premium"
|
|
656
|
-
disabled={true}
|
|
657
|
-
ariaLabel="Función Premium deshabilitada: requiere actualizar a Premium"
|
|
658
|
-
/>
|
|
659
|
-
</div>
|
|
660
|
-
</div>
|
|
661
|
-
|
|
662
|
-
<p className="text-xs text-content-secondary dark:text-dark-content-secondary">
|
|
663
|
-
Prueba navegar con Tab. El componente soporta keyboard focus y tiene aria-label completo para screen readers.
|
|
664
|
-
</p>
|
|
665
|
-
</div>
|
|
666
|
-
),
|
|
667
|
-
};
|