@klu_dev/ui-klu-green 1.2.8 → 1.2.10

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 CHANGED
@@ -25,6 +25,8 @@ npm install @klu_dev/ui-klu-green
25
25
  - MobileMenuDrawer
26
26
  - SearchSelect
27
27
  - InputCode
28
+ - GridCard
29
+ - CheckBox
28
30
 
29
31
  ## Antes de comenzar a agregar componentes
30
32
 
@@ -820,4 +822,78 @@ export default function BankSelector() {
820
822
  | `placeholder` | `string` | `"Buscar..."` | Texto de soporte visible cuando el campo se encuentra vacío. |
821
823
  | `size` | `'sm' \| 'md' \| 'lg' \| 'full'` | `'lg'` | Determina la escala del ancho mínimo, alto de caja e interlineado tipográfico interno. |
822
824
  | `error` | `boolean` | `false` | Alterna el color de la caja a la paleta destructiva y formatea el color del placeholder. |
823
- | `disabled` | `boolean` | `false` | Inactiva por completo la interacción del gatillo y cancela el despliegue del Popover. |
825
+ | `disabled` | `boolean` | `false` | Inactiva por completo la interacción del gatillo y cancela el despliegue del Popover. |
826
+
827
+ ## Uso de GridCard
828
+ Tarjeta modular interactiva e individual ideal para layouts de cuadrícula.
829
+
830
+ ```tsx
831
+ import { GridCard, Icons } from "@klu_dev/ui-klu-green"
832
+ import { useState } from "react"
833
+
834
+ export default function CategorySelector() {
835
+ const mockCategories = [
836
+ { id: 'tel', label: 'Telefonía', icon: Icons.TELEPHONY },
837
+ { id: 'mov', label: 'Movilidad', icon: Icons.MOBILITY },
838
+ { id: 'hog', label: 'Hogar', icon: Icons.HOMESERVICE },
839
+ ]
840
+
841
+ const [activeId, setActiveId] = useState<string>('tel')
842
+
843
+ return (
844
+ <div className="uiklu-flex uiklu-flex-wrap uiklu-gap-4 uiklu-p-6">
845
+ {mockCategories.map((category) => (
846
+ <GridCard
847
+ key={category.id}
848
+ label={category.label}
849
+ icon={category.icon}
850
+ isActive={activeId === category.id}
851
+ onClick={() => setActiveId(category.id)}
852
+ />
853
+ ))}
854
+ </div>
855
+ )
856
+ }
857
+ ```
858
+
859
+ ### Props de GridCard
860
+ | Prop | Tipo | Por defecto | Descripción |
861
+ | :--- | :--- | :--- | :--- |
862
+ | `label` | `string` | - | Texto informativo inferior que titula el bloque de la tarjeta. |
863
+ | `icon` | `ReactNode` | - | Grafismo o ícono vectorial extraído del catálogo corporativo `Icons`. |
864
+ | `isActive` | `boolean` | `false` | Modifica dinámicamente el estilo del marco y el relleno para denotar selección activa. |
865
+ | `onClick` | `() => void` | - | Callback gatillado al presionar la tarjeta completa. |
866
+
867
+
868
+
869
+ ## Uso de CheckBox
870
+ Componente de casilla de verificación estilizado con soporte de estados e icono interno centralizado. Puede ser utilizado de manera controlada o no controlada.
871
+
872
+ ```tsx
873
+ import { Checkbox } from "@klu_dev/ui-klu-green"
874
+ import { useState } from "react"
875
+
876
+ export default function CheckboxExample() {
877
+ const [isLogged, setIsLogged] = useState(false)
878
+
879
+ return (
880
+ <div className="uiklu-p-6">
881
+ <Checkbox
882
+ label="Guardar como servicio recurrente"
883
+ checked={isLogged}
884
+ onChange={(checked) => setIsLogged(checked)}
885
+ />
886
+ </div>
887
+ )
888
+ }
889
+ ```
890
+
891
+ ### Props de CheckBox
892
+ | Prop | Tipo | Por defecto | Descripción |
893
+ | :--- | :--- | :--- | :--- |
894
+ | `id` | `string` | - | Identificador único del input (si no se provee, genera uno interno de forma automática). |
895
+ | `label` | `string` | `"Guardar como servicio recurrente"` | Texto descriptivo renderizado al lado derecho del recuadro. |
896
+ | `defaultChecked` | `boolean` | `false` | Estado inicial por defecto en modo no controlado. |
897
+ | `checked` | `boolean` | - | Estado binario síncrono en modo controlado. |
898
+ | `onChange` | `(checked: boolean) => void` | - | Callback gatillado automáticamente al alterar la interacción del recuadro. |
899
+
package/dist/index.css CHANGED
@@ -116,9 +116,12 @@
116
116
  --uiklu-primary-700: 176 84% 22%;
117
117
  --uiklu-primary-600: 177 87% 25%;
118
118
  --uiklu-primary-500: 178 87% 27%;
119
+ --uiklu-primary-400: 178 60% 36%;
119
120
  --uiklu-primary-300: 179 39% 47%;
120
121
  --uiklu-primary-100: 180 34% 77%;
121
122
  --uiklu-primary-light: 180 100% 99%;
123
+ --uiklu-primaryactive: 184 98% 96%;
124
+ --uiklu-primary-borderactive: 183 64% 90%;
122
125
  --uiklu-primary-50: 184 36% 91%;
123
126
  --uiklu-primary-foreground: 0 0% 100%;
124
127
  --uiklu-secondary: 160 60% 40%;
@@ -148,6 +151,7 @@
148
151
  --uiklu-gray-400: 220 2% 72%;
149
152
  --uiklu-gray-300: 210 3% 87%;
150
153
  --uiklu-gray-200: 220 8% 93%;
154
+ --uiklu-gray-50: 240 20% 98%;
151
155
 
152
156
 
153
157
  --uiklu-successbg: 184 36% 91%;
@@ -345,6 +349,10 @@ button,
345
349
  .uiklu-ml-5{
346
350
  margin-left: 1.25rem;
347
351
 
352
+ }
353
+ .uiklu-ml-\[1px\]{
354
+ margin-left: 1px;
355
+
348
356
  }
349
357
  .uiklu-ml-\[3px\]{
350
358
  margin-left: 3px;
@@ -457,6 +465,10 @@ button,
457
465
  .uiklu-h-\[20px\]{
458
466
  height: 20px;
459
467
 
468
+ }
469
+ .uiklu-h-\[24px\]{
470
+ height: 24px;
471
+
460
472
  }
461
473
  .uiklu-h-\[34px\]{
462
474
  height: 34px;
@@ -489,6 +501,10 @@ button,
489
501
  .uiklu-h-\[6px\]{
490
502
  height: 6px;
491
503
 
504
+ }
505
+ .uiklu-h-\[70px\]{
506
+ height: 70px;
507
+
492
508
  }
493
509
  .uiklu-h-auto{
494
510
  height: auto;
@@ -505,6 +521,10 @@ button,
505
521
  .uiklu-max-h-96{
506
522
  max-height: 24rem;
507
523
 
524
+ }
525
+ .uiklu-max-h-\[200px\]{
526
+ max-height: 200px;
527
+
508
528
  }
509
529
  .uiklu-max-h-\[40px\]{
510
530
  max-height: 40px;
@@ -561,6 +581,10 @@ button,
561
581
  .uiklu-w-8{
562
582
  width: 2rem;
563
583
 
584
+ }
585
+ .uiklu-w-\[120px\]{
586
+ width: 120px;
587
+
564
588
  }
565
589
  .uiklu-w-\[141px\]{
566
590
  width: 141px;
@@ -605,6 +629,10 @@ button,
605
629
  .uiklu-w-\[39px\]{
606
630
  width: 39px;
607
631
 
632
+ }
633
+ .uiklu-w-\[400px\]{
634
+ width: 400px;
635
+
608
636
  }
609
637
  .uiklu-w-\[40px\]{
610
638
  width: 40px;
@@ -621,6 +649,10 @@ button,
621
649
  .uiklu-w-\[600px\]{
622
650
  width: 600px;
623
651
 
652
+ }
653
+ .uiklu-w-\[70px\]{
654
+ width: 70px;
655
+
624
656
  }
625
657
  .uiklu-w-\[75px\]{
626
658
  width: 75px;
@@ -746,6 +778,10 @@ button,
746
778
  .uiklu-max-w-lg{
747
779
  max-width: 32rem;
748
780
 
781
+ }
782
+ .uiklu-max-w-md{
783
+ max-width: 28rem;
784
+
749
785
  }
750
786
  .uiklu-flex-1{
751
787
  flex: 1 1 0%;
@@ -1026,6 +1062,10 @@ button,
1026
1062
  .uiklu-rounded-\[48px\]{
1027
1063
  border-radius: 48px;
1028
1064
 
1065
+ }
1066
+ .uiklu-rounded-\[4px\]{
1067
+ border-radius: 4px;
1068
+
1029
1069
  }
1030
1070
  .uiklu-rounded-\[50px\]{
1031
1071
  border-radius: 50px;
@@ -1134,6 +1174,11 @@ button,
1134
1174
  --tw-border-opacity: 1;
1135
1175
  border-color: hsl(var(--uiklu-gray-200) / var(--tw-border-opacity, 1));
1136
1176
 
1177
+ }
1178
+ .uiklu-border-gray300{
1179
+ --tw-border-opacity: 1;
1180
+ border-color: hsl(var(--uiklu-gray-300) / var(--tw-border-opacity, 1));
1181
+
1137
1182
  }
1138
1183
  .uiklu-border-inputlight{
1139
1184
  --tw-border-opacity: 1;
@@ -1159,6 +1204,11 @@ button,
1159
1204
  --tw-border-opacity: 1;
1160
1205
  border-color: hsl(var(--uiklu-primary-900) / var(--tw-border-opacity, 1));
1161
1206
 
1207
+ }
1208
+ .uiklu-border-primaryborderactive{
1209
+ --tw-border-opacity: 1;
1210
+ border-color: hsl(var(--uiklu-primary-borderactive) / var(--tw-border-opacity, 1));
1211
+
1162
1212
  }
1163
1213
  .uiklu-border-transparent{
1164
1214
  border-color: transparent;
@@ -1245,6 +1295,11 @@ button,
1245
1295
  --tw-bg-opacity: 1;
1246
1296
  background-color: rgb(249 250 251 / var(--tw-bg-opacity, 1));
1247
1297
 
1298
+ }
1299
+ .uiklu-bg-gray50{
1300
+ --tw-bg-opacity: 1;
1301
+ background-color: hsl(var(--uiklu-gray-50) / var(--tw-bg-opacity, 1));
1302
+
1248
1303
  }
1249
1304
  .uiklu-bg-gray900{
1250
1305
  --tw-bg-opacity: 1;
@@ -1294,6 +1349,11 @@ button,
1294
1349
  --tw-bg-opacity: 1;
1295
1350
  background-color: hsl(var(--uiklu-primary-900) / var(--tw-bg-opacity, 1));
1296
1351
 
1352
+ }
1353
+ .uiklu-bg-primaryactive{
1354
+ --tw-bg-opacity: 1;
1355
+ background-color: hsl(var(--uiklu-primaryactive) / var(--tw-bg-opacity, 1));
1356
+
1297
1357
  }
1298
1358
  .uiklu-bg-primarylight{
1299
1359
  --tw-bg-opacity: 1;
@@ -1436,6 +1496,14 @@ button,
1436
1496
  .uiklu-p-8{
1437
1497
  padding: 2rem;
1438
1498
 
1499
+ }
1500
+ .uiklu-p-\[10px\]{
1501
+ padding: 10px;
1502
+
1503
+ }
1504
+ .uiklu-p-\[10px_8px_10px_8px\]{
1505
+ padding: 10px 8px 10px 8px;
1506
+
1439
1507
  }
1440
1508
  .uiklu-p-\[14px\]{
1441
1509
  padding: 14px;
@@ -1542,6 +1610,10 @@ button,
1542
1610
  .uiklu-pb-\[20px\]{
1543
1611
  padding-bottom: 20px;
1544
1612
 
1613
+ }
1614
+ .uiklu-pl-1{
1615
+ padding-left: 0.25rem;
1616
+
1545
1617
  }
1546
1618
  .uiklu-pl-10{
1547
1619
  padding-left: 2.5rem;
@@ -1550,6 +1622,10 @@ button,
1550
1622
  .uiklu-pl-3{
1551
1623
  padding-left: 0.75rem;
1552
1624
 
1625
+ }
1626
+ .uiklu-pl-6{
1627
+ padding-left: 1.5rem;
1628
+
1553
1629
  }
1554
1630
  .uiklu-pr-14{
1555
1631
  padding-right: 3.5rem;
@@ -1562,6 +1638,10 @@ button,
1562
1638
  .uiklu-pr-4{
1563
1639
  padding-right: 1rem;
1564
1640
 
1641
+ }
1642
+ .uiklu-pr-6{
1643
+ padding-right: 1.5rem;
1644
+
1565
1645
  }
1566
1646
  .uiklu-pt-4{
1567
1647
  padding-top: 1rem;
@@ -1657,6 +1737,10 @@ button,
1657
1737
  .uiklu-text-\[8px\]{
1658
1738
  font-size: 8px;
1659
1739
 
1740
+ }
1741
+ .uiklu-text-\[9\.5px\]{
1742
+ font-size: 9.5px;
1743
+
1660
1744
  }
1661
1745
  .uiklu-text-lg{
1662
1746
  font-size: 12px;
@@ -1872,6 +1956,11 @@ button,
1872
1956
  --tw-text-opacity: 1;
1873
1957
  color: hsl(var(--uiklu-primary-300) / var(--tw-text-opacity, 1));
1874
1958
 
1959
+ }
1960
+ .uiklu-text-primary400{
1961
+ --tw-text-opacity: 1;
1962
+ color: hsl(var(--uiklu-primary-400) / var(--tw-text-opacity, 1));
1963
+
1875
1964
  }
1876
1965
  .uiklu-text-primary600{
1877
1966
  --tw-text-opacity: 1;
@@ -2093,6 +2182,18 @@ input.uiklu-flex:not(:placeholder-shown) {
2093
2182
 
2094
2183
  }
2095
2184
 
2185
+ .checked\:uiklu-border-primary:checked{
2186
+ --tw-border-opacity: 1;
2187
+ border-color: hsl(var(--uiklu-primary) / var(--tw-border-opacity, 1));
2188
+
2189
+ }
2190
+
2191
+ .checked\:uiklu-bg-primary:checked{
2192
+ --tw-bg-opacity: 1;
2193
+ background-color: hsl(var(--uiklu-primary) / var(--tw-bg-opacity, 1));
2194
+
2195
+ }
2196
+
2096
2197
  .focus-within\:uiklu-border-\[1px\]:focus-within{
2097
2198
  border-width: 1px;
2098
2199
 
@@ -2110,6 +2211,26 @@ input.uiklu-flex:not(:placeholder-shown) {
2110
2211
 
2111
2212
  }
2112
2213
 
2214
+ .focus-within\:uiklu-border-primary900:focus-within{
2215
+ --tw-border-opacity: 1;
2216
+ border-color: hsl(var(--uiklu-primary-900) / var(--tw-border-opacity, 1));
2217
+
2218
+ }
2219
+
2220
+ .focus-within\:uiklu-shadow-\[0_0_0_3px_\#AFD8D8\]:focus-within{
2221
+ --tw-shadow: 0 0 0 3px #AFD8D8;
2222
+ --tw-shadow-colored: 0 0 0 3px var(--tw-shadow-color);
2223
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
2224
+
2225
+ }
2226
+
2227
+ .focus-within\:uiklu-shadow-\[0_0_0_3px_rgba\(220\2c 38\2c 38\2c 0\.20\)\]:focus-within{
2228
+ --tw-shadow: 0 0 0 3px rgba(220,38,38,0.20);
2229
+ --tw-shadow-colored: 0 0 0 3px var(--tw-shadow-color);
2230
+ box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
2231
+
2232
+ }
2233
+
2113
2234
  .hover\:uiklu-bg-gray-100:hover{
2114
2235
  --tw-bg-opacity: 1;
2115
2236
  background-color: rgb(243 244 246 / var(--tw-bg-opacity, 1));
@@ -2122,6 +2243,11 @@ input.uiklu-flex:not(:placeholder-shown) {
2122
2243
 
2123
2244
  }
2124
2245
 
2246
+ .hover\:uiklu-bg-gray200\/40:hover{
2247
+ background-color: hsl(var(--uiklu-gray-200) / 0.4);
2248
+
2249
+ }
2250
+
2125
2251
  .hover\:uiklu-bg-orange500\/90:hover{
2126
2252
  background-color: hsl(var(--uiklu-orange-500) / 0.9);
2127
2253
 
@@ -2137,6 +2263,16 @@ input.uiklu-flex:not(:placeholder-shown) {
2137
2263
 
2138
2264
  }
2139
2265
 
2266
+ .hover\:uiklu-bg-primary500\/90:hover{
2267
+ background-color: hsl(var(--uiklu-primary-500) / 0.9);
2268
+
2269
+ }
2270
+
2271
+ .hover\:uiklu-bg-primary900\/10:hover{
2272
+ background-color: hsl(var(--uiklu-primary-900) / 0.1);
2273
+
2274
+ }
2275
+
2140
2276
  .hover\:uiklu-bg-primary900\/5:hover{
2141
2277
  background-color: hsl(var(--uiklu-primary-900) / 0.05);
2142
2278
 
@@ -2243,6 +2379,24 @@ input.uiklu-flex:not(:placeholder-shown) {
2243
2379
 
2244
2380
  }
2245
2381
 
2382
+ .focus-visible\:uiklu-ring-2:focus-visible{
2383
+ --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
2384
+ --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);
2385
+ box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
2386
+
2387
+ }
2388
+
2389
+ .focus-visible\:uiklu-ring-primary300:focus-visible{
2390
+ --tw-ring-opacity: 1;
2391
+ --tw-ring-color: hsl(var(--uiklu-primary-300) / var(--tw-ring-opacity, 1));
2392
+
2393
+ }
2394
+
2395
+ .focus-visible\:uiklu-ring-offset-2:focus-visible{
2396
+ --tw-ring-offset-width: 2px;
2397
+
2398
+ }
2399
+
2246
2400
  .active\:uiklu-opacity-70:active{
2247
2401
  opacity: 0.7;
2248
2402
 
@@ -2282,6 +2436,23 @@ input.uiklu-flex:not(:placeholder-shown) {
2282
2436
 
2283
2437
  }
2284
2438
 
2439
+ .uiklu-peer:checked ~ .peer-checked\:uiklu-opacity-100{
2440
+ opacity: 1;
2441
+
2442
+ }
2443
+
2444
+ .data-\[highlighted\]\:uiklu-bg-primary900[data-highlighted]{
2445
+ --tw-bg-opacity: 1;
2446
+ background-color: hsl(var(--uiklu-primary-900) / var(--tw-bg-opacity, 1));
2447
+
2448
+ }
2449
+
2450
+ .data-\[highlighted\]\:uiklu-text-white[data-highlighted]{
2451
+ --tw-text-opacity: 1;
2452
+ color: rgb(255 255 255 / var(--tw-text-opacity, 1));
2453
+
2454
+ }
2455
+
2285
2456
  .data-\[placeholder\]\:uiklu-text-gray500[data-placeholder]{
2286
2457
  --tw-text-opacity: 1;
2287
2458
  color: hsl(var(--uiklu-gray-500) / var(--tw-text-opacity, 1));
@@ -2352,4 +2523,14 @@ input.uiklu-flex:not(:placeholder-shown) {
2352
2523
  --tw-bg-opacity: 1;
2353
2524
  background-color: hsl(var(--uiklu-primary-300) / var(--tw-bg-opacity, 1));
2354
2525
 
2526
+ }
2527
+
2528
+ .\[\&\>svg\]\:uiklu-h-3>svg{
2529
+ height: 0.75rem;
2530
+
2531
+ }
2532
+
2533
+ .\[\&\>svg\]\:uiklu-w-3>svg{
2534
+ width: 0.75rem;
2535
+
2355
2536
  }
package/dist/index.d.ts CHANGED
@@ -16,7 +16,7 @@ interface InputProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, "
16
16
  declare const Input: React.ForwardRefExoticComponent<InputProps & React.RefAttributes<HTMLInputElement>>;
17
17
 
18
18
  declare const buttonVariants: (props?: ({
19
- variant?: "primary" | "primaryOrange" | "secondary" | "outline" | "outlinePrimary" | "outlineSecondary" | "outlineWhite" | "iconCircle" | null | undefined;
19
+ variant?: "primary" | "primaryOrange" | "secondary" | "outline" | "outlinePrimary" | "outlineSecondary" | "outlineWhite" | "iconCircle" | "filterCircle" | null | undefined;
20
20
  size?: "sm" | "md" | "lg" | "full" | "xl" | "fullh" | "iconOnly" | null | undefined;
21
21
  } & class_variance_authority_types.ClassProp) | undefined) => string;
22
22
  interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement>, VariantProps<typeof buttonVariants> {
@@ -166,6 +166,13 @@ declare const Icons: {
166
166
  BOXES: react_jsx_runtime.JSX.Element;
167
167
  MENU: react_jsx_runtime.JSX.Element;
168
168
  CIRCLE_MOVEMENTS: react_jsx_runtime.JSX.Element;
169
+ TELEPHONY: react_jsx_runtime.JSX.Element;
170
+ MOBILITY: react_jsx_runtime.JSX.Element;
171
+ HOMESERVICE: react_jsx_runtime.JSX.Element;
172
+ SIGN: react_jsx_runtime.JSX.Element;
173
+ GAMES: react_jsx_runtime.JSX.Element;
174
+ CHECKED: react_jsx_runtime.JSX.Element;
175
+ FILTER: react_jsx_runtime.JSX.Element;
169
176
  };
170
177
 
171
178
  declare const searchSelectTriggerVariants: (props?: ({
@@ -194,4 +201,22 @@ interface AuthCodeProps {
194
201
  }
195
202
  declare const InputCode: React__default.FC<AuthCodeProps>;
196
203
 
197
- export { BackButton, BalanceInfo, Button, Icons, Input, InputCode, LoadingScreen, MobileMenuDrawer, Modal, PromoBanner, SearchSelect, Select, SidebarTabs, ToastAction, Toaster, Typography, useToast };
204
+ interface GridCardProps {
205
+ label: string;
206
+ icon: React__default.ReactNode;
207
+ isActive?: boolean;
208
+ onClick?: () => void;
209
+ }
210
+ declare const GridCard: React__default.FC<GridCardProps>;
211
+
212
+ interface CheckboxProps {
213
+ id?: string;
214
+ label?: string;
215
+ defaultChecked?: boolean;
216
+ checked?: boolean;
217
+ onChange?: (checked: boolean) => void;
218
+ [key: string]: any;
219
+ }
220
+ declare const Checkbox: React__default.FC<CheckboxProps>;
221
+
222
+ export { BackButton, BalanceInfo, Button, Checkbox, type CheckboxProps, GridCard, Icons, Input, InputCode, LoadingScreen, MobileMenuDrawer, Modal, PromoBanner, SearchSelect, Select, SidebarTabs, ToastAction, Toaster, Typography, useToast };