@klu_dev/ui-klu-green 1.1.0 → 1.1.1

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.
Files changed (3) hide show
  1. package/README.md +127 -1
  2. package/dist/index.css +185 -0
  3. package/package.json +6 -10
package/README.md CHANGED
@@ -14,6 +14,8 @@ npm install @klu_dev/ui-klu-green
14
14
  - Input
15
15
  - Button
16
16
  - BackButton
17
+ - Select
18
+ - Typography
17
19
 
18
20
  ## Antes de comenzar a agregar componentes
19
21
 
@@ -147,4 +149,128 @@ export default function Navigation() {
147
149
  </div>
148
150
  )
149
151
  }
150
- ```
152
+ ```
153
+
154
+ ## Uso Typography
155
+ Componente versátil para el manejo de textos, títulos y etiquetas con soporte para puntos decorativos (showDot).
156
+
157
+ ```tsx
158
+ import { Typography } from "@klu_dev/ui-klu-green"
159
+
160
+ export default function TypographyExamples() {
161
+ return (
162
+ <div className="uiklu-flex uiklu-flex-col uiklu-gap-6 uiklu-p-8 uiklu-bg-black">
163
+ {/* Título principal con punto decorativo */}
164
+ <Typography size="xxxl" color="white" align="center" showDot>
165
+ BIENVENIDO A KLU
166
+ </Typography>
167
+
168
+ {/* Subtítulo alineado a la izquierda */}
169
+ <Typography size="xxl" color="primary" align="left">
170
+ Tu banca digital
171
+ </Typography>
172
+
173
+ {/* Cuerpo de texto con color base */}
174
+ <Typography size="md" color="white" align="left">
175
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit.
176
+ Sed do eiusmod tempor incididunt ut labore.
177
+ </Typography>
178
+
179
+ {/* Nota pequeña alineada a la derecha */}
180
+ <Typography size="xs" color="white" align="right">
181
+ Versión 2.0.0
182
+ </Typography>
183
+ </div>
184
+ )
185
+ }
186
+ ```
187
+ - **Props de Typography:**
188
+
189
+ | Prop | Tipo | Descripción |
190
+ | :--- | :--- | :--- |
191
+ | `size` | `'xs' \| 'sm' \| 'md' \| 'lg' \| 'xl' \| 'xxl' \| 'xxxl'` | Escala de tamaño de fuente. |
192
+ | `color` | `'primary' \| 'white' \| 'black'` | Paleta de colores predefinida. |
193
+ | `align` | `'left' \| 'center' \| 'right'` | Alineación horizontal del texto. |
194
+ | `showDot` | `boolean` | Si es `true`, agrega un punto decorativo al final. |
195
+
196
+
197
+
198
+ ## Uso Select
199
+ Componente de selección desplegable basado en Radix UI, con soporte para tamaños fijos, estado de error y scroll automático.
200
+ - **Ejemplo básico:**
201
+ ```tsx
202
+ import {
203
+ Select,
204
+ SelectTrigger,
205
+ SelectValue,
206
+ SelectContent,
207
+ SelectItem
208
+ } from "@klu_dev/ui-klu-green"
209
+
210
+ export default function BasicSelect() {
211
+ return (
212
+ <Select>
213
+ <SelectTrigger size="md">
214
+ <SelectValue placeholder="Selecciona un país" />
215
+ </SelectTrigger>
216
+ <SelectContent>
217
+ <SelectItem value="mx">México</SelectItem>
218
+ <SelectItem value="us">Estados Unidos</SelectItem>
219
+ <SelectItem value="es">España</SelectItem>
220
+ </SelectContent>
221
+ </Select>
222
+ )
223
+ }
224
+ ```
225
+ - **Validación y mensajes de error:**
226
+ ```tsx
227
+ import {
228
+ Select,
229
+ SelectTrigger,
230
+ SelectValue,
231
+ SelectContent,
232
+ SelectItem,
233
+ SelectErrorMessage
234
+ } from "@klu_dev/ui-klu-green"
235
+ import { useState } from "react"
236
+
237
+ export default function FormSelect() {
238
+ const [value, setValue] = useState("")
239
+ const [error, setError] = useState("")
240
+
241
+ const handleValidation = () => {
242
+ if (!value) setError("Debes seleccionar una opción para continuar")
243
+ }
244
+
245
+ return (
246
+ <div className="uiklu-flex uiklu-flex-col uiklu-gap-2">
247
+ <Select value={value} onValueChange={(val) => { setValue(val); setError(""); }}>
248
+ <SelectTrigger error={!!error} size="lg">
249
+ <SelectValue placeholder="Selecciona una opción" />
250
+ </SelectTrigger>
251
+ <SelectContent>
252
+ <SelectItem value="1">Plan Básico</SelectItem>
253
+ <SelectItem value="2">Plan Premium</SelectItem>
254
+ </SelectContent>
255
+ </Select>
256
+
257
+ {/* Mensaje de error dedicado */}
258
+ <SelectErrorMessage message={error} />
259
+
260
+ <button onClick={handleValidation} className="uiklu-mt-4">
261
+ Validar
262
+ </button>
263
+ </div>
264
+ )
265
+ }
266
+ ```
267
+
268
+ - **Props de Select:**
269
+
270
+
271
+ | Size | Ancho (Width) | Clase CSS (uiklu) |
272
+ | :--- | :--- | :--- |
273
+ | `sm` | `150px` | `uiklu-w-[150px]` |
274
+ | `md` | `250px` | `uiklu-w-[250px]` |
275
+ | `lg` | `350px` | `uiklu-w-[350px]` |
276
+ | `full` | `100%` | `uiklu-w-full` |
package/dist/index.css CHANGED
@@ -145,6 +145,9 @@ button,
145
145
  .uiklu-relative{
146
146
  position: relative;
147
147
  }
148
+ .uiklu-left-3{
149
+ left: 0.75rem;
150
+ }
148
151
  .uiklu-right-6{
149
152
  right: 1.5rem;
150
153
  }
@@ -154,12 +157,18 @@ button,
154
157
  .uiklu-z-10{
155
158
  z-index: 10;
156
159
  }
160
+ .uiklu-z-50{
161
+ z-index: 50;
162
+ }
157
163
  .uiklu-m-0{
158
164
  margin: 0px;
159
165
  }
160
166
  .uiklu-mb-2{
161
167
  margin-bottom: 0.5rem;
162
168
  }
169
+ .uiklu-ml-2{
170
+ margin-left: 0.5rem;
171
+ }
163
172
  .uiklu-mt-1{
164
173
  margin-top: 0.25rem;
165
174
  }
@@ -175,6 +184,9 @@ button,
175
184
  .uiklu-inline-flex{
176
185
  display: inline-flex;
177
186
  }
187
+ .uiklu-h-3\.5{
188
+ height: 0.875rem;
189
+ }
178
190
  .uiklu-h-4{
179
191
  height: 1rem;
180
192
  }
@@ -199,9 +211,21 @@ button,
199
211
  .uiklu-h-full{
200
212
  height: 100%;
201
213
  }
214
+ .uiklu-max-h-96{
215
+ max-height: 24rem;
216
+ }
202
217
  .uiklu-max-h-\[60px\]{
203
218
  max-height: 60px;
204
219
  }
220
+ .uiklu-min-h-\[500px\]{
221
+ min-height: 500px;
222
+ }
223
+ .uiklu-min-h-screen{
224
+ min-height: 100vh;
225
+ }
226
+ .uiklu-w-3\.5{
227
+ width: 0.875rem;
228
+ }
205
229
  .uiklu-w-4{
206
230
  width: 1rem;
207
231
  }
@@ -229,6 +253,9 @@ button,
229
253
  .uiklu-w-\[600px\]{
230
254
  width: 600px;
231
255
  }
256
+ .uiklu-w-\[var\(--radix-select-trigger-width\)\]{
257
+ width: var(--radix-select-trigger-width);
258
+ }
232
259
  .uiklu-w-fit{
233
260
  width: -moz-fit-content;
234
261
  width: fit-content;
@@ -236,15 +263,39 @@ button,
236
263
  .uiklu-w-full{
237
264
  width: 100%;
238
265
  }
266
+ .uiklu-min-w-\[150px\]{
267
+ min-width: 150px;
268
+ }
269
+ .uiklu-min-w-\[250px\]{
270
+ min-width: 250px;
271
+ }
272
+ .uiklu-min-w-\[350px\]{
273
+ min-width: 350px;
274
+ }
275
+ .uiklu-min-w-\[var\(--radix-select-trigger-width\)\]{
276
+ min-width: var(--radix-select-trigger-width);
277
+ }
239
278
  .uiklu-max-w-\[600px\]{
240
279
  max-width: 600px;
241
280
  }
242
281
  .uiklu-flex-shrink-0{
243
282
  flex-shrink: 0;
244
283
  }
284
+ .uiklu-shrink-0{
285
+ flex-shrink: 0;
286
+ }
287
+ .uiklu-translate-y-1{
288
+ --tw-translate-y: 0.25rem;
289
+ transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
290
+ }
245
291
  .uiklu-cursor-pointer{
246
292
  cursor: pointer;
247
293
  }
294
+ .uiklu-select-none{
295
+ -webkit-user-select: none;
296
+ -moz-user-select: none;
297
+ user-select: none;
298
+ }
248
299
  .uiklu-appearance-none{
249
300
  -webkit-appearance: none;
250
301
  -moz-appearance: none;
@@ -262,12 +313,18 @@ button,
262
313
  .uiklu-justify-center{
263
314
  justify-content: center;
264
315
  }
316
+ .uiklu-justify-between{
317
+ justify-content: space-between;
318
+ }
265
319
  .uiklu-gap-1{
266
320
  gap: 0.25rem;
267
321
  }
268
322
  .uiklu-gap-1\.5{
269
323
  gap: 0.375rem;
270
324
  }
325
+ .uiklu-gap-10{
326
+ gap: 2.5rem;
327
+ }
271
328
  .uiklu-gap-2{
272
329
  gap: 0.5rem;
273
330
  }
@@ -286,6 +343,11 @@ button,
286
343
  .uiklu-overflow-hidden{
287
344
  overflow: hidden;
288
345
  }
346
+ .uiklu-truncate{
347
+ overflow: hidden;
348
+ text-overflow: ellipsis;
349
+ white-space: nowrap;
350
+ }
289
351
  .uiklu-text-ellipsis{
290
352
  text-overflow: ellipsis;
291
353
  }
@@ -295,12 +357,21 @@ button,
295
357
  .uiklu-rounded-2xl{
296
358
  border-radius: 1rem;
297
359
  }
360
+ .uiklu-rounded-\[20px\]{
361
+ border-radius: 20px;
362
+ }
298
363
  .uiklu-rounded-\[48px\]{
299
364
  border-radius: 48px;
300
365
  }
301
366
  .uiklu-rounded-\[50px\]{
302
367
  border-radius: 50px;
303
368
  }
369
+ .uiklu-rounded-full{
370
+ border-radius: 9999px;
371
+ }
372
+ .uiklu-rounded-none{
373
+ border-radius: 0px;
374
+ }
304
375
  .uiklu-rounded-xl{
305
376
  border-radius: 0.75rem;
306
377
  }
@@ -345,6 +416,10 @@ button,
345
416
  --tw-border-opacity: 1;
346
417
  border-color: rgb(209 213 219 / var(--tw-border-opacity, 1));
347
418
  }
419
+ .uiklu-border-gray-700{
420
+ --tw-border-opacity: 1;
421
+ border-color: rgb(55 65 81 / var(--tw-border-opacity, 1));
422
+ }
348
423
  .uiklu-border-outlinesecondary{
349
424
  --tw-border-opacity: 1;
350
425
  border-color: hsl(var(--uiklu-outlinesecondary) / var(--tw-border-opacity, 1));
@@ -356,10 +431,22 @@ button,
356
431
  .uiklu-border-transparent{
357
432
  border-color: transparent;
358
433
  }
434
+ .uiklu-bg-\[\#050a0a\]{
435
+ --tw-bg-opacity: 1;
436
+ background-color: rgb(5 10 10 / var(--tw-bg-opacity, 1));
437
+ }
359
438
  .uiklu-bg-background{
360
439
  --tw-bg-opacity: 1;
361
440
  background-color: hsl(var(--uiklu-background) / var(--tw-bg-opacity, 1));
362
441
  }
442
+ .uiklu-bg-destructive{
443
+ --tw-bg-opacity: 1;
444
+ background-color: hsl(var(--uiklu-destructive) / var(--tw-bg-opacity, 1));
445
+ }
446
+ .uiklu-bg-gray-200{
447
+ --tw-bg-opacity: 1;
448
+ background-color: rgb(229 231 235 / var(--tw-bg-opacity, 1));
449
+ }
363
450
  .uiklu-bg-green-100{
364
451
  --tw-bg-opacity: 1;
365
452
  background-color: rgb(220 252 231 / var(--tw-bg-opacity, 1));
@@ -405,9 +492,18 @@ button,
405
492
  .uiklu-p-0{
406
493
  padding: 0px;
407
494
  }
495
+ .uiklu-p-1{
496
+ padding: 0.25rem;
497
+ }
408
498
  .uiklu-p-10{
409
499
  padding: 2.5rem;
410
500
  }
501
+ .uiklu-p-20{
502
+ padding: 5rem;
503
+ }
504
+ .uiklu-p-4{
505
+ padding: 1rem;
506
+ }
411
507
  .uiklu-p-6{
412
508
  padding: 1.5rem;
413
509
  }
@@ -418,6 +514,10 @@ button,
418
514
  padding-left: 0.5rem;
419
515
  padding-right: 0.5rem;
420
516
  }
517
+ .uiklu-px-3{
518
+ padding-left: 0.75rem;
519
+ padding-right: 0.75rem;
520
+ }
421
521
  .uiklu-px-4{
422
522
  padding-left: 1rem;
423
523
  padding-right: 1rem;
@@ -446,12 +546,31 @@ button,
446
546
  padding-top: 0.25rem;
447
547
  padding-bottom: 0.25rem;
448
548
  }
549
+ .uiklu-py-2\.5{
550
+ padding-top: 0.625rem;
551
+ padding-bottom: 0.625rem;
552
+ }
553
+ .uiklu-pl-10{
554
+ padding-left: 2.5rem;
555
+ }
449
556
  .uiklu-pr-14{
450
557
  padding-right: 3.5rem;
451
558
  }
559
+ .uiklu-pr-4{
560
+ padding-right: 1rem;
561
+ }
562
+ .uiklu-text-left{
563
+ text-align: left;
564
+ }
452
565
  .uiklu-text-center{
453
566
  text-align: center;
454
567
  }
568
+ .uiklu-text-right{
569
+ text-align: right;
570
+ }
571
+ .uiklu-text-justify{
572
+ text-align: justify;
573
+ }
455
574
  .uiklu-font-mono{
456
575
  font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
457
576
  }
@@ -476,6 +595,15 @@ button,
476
595
  .uiklu-text-\[18px\]{
477
596
  font-size: 18px;
478
597
  }
598
+ .uiklu-text-\[24px\]{
599
+ font-size: 24px;
600
+ }
601
+ .uiklu-text-\[32px\]{
602
+ font-size: 32px;
603
+ }
604
+ .uiklu-text-\[40px\]{
605
+ font-size: 40px;
606
+ }
479
607
  .uiklu-text-base{
480
608
  font-size: 1rem;
481
609
  line-height: 1.5rem;
@@ -496,21 +624,44 @@ button,
496
624
  font-size: 0.75rem;
497
625
  line-height: 1rem;
498
626
  }
627
+ .uiklu-font-\[600\]{
628
+ font-weight: 600;
629
+ }
630
+ .uiklu-font-\[700\]{
631
+ font-weight: 700;
632
+ }
499
633
  .uiklu-font-bold{
500
634
  font-weight: 700;
501
635
  }
502
636
  .uiklu-font-medium{
503
637
  font-weight: 500;
504
638
  }
639
+ .uiklu-font-normal{
640
+ font-weight: 400;
641
+ }
505
642
  .uiklu-uppercase{
506
643
  text-transform: uppercase;
507
644
  }
508
645
  .uiklu-leading-none{
509
646
  line-height: 1;
510
647
  }
648
+ .uiklu-leading-normal{
649
+ line-height: 1.5;
650
+ }
511
651
  .uiklu-leading-tight{
512
652
  line-height: 1.25;
513
653
  }
654
+ .uiklu-tracking-wider{
655
+ letter-spacing: 0.05em;
656
+ }
657
+ .uiklu-text-\[\#F99B1C\]{
658
+ --tw-text-opacity: 1;
659
+ color: rgb(249 155 28 / var(--tw-text-opacity, 1));
660
+ }
661
+ .uiklu-text-baseblack{
662
+ --tw-text-opacity: 1;
663
+ color: hsl(var(--uiklu-baseblack) / var(--tw-text-opacity, 1));
664
+ }
514
665
  .uiklu-text-basewhite{
515
666
  --tw-text-opacity: 1;
516
667
  color: hsl(var(--uiklu-basewhite) / var(--tw-text-opacity, 1));
@@ -527,6 +678,10 @@ button,
527
678
  --tw-text-opacity: 1;
528
679
  color: rgb(107 114 128 / var(--tw-text-opacity, 1));
529
680
  }
681
+ .uiklu-text-gray-600{
682
+ --tw-text-opacity: 1;
683
+ color: rgb(75 85 99 / var(--tw-text-opacity, 1));
684
+ }
530
685
  .uiklu-text-green-700{
531
686
  --tw-text-opacity: 1;
532
687
  color: rgb(21 128 61 / var(--tw-text-opacity, 1));
@@ -546,13 +701,26 @@ button,
546
701
  --tw-text-opacity: 1;
547
702
  color: hsl(var(--uiklu-primary-foreground) / var(--tw-text-opacity, 1));
548
703
  }
704
+ .uiklu-text-secondary{
705
+ --tw-text-opacity: 1;
706
+ color: hsl(var(--uiklu-secondary) / var(--tw-text-opacity, 1));
707
+ }
549
708
  .uiklu-text-white{
550
709
  --tw-text-opacity: 1;
551
710
  color: rgb(255 255 255 / var(--tw-text-opacity, 1));
552
711
  }
712
+ .uiklu-antialiased{
713
+ -webkit-font-smoothing: antialiased;
714
+ -moz-osx-font-smoothing: grayscale;
715
+ }
553
716
  .uiklu-opacity-70{
554
717
  opacity: 0.7;
555
718
  }
719
+ .uiklu-shadow-md{
720
+ --tw-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
721
+ --tw-shadow-colored: 0 4px 6px -1px var(--tw-shadow-color), 0 2px 4px -2px var(--tw-shadow-color);
722
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
723
+ }
556
724
  .uiklu-outline-none{
557
725
  outline: 2px solid transparent;
558
726
  outline-offset: 2px;
@@ -567,6 +735,10 @@ button,
567
735
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
568
736
  transition-duration: 150ms;
569
737
  }
738
+ .hover\:uiklu-bg-gray-300:hover{
739
+ --tw-bg-opacity: 1;
740
+ background-color: rgb(209 213 219 / var(--tw-bg-opacity, 1));
741
+ }
570
742
  .hover\:uiklu-bg-outlinesecondary\/10:hover{
571
743
  background-color: hsl(var(--uiklu-outlinesecondary) / 0.1);
572
744
  }
@@ -579,6 +751,9 @@ button,
579
751
  .hover\:uiklu-opacity-100:hover{
580
752
  opacity: 1;
581
753
  }
754
+ .hover\:uiklu-opacity-80:hover{
755
+ opacity: 0.8;
756
+ }
582
757
  .hover\:uiklu-opacity-90:hover{
583
758
  opacity: 0.9;
584
759
  }
@@ -593,6 +768,13 @@ button,
593
768
  --tw-border-opacity: 1;
594
769
  border-color: hsl(var(--uiklu-destructive) / var(--tw-border-opacity, 1));
595
770
  }
771
+ .focus\:uiklu-bg-primary\/10:focus{
772
+ background-color: hsl(var(--uiklu-primary) / 0.1);
773
+ }
774
+ .focus\:uiklu-text-primary:focus{
775
+ --tw-text-opacity: 1;
776
+ color: hsl(var(--uiklu-primary) / var(--tw-text-opacity, 1));
777
+ }
596
778
  .active\:uiklu-opacity-70:active{
597
779
  opacity: 0.7;
598
780
  }
@@ -602,4 +784,7 @@ button,
602
784
  .disabled\:uiklu-opacity-50:disabled{
603
785
  opacity: 0.5;
604
786
  }
787
+ .data-\[placeholder\]\:uiklu-opacity-40[data-placeholder]{
788
+ opacity: 0.4;
789
+ }
605
790
 
package/package.json CHANGED
@@ -1,15 +1,14 @@
1
1
  {
2
2
  "name": "@klu_dev/ui-klu-green",
3
- "version": "1.1.0",
3
+ "version": "1.1.1",
4
4
  "description": "Librería de componentes UI",
5
5
  "type": "module",
6
-
7
6
  "main": "./dist/index.js",
8
7
  "module": "./dist/index.js",
9
8
  "types": "./dist/index.d.ts",
10
-
11
- "files": ["dist"],
12
-
9
+ "files": [
10
+ "dist"
11
+ ],
13
12
  "exports": {
14
13
  ".": {
15
14
  "types": "./dist/index.d.ts",
@@ -20,12 +19,10 @@
20
19
  "import": "./dist/index.css"
21
20
  }
22
21
  },
23
-
24
22
  "peerDependencies": {
25
23
  "react": "^18 || ^19",
26
24
  "react-dom": "^18 || ^19"
27
25
  },
28
-
29
26
  "scripts": {
30
27
  "build": "tsup && npm run build:css",
31
28
  "build:css": "postcss src/index.css -o dist/index.css",
@@ -33,11 +30,11 @@
33
30
  "build-storybook": "storybook build",
34
31
  "dev": "vite"
35
32
  },
36
-
37
33
  "dependencies": {
38
34
  "@fontsource-variable/geist": "^5.2.8",
39
35
  "@radix-ui/react-dialog": "^1.1.15",
40
36
  "@radix-ui/react-label": "^2.1.8",
37
+ "@radix-ui/react-select": "^2.2.6",
41
38
  "@radix-ui/react-slot": "^1.2.4",
42
39
  "@radix-ui/react-toast": "^1.2.15",
43
40
  "class-variance-authority": "^0.7.1",
@@ -46,7 +43,6 @@
46
43
  "tailwind-merge": "^3.5.0",
47
44
  "tw-animate-css": "^1.4.0"
48
45
  },
49
-
50
46
  "devDependencies": {
51
47
  "@chromatic-com/storybook": "^5.1.1",
52
48
  "@eslint/js": "^9.39.4",
@@ -68,4 +64,4 @@
68
64
  "vite": "^8.0.4",
69
65
  "vite-plugin-dts": "^4.5.4"
70
66
  }
71
- }
67
+ }