cuenti-dna 0.1.1-beta.0 → 0.1.1-beta.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 +49 -54
- package/dist/badge.cjs +152 -0
- package/dist/badge.cjs.map +1 -0
- package/dist/badge.d.cts +44 -0
- package/dist/badge.d.ts +44 -0
- package/dist/badge.js +124 -0
- package/dist/badge.js.map +1 -0
- package/dist/button.cjs +140 -0
- package/dist/button.cjs.map +1 -0
- package/dist/button.d.cts +37 -0
- package/dist/button.d.ts +37 -0
- package/dist/button.js +112 -0
- package/dist/button.js.map +1 -0
- package/dist/card.cjs +178 -0
- package/dist/card.cjs.map +1 -0
- package/dist/card.d.cts +62 -0
- package/dist/card.d.ts +62 -0
- package/dist/card.js +144 -0
- package/dist/card.js.map +1 -0
- package/dist/checkbox.cjs +266 -0
- package/dist/checkbox.cjs.map +1 -0
- package/dist/checkbox.d.cts +59 -0
- package/dist/checkbox.d.ts +59 -0
- package/dist/checkbox.js +238 -0
- package/dist/checkbox.js.map +1 -0
- package/dist/cn.cjs +91 -0
- package/dist/cn.cjs.map +1 -0
- package/dist/cn.d.cts +11 -0
- package/dist/cn.d.ts +11 -0
- package/dist/cn.js +63 -0
- package/dist/cn.js.map +1 -0
- package/dist/form.cjs +90 -0
- package/dist/form.cjs.map +1 -0
- package/dist/form.d.cts +6 -0
- package/dist/form.d.ts +6 -0
- package/dist/form.js +62 -0
- package/dist/form.js.map +1 -0
- package/dist/helper-text.cjs +272 -0
- package/dist/helper-text.cjs.map +1 -0
- package/dist/helper-text.d.cts +20 -0
- package/dist/helper-text.d.ts +20 -0
- package/dist/helper-text.js +243 -0
- package/dist/helper-text.js.map +1 -0
- package/dist/icons.cjs +161 -0
- package/dist/icons.cjs.map +1 -0
- package/dist/icons.d.cts +18 -0
- package/dist/icons.d.ts +18 -0
- package/dist/icons.js +131 -0
- package/dist/icons.js.map +1 -0
- package/dist/input.cjs +743 -0
- package/dist/input.cjs.map +1 -0
- package/dist/input.d.cts +118 -0
- package/dist/input.d.ts +118 -0
- package/dist/input.js +711 -0
- package/dist/input.js.map +1 -0
- package/dist/label.cjs +625 -0
- package/dist/label.cjs.map +1 -0
- package/dist/label.d.cts +13 -0
- package/dist/label.d.ts +13 -0
- package/dist/label.js +597 -0
- package/dist/label.js.map +1 -0
- package/dist/radio-CYS6kOi5.d.cts +60 -0
- package/dist/radio-CYS6kOi5.d.ts +60 -0
- package/dist/radio.cjs +372 -0
- package/dist/radio.cjs.map +1 -0
- package/dist/radio.d.cts +23 -0
- package/dist/radio.d.ts +23 -0
- package/dist/radio.js +342 -0
- package/dist/radio.js.map +1 -0
- package/dist/scroll-area.cjs +214 -0
- package/dist/scroll-area.cjs.map +1 -0
- package/dist/scroll-area.d.cts +16 -0
- package/dist/scroll-area.d.ts +16 -0
- package/dist/scroll-area.js +186 -0
- package/dist/scroll-area.js.map +1 -0
- package/dist/select.cjs +1725 -0
- package/dist/select.cjs.map +1 -0
- package/dist/select.d.cts +141 -0
- package/dist/select.d.ts +141 -0
- package/dist/select.js +1691 -0
- package/dist/select.js.map +1 -0
- package/dist/styles.css +744 -58
- package/dist/switch.cjs +162 -0
- package/dist/switch.cjs.map +1 -0
- package/dist/switch.d.cts +45 -0
- package/dist/switch.d.ts +45 -0
- package/dist/switch.js +134 -0
- package/dist/switch.js.map +1 -0
- package/dist/tooltip.cjs +588 -0
- package/dist/tooltip.cjs.map +1 -0
- package/dist/tooltip.d.cts +76 -0
- package/dist/tooltip.d.ts +76 -0
- package/dist/tooltip.js +557 -0
- package/dist/tooltip.js.map +1 -0
- package/dist/use-formatted-numeric-input.cjs +164 -0
- package/dist/use-formatted-numeric-input.cjs.map +1 -0
- package/dist/use-formatted-numeric-input.d.cts +14 -0
- package/dist/use-formatted-numeric-input.d.ts +14 -0
- package/dist/use-formatted-numeric-input.js +136 -0
- package/dist/use-formatted-numeric-input.js.map +1 -0
- package/dist/use-formatted-numeric-inputs-EV4gGOur.d.cts +39 -0
- package/dist/use-formatted-numeric-inputs-EV4gGOur.d.ts +39 -0
- package/dist/use-radio-group.cjs +128 -0
- package/dist/use-radio-group.cjs.map +1 -0
- package/dist/use-radio-group.d.cts +18 -0
- package/dist/use-radio-group.d.ts +18 -0
- package/dist/use-radio-group.js +100 -0
- package/dist/use-radio-group.js.map +1 -0
- package/dist/use-radio.cjs +143 -0
- package/dist/use-radio.cjs.map +1 -0
- package/dist/use-radio.d.cts +22 -0
- package/dist/use-radio.d.ts +22 -0
- package/dist/use-radio.js +115 -0
- package/dist/use-radio.js.map +1 -0
- package/package.json +106 -19
- package/scripts/cli/args.cjs +71 -0
- package/scripts/cli/constants.cjs +53 -0
- package/scripts/cli/core.cjs +66 -0
- package/scripts/cli/css.cjs +224 -0
- package/scripts/cli/workflows.cjs +270 -0
- package/scripts/cli.cjs +9 -556
- package/src/styles/globals.css +12 -5
- package/dist/index.cjs +0 -1346
- package/dist/index.cjs.map +0 -1
- package/dist/index.d.cts +0 -491
- package/dist/index.d.ts +0 -491
- package/dist/index.js +0 -1295
- package/dist/index.js.map +0 -1
package/README.md
CHANGED
|
@@ -23,9 +23,15 @@ pnpm add cuenti-dna@beta
|
|
|
23
23
|
|
|
24
24
|
Cuando publiques una version estable, podras instalar con `@latest`.
|
|
25
25
|
|
|
26
|
-
### Inicializacion
|
|
26
|
+
### Inicializacion de estilos
|
|
27
27
|
|
|
28
|
-
|
|
28
|
+
Durante la instalacion (`postinstall`):
|
|
29
|
+
|
|
30
|
+
- En terminal interactiva, se abre automaticamente un asistente (wizard) para configurar estilos.
|
|
31
|
+
- En entorno no interactivo, se intenta configurar automaticamente el primer archivo CSS detectado (por ejemplo `app/globals.css`, `src/index.css`, `src/main.css`, etc.).
|
|
32
|
+
- Si no se detecta un archivo CSS conocido, se muestra un mensaje de fallback para importar `cuenti-dna/styles.css` o ejecutar `init` manualmente.
|
|
33
|
+
|
|
34
|
+
Tambien puedes ejecutarlo manualmente cuando quieras:
|
|
29
35
|
|
|
30
36
|
```bash
|
|
31
37
|
npx cuenti-dna@beta init
|
|
@@ -43,12 +49,14 @@ Este asistente:
|
|
|
43
49
|
- Copia el contenido fuente real de [src/styles/globals.css](src/styles/globals.css) para evitar mantener variables duplicadas en el script.
|
|
44
50
|
- Reordena imports con logica segura:
|
|
45
51
|
- `@charset` (si existe)
|
|
46
|
-
- `@import "tailwindcss";`
|
|
47
52
|
- resto de imports del usuario
|
|
48
53
|
- imports de tipografias de Cuenti
|
|
54
|
+
- `@import "tailwindcss";` al final de la lista de imports
|
|
49
55
|
- Inserta un bloque gestionado por Cuenti y deja el contenido original del usuario al final.
|
|
50
56
|
- Si hay colisiones de variables, pregunta si deseas sobrescribir.
|
|
51
57
|
|
|
58
|
+
Nota: `init` es opcional. Su objetivo es exponer tokens/variables en tu CSS para estilos propios del consumidor.
|
|
59
|
+
|
|
52
60
|
Opciones utiles:
|
|
53
61
|
|
|
54
62
|
```bash
|
|
@@ -62,15 +70,49 @@ Tambien puedes controlar overwrite por variable de entorno:
|
|
|
62
70
|
CUENTI_DNA_OVERWRITE_VARS=true npx cuenti-dna@beta init --yes
|
|
63
71
|
```
|
|
64
72
|
|
|
73
|
+
Si no quieres que el wizard se ejecute al instalar (postinstall), puedes desactivarlo asi:
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
CUENTI_DNA_SKIP_INIT=true npm install cuenti-dna@beta
|
|
77
|
+
```
|
|
78
|
+
|
|
65
79
|
## Uso
|
|
66
80
|
|
|
67
|
-
|
|
81
|
+
Import recomendado por subpath:
|
|
68
82
|
|
|
69
83
|
```tsx
|
|
70
|
-
import { Input
|
|
84
|
+
import { Input } from 'cuenti-dna/input'
|
|
85
|
+
import type {
|
|
86
|
+
InputProps,
|
|
87
|
+
InputSizes,
|
|
88
|
+
InputTypes,
|
|
89
|
+
InputVariants
|
|
90
|
+
} from 'cuenti-dna/input'
|
|
71
91
|
```
|
|
72
92
|
|
|
73
|
-
|
|
93
|
+
Tambien puedes importar cualquier modulo publico por su subpath:
|
|
94
|
+
|
|
95
|
+
- `cuenti-dna/form`
|
|
96
|
+
- `cuenti-dna/button`
|
|
97
|
+
- `cuenti-dna/checkbox`
|
|
98
|
+
- `cuenti-dna/helper-text`
|
|
99
|
+
- `cuenti-dna/input`
|
|
100
|
+
- `cuenti-dna/label`
|
|
101
|
+
- `cuenti-dna/radio`
|
|
102
|
+
- `cuenti-dna/select`
|
|
103
|
+
- `cuenti-dna/switch`
|
|
104
|
+
- `cuenti-dna/tooltip`
|
|
105
|
+
- `cuenti-dna/card`
|
|
106
|
+
- `cuenti-dna/scroll-area`
|
|
107
|
+
- `cuenti-dna/use-formatted-numeric-input`
|
|
108
|
+
- `cuenti-dna/use-radio`
|
|
109
|
+
- `cuenti-dna/use-radio-group`
|
|
110
|
+
- `cuenti-dna/icons`
|
|
111
|
+
- `cuenti-dna/cn`
|
|
112
|
+
|
|
113
|
+
La libreria inyecta automaticamente su `styles.css` compilado en runtime al importar cualquier subpath (por ejemplo `cuenti-dna/input`).
|
|
114
|
+
|
|
115
|
+
Si prefieres carga explicita (por ejemplo por politicas CSP o control manual), puedes importar los estilos en tu entrypoint:
|
|
74
116
|
|
|
75
117
|
```tsx
|
|
76
118
|
import 'cuenti-dna/styles.css'
|
|
@@ -80,7 +122,7 @@ Ejemplo rapido:
|
|
|
80
122
|
|
|
81
123
|
```tsx
|
|
82
124
|
import 'cuenti-dna/styles.css'
|
|
83
|
-
import { Input } from 'cuenti-dna'
|
|
125
|
+
import { Input } from 'cuenti-dna/input'
|
|
84
126
|
|
|
85
127
|
export function Example() {
|
|
86
128
|
return (
|
|
@@ -103,50 +145,3 @@ export function Example() {
|
|
|
103
145
|
- `pnpm run storybook`: levanta Storybook en desarrollo.
|
|
104
146
|
- `pnpm run build-storybook`: genera el build estatico de Storybook en `storybook-static/`.
|
|
105
147
|
- `pnpm run lint`: ejecuta Biome.
|
|
106
|
-
|
|
107
|
-
## Publicacion en npm
|
|
108
|
-
|
|
109
|
-
1. Inicia sesion en npm (una sola vez por maquina):
|
|
110
|
-
|
|
111
|
-
```bash
|
|
112
|
-
npm login
|
|
113
|
-
```
|
|
114
|
-
|
|
115
|
-
2. Verifica build local:
|
|
116
|
-
|
|
117
|
-
```bash
|
|
118
|
-
pnpm run build
|
|
119
|
-
```
|
|
120
|
-
|
|
121
|
-
3. (Opcional) Revisa el contenido que se publicara:
|
|
122
|
-
|
|
123
|
-
```bash
|
|
124
|
-
npm pack --dry-run
|
|
125
|
-
```
|
|
126
|
-
|
|
127
|
-
4. Sube la version beta:
|
|
128
|
-
|
|
129
|
-
```bash
|
|
130
|
-
npm version prerelease --preid beta
|
|
131
|
-
```
|
|
132
|
-
|
|
133
|
-
5. Publica con dist-tag beta:
|
|
134
|
-
|
|
135
|
-
```bash
|
|
136
|
-
pnpm run publish:beta
|
|
137
|
-
```
|
|
138
|
-
|
|
139
|
-
Nota: al ser una version `beta`, npm exige publicar con `--tag beta`.
|
|
140
|
-
|
|
141
|
-
## Storybook deploy
|
|
142
|
-
|
|
143
|
-
Para deployar Storybook en tu proveedor preferido:
|
|
144
|
-
|
|
145
|
-
1. Ejecuta `pnpm run build-storybook`.
|
|
146
|
-
2. Publica el contenido de `storybook-static/`.
|
|
147
|
-
|
|
148
|
-
Si usas Chromatic:
|
|
149
|
-
|
|
150
|
-
```bash
|
|
151
|
-
npx chromatic --project-token=<TU_TOKEN>
|
|
152
|
-
```
|
package/dist/badge.cjs
ADDED
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// src/lib/badge.ts
|
|
21
|
+
var badge_exports = {};
|
|
22
|
+
__export(badge_exports, {
|
|
23
|
+
Badge: () => Badge
|
|
24
|
+
});
|
|
25
|
+
module.exports = __toCommonJS(badge_exports);
|
|
26
|
+
|
|
27
|
+
// src/lib/runtime-styles.ts
|
|
28
|
+
var import_meta = {};
|
|
29
|
+
var STYLE_LINK_ID = "cuenti-dna-runtime-styles";
|
|
30
|
+
var runtimeStylesInitialized = false;
|
|
31
|
+
var canInjectStyles = () => typeof window !== "undefined" && typeof document !== "undefined";
|
|
32
|
+
var toFileHref = (filePath) => new URL(`file://${filePath.replace(/\\/g, "/")}`).href;
|
|
33
|
+
var resolveStylesHrefFromImportMeta = () => {
|
|
34
|
+
try {
|
|
35
|
+
return new URL("./styles.css", import_meta.url).href;
|
|
36
|
+
} catch {
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
var resolveStylesHrefFromCommonJsFilename = () => {
|
|
41
|
+
if (typeof __filename !== "string") {
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
try {
|
|
45
|
+
return new URL("./styles.css", toFileHref(__filename)).href;
|
|
46
|
+
} catch {
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
var resolveStylesHref = () => resolveStylesHrefFromImportMeta() ?? resolveStylesHrefFromCommonJsFilename();
|
|
51
|
+
var injectStylesheet = (href) => {
|
|
52
|
+
if (document.getElementById(STYLE_LINK_ID)) {
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
const link = document.createElement("link");
|
|
56
|
+
link.id = STYLE_LINK_ID;
|
|
57
|
+
link.rel = "stylesheet";
|
|
58
|
+
link.href = href;
|
|
59
|
+
link.setAttribute("data-cuenti-dna", "runtime");
|
|
60
|
+
document.head.appendChild(link);
|
|
61
|
+
};
|
|
62
|
+
var ensureRuntimeStyles = () => {
|
|
63
|
+
if (runtimeStylesInitialized) {
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
runtimeStylesInitialized = true;
|
|
67
|
+
if (!canInjectStyles()) {
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
const href = resolveStylesHref();
|
|
71
|
+
if (!href) {
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
injectStylesheet(href);
|
|
75
|
+
};
|
|
76
|
+
ensureRuntimeStyles();
|
|
77
|
+
|
|
78
|
+
// src/components/surfaces/badge.tsx
|
|
79
|
+
var import_class_variance_authority = require("class-variance-authority");
|
|
80
|
+
|
|
81
|
+
// src/utils/cn.ts
|
|
82
|
+
var import_clsx = require("clsx");
|
|
83
|
+
var import_tailwind_merge = require("tailwind-merge");
|
|
84
|
+
function cn(...inputs) {
|
|
85
|
+
return (0, import_tailwind_merge.twMerge)((0, import_clsx.clsx)(inputs));
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
// src/components/surfaces/badge.tsx
|
|
89
|
+
var import_jsx_runtime = require("react/jsx-runtime");
|
|
90
|
+
var badgeVariants = {
|
|
91
|
+
default: {
|
|
92
|
+
solid: "border-none bg-neutral-700 text-white",
|
|
93
|
+
translucent: "border-2 border-neutral-600 bg-neutral-200 text-neutral-700"
|
|
94
|
+
},
|
|
95
|
+
destructive: {
|
|
96
|
+
solid: "bg-destructive text-destructive-foreground",
|
|
97
|
+
translucent: "border-2 border-destructive-400 bg-destructive-25 text-destructive"
|
|
98
|
+
},
|
|
99
|
+
info: {
|
|
100
|
+
solid: "bg-info text-info-foreground",
|
|
101
|
+
translucent: "border-2 border-info bg-info-25 text-info"
|
|
102
|
+
},
|
|
103
|
+
success: {
|
|
104
|
+
solid: "bg-success text-success-foreground",
|
|
105
|
+
translucent: "border-2 border-success bg-success-25 text-success"
|
|
106
|
+
},
|
|
107
|
+
warning: {
|
|
108
|
+
solid: "bg-warning text-warning-foreground",
|
|
109
|
+
translucent: "border-2 border-warning bg-warning-50 text-warning"
|
|
110
|
+
},
|
|
111
|
+
error: {
|
|
112
|
+
solid: "bg-destructive text-destructive-foreground",
|
|
113
|
+
translucent: "border-2 border-destructive bg-destructive-50 text-destructive"
|
|
114
|
+
}
|
|
115
|
+
};
|
|
116
|
+
var badgeSizes = {
|
|
117
|
+
xs: "h-6 px-3 py-1 rounded-[8px] gap-1 text-sm",
|
|
118
|
+
sm: "h-10 px-5 py-2 rounded-[14px] gap-1.5",
|
|
119
|
+
md: "h-12 py-3 px-5 gap-1.5 rounded-[14px]"
|
|
120
|
+
};
|
|
121
|
+
var baseStyles = "font-semibold inline-flex items-center justify-center whitespace-nowrap font-medium leading-none transition-colors duration-200 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-[1em]";
|
|
122
|
+
var badgeStyles = (0, import_class_variance_authority.cva)(baseStyles, {
|
|
123
|
+
variants: {
|
|
124
|
+
size: badgeSizes
|
|
125
|
+
},
|
|
126
|
+
defaultVariants: {
|
|
127
|
+
size: "md"
|
|
128
|
+
}
|
|
129
|
+
});
|
|
130
|
+
function Badge({
|
|
131
|
+
variant = "default",
|
|
132
|
+
color = "solid",
|
|
133
|
+
size = "md",
|
|
134
|
+
className,
|
|
135
|
+
children,
|
|
136
|
+
...props
|
|
137
|
+
}) {
|
|
138
|
+
const classes = cn(
|
|
139
|
+
badgeStyles({ size }),
|
|
140
|
+
badgeVariants[variant][color],
|
|
141
|
+
className
|
|
142
|
+
);
|
|
143
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { "data-slot": "badge", className: classes + "", ...props, children });
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
// src/lib/badge.ts
|
|
147
|
+
ensureRuntimeStyles();
|
|
148
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
149
|
+
0 && (module.exports = {
|
|
150
|
+
Badge
|
|
151
|
+
});
|
|
152
|
+
//# sourceMappingURL=badge.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/lib/badge.ts","../src/lib/runtime-styles.ts","../src/components/surfaces/badge.tsx","../src/utils/cn.ts"],"sourcesContent":["/* biome-ignore-all lint/performance/noBarrelFile: public package subpath entry point */\r\n\r\nimport { ensureRuntimeStyles } from '@/lib/runtime-styles'\r\n\r\nensureRuntimeStyles()\r\n\r\nexport { Badge } from '@/components/surfaces/badge'\r\nexport type {\r\n BadgeColor,\r\n BadgeProps,\r\n BadgeSize,\r\n BadgeVariants\r\n} from '@/types/atoms/surfaces/badge'\r\n","const STYLE_LINK_ID = 'cuenti-dna-runtime-styles'\nlet runtimeStylesInitialized = false\n\ndeclare const __filename: string | undefined\n\nconst canInjectStyles = () =>\n typeof window !== 'undefined' && typeof document !== 'undefined'\n\nconst toFileHref = (filePath: string) =>\n new URL(`file://${filePath.replace(/\\\\/g, '/')}`).href\n\nconst resolveStylesHrefFromImportMeta = () => {\n try {\n return new URL('./styles.css', import.meta.url).href\n } catch {\n return null\n }\n}\n\nconst resolveStylesHrefFromCommonJsFilename = () => {\n if (typeof __filename !== 'string') {\n return null\n }\n\n try {\n return new URL('./styles.css', toFileHref(__filename)).href\n } catch {\n return null\n }\n}\n\nconst resolveStylesHref = () =>\n resolveStylesHrefFromImportMeta() ?? resolveStylesHrefFromCommonJsFilename()\n\nconst injectStylesheet = (href: string) => {\n if (document.getElementById(STYLE_LINK_ID)) {\n return\n }\n\n const link = document.createElement('link')\n link.id = STYLE_LINK_ID\n link.rel = 'stylesheet'\n link.href = href\n link.setAttribute('data-cuenti-dna', 'runtime')\n document.head.appendChild(link)\n}\n\nexport const ensureRuntimeStyles = () => {\n if (runtimeStylesInitialized) {\n return\n }\n\n runtimeStylesInitialized = true\n\n if (!canInjectStyles()) {\n return\n }\n\n const href = resolveStylesHref()\n\n if (!href) {\n return\n }\n\n injectStylesheet(href)\n}\n\nensureRuntimeStyles()\n","import { cva } from 'class-variance-authority'\r\nimport type {\r\n BadgeColor,\r\n BadgeProps,\r\n BadgeSize,\r\n BadgeVariants\r\n} from '@/types/atoms/surfaces/badge'\r\nimport { cn } from '@/utils/cn'\r\n\r\n/**\r\n * Variantes visuales disponibles para el componente Badge.\r\n */\r\nexport const badgeVariants = {\r\n default: {\r\n solid: 'border-none bg-neutral-700 text-white',\r\n translucent: 'border-2 border-neutral-600 bg-neutral-200 text-neutral-700'\r\n },\r\n destructive: {\r\n solid: 'bg-destructive text-destructive-foreground',\r\n translucent:\r\n 'border-2 border-destructive-400 bg-destructive-25 text-destructive'\r\n },\r\n info: {\r\n solid: 'bg-info text-info-foreground',\r\n translucent: 'border-2 border-info bg-info-25 text-info'\r\n },\r\n success: {\r\n solid: 'bg-success text-success-foreground',\r\n translucent: 'border-2 border-success bg-success-25 text-success'\r\n },\r\n warning: {\r\n solid: 'bg-warning text-warning-foreground',\r\n translucent: 'border-2 border-warning bg-warning-50 text-warning'\r\n },\r\n error: {\r\n solid: 'bg-destructive text-destructive-foreground',\r\n translucent:\r\n 'border-2 border-destructive bg-destructive-50 text-destructive'\r\n }\r\n} satisfies Record<BadgeVariants, Record<BadgeColor, string>>\r\n\r\n/**\r\n * Tamanos visuales disponibles para el componente Badge.\r\n */\r\nexport const badgeSizes = {\r\n xs: 'h-6 px-3 py-1 rounded-[8px] gap-1 text-sm',\r\n sm: 'h-10 px-5 py-2 rounded-[14px] gap-1.5',\r\n md: 'h-12 py-3 px-5 gap-1.5 rounded-[14px]'\r\n} satisfies Record<BadgeSize, string>\r\n\r\nconst baseStyles =\r\n \"font-semibold inline-flex items-center justify-center whitespace-nowrap font-medium leading-none transition-colors duration-200 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-[1em]\"\r\n\r\nconst badgeStyles = cva(baseStyles, {\r\n variants: {\r\n size: badgeSizes\r\n },\r\n defaultVariants: {\r\n size: 'md'\r\n }\r\n} as const)\r\n\r\n/**\r\n * Componente Badge.\r\n *\r\n * Renderiza una etiqueta compacta con variantes semanticas y tamanos predefinidos.\r\n */\r\nexport function Badge({\r\n variant = 'default',\r\n color = 'solid',\r\n size = 'md',\r\n className,\r\n children,\r\n ...props\r\n}: BadgeProps) {\r\n const classes = cn(\r\n badgeStyles({ size }),\r\n badgeVariants[variant][color],\r\n className\r\n )\r\n\r\n return (\r\n <span data-slot=\"badge\" className={classes + ''} {...props}>\r\n {children}\r\n </span>\r\n )\r\n}\r\n","import type { ClassValue } from 'clsx'\nimport { clsx } from 'clsx'\nimport { twMerge } from 'tailwind-merge'\n\n/**\n * Combina clases condicionales y resuelve conflictos de Tailwind.\n *\n * Usa `clsx` para componer entradas heterogeneas y `tailwind-merge`\n * para priorizar la ultima clase utilitaria en conflicto.\n */\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA;AAAA,IAAM,gBAAgB;AACtB,IAAI,2BAA2B;AAI/B,IAAM,kBAAkB,MACtB,OAAO,WAAW,eAAe,OAAO,aAAa;AAEvD,IAAM,aAAa,CAAC,aAClB,IAAI,IAAI,UAAU,SAAS,QAAQ,OAAO,GAAG,CAAC,EAAE,EAAE;AAEpD,IAAM,kCAAkC,MAAM;AAC5C,MAAI;AACF,WAAO,IAAI,IAAI,gBAAgB,YAAY,GAAG,EAAE;AAAA,EAClD,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,IAAM,wCAAwC,MAAM;AAClD,MAAI,OAAO,eAAe,UAAU;AAClC,WAAO;AAAA,EACT;AAEA,MAAI;AACF,WAAO,IAAI,IAAI,gBAAgB,WAAW,UAAU,CAAC,EAAE;AAAA,EACzD,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,IAAM,oBAAoB,MACxB,gCAAgC,KAAK,sCAAsC;AAE7E,IAAM,mBAAmB,CAAC,SAAiB;AACzC,MAAI,SAAS,eAAe,aAAa,GAAG;AAC1C;AAAA,EACF;AAEA,QAAM,OAAO,SAAS,cAAc,MAAM;AAC1C,OAAK,KAAK;AACV,OAAK,MAAM;AACX,OAAK,OAAO;AACZ,OAAK,aAAa,mBAAmB,SAAS;AAC9C,WAAS,KAAK,YAAY,IAAI;AAChC;AAEO,IAAM,sBAAsB,MAAM;AACvC,MAAI,0BAA0B;AAC5B;AAAA,EACF;AAEA,6BAA2B;AAE3B,MAAI,CAAC,gBAAgB,GAAG;AACtB;AAAA,EACF;AAEA,QAAM,OAAO,kBAAkB;AAE/B,MAAI,CAAC,MAAM;AACT;AAAA,EACF;AAEA,mBAAiB,IAAI;AACvB;AAEA,oBAAoB;;;ACnEpB,sCAAoB;;;ACCpB,kBAAqB;AACrB,4BAAwB;AAQjB,SAAS,MAAM,QAAsB;AAC1C,aAAO,mCAAQ,kBAAK,MAAM,CAAC;AAC7B;;;ADsEI;AAtEG,IAAM,gBAAgB;AAAA,EAC3B,SAAS;AAAA,IACP,OAAO;AAAA,IACP,aAAa;AAAA,EACf;AAAA,EACA,aAAa;AAAA,IACX,OAAO;AAAA,IACP,aACE;AAAA,EACJ;AAAA,EACA,MAAM;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACf;AAAA,EACA,SAAS;AAAA,IACP,OAAO;AAAA,IACP,aAAa;AAAA,EACf;AAAA,EACA,SAAS;AAAA,IACP,OAAO;AAAA,IACP,aAAa;AAAA,EACf;AAAA,EACA,OAAO;AAAA,IACL,OAAO;AAAA,IACP,aACE;AAAA,EACJ;AACF;AAKO,IAAM,aAAa;AAAA,EACxB,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN;AAEA,IAAM,aACJ;AAEF,IAAM,kBAAc,qCAAI,YAAY;AAAA,EAClC,UAAU;AAAA,IACR,MAAM;AAAA,EACR;AAAA,EACA,iBAAiB;AAAA,IACf,MAAM;AAAA,EACR;AACF,CAAU;AAOH,SAAS,MAAM;AAAA,EACpB,UAAU;AAAA,EACV,QAAQ;AAAA,EACR,OAAO;AAAA,EACP;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAAe;AACb,QAAM,UAAU;AAAA,IACd,YAAY,EAAE,KAAK,CAAC;AAAA,IACpB,cAAc,OAAO,EAAE,KAAK;AAAA,IAC5B;AAAA,EACF;AAEA,SACE,4CAAC,UAAK,aAAU,SAAQ,WAAW,UAAU,IAAK,GAAG,OAClD,UACH;AAEJ;;;AFlFA,oBAAoB;","names":[]}
|
package/dist/badge.d.cts
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Propiedades publicas del componente `Badge`.
|
|
6
|
+
*/
|
|
7
|
+
type BadgeProps = {
|
|
8
|
+
/**
|
|
9
|
+
* Variante visual del badge.
|
|
10
|
+
* @default 'default'
|
|
11
|
+
* @variation 'default' | 'destructive' | 'info' | 'success' | 'warning' | 'error'
|
|
12
|
+
* @see {@link BadgeVariants}
|
|
13
|
+
*/
|
|
14
|
+
variant?: BadgeVariants;
|
|
15
|
+
/**
|
|
16
|
+
* Nivel de color del badge.
|
|
17
|
+
* @default 'solid'
|
|
18
|
+
* @variation 'solid' | 'translucent'
|
|
19
|
+
* @see {@link BadgeColor}
|
|
20
|
+
*/
|
|
21
|
+
color?: BadgeColor;
|
|
22
|
+
/**
|
|
23
|
+
* Tamano del badge.
|
|
24
|
+
* @default 'md'
|
|
25
|
+
* @variation 'xs' | 'sm' | 'md'
|
|
26
|
+
* @see {@link BadgeSize}
|
|
27
|
+
*/
|
|
28
|
+
size?: BadgeSize;
|
|
29
|
+
} & React.HTMLAttributes<HTMLSpanElement>;
|
|
30
|
+
/** Variantes visuales disponibles para el badge. */
|
|
31
|
+
type BadgeVariants = 'default' | 'destructive' | 'info' | 'success' | 'warning' | 'error';
|
|
32
|
+
/** Niveles de color disponibles para el badge. */
|
|
33
|
+
type BadgeColor = 'solid' | 'translucent';
|
|
34
|
+
/** Tamanos disponibles para el badge. */
|
|
35
|
+
type BadgeSize = 'xs' | 'sm' | 'md';
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Componente Badge.
|
|
39
|
+
*
|
|
40
|
+
* Renderiza una etiqueta compacta con variantes semanticas y tamanos predefinidos.
|
|
41
|
+
*/
|
|
42
|
+
declare function Badge({ variant, color, size, className, children, ...props }: BadgeProps): react_jsx_runtime.JSX.Element;
|
|
43
|
+
|
|
44
|
+
export { Badge, type BadgeColor, type BadgeProps, type BadgeSize, type BadgeVariants };
|
package/dist/badge.d.ts
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Propiedades publicas del componente `Badge`.
|
|
6
|
+
*/
|
|
7
|
+
type BadgeProps = {
|
|
8
|
+
/**
|
|
9
|
+
* Variante visual del badge.
|
|
10
|
+
* @default 'default'
|
|
11
|
+
* @variation 'default' | 'destructive' | 'info' | 'success' | 'warning' | 'error'
|
|
12
|
+
* @see {@link BadgeVariants}
|
|
13
|
+
*/
|
|
14
|
+
variant?: BadgeVariants;
|
|
15
|
+
/**
|
|
16
|
+
* Nivel de color del badge.
|
|
17
|
+
* @default 'solid'
|
|
18
|
+
* @variation 'solid' | 'translucent'
|
|
19
|
+
* @see {@link BadgeColor}
|
|
20
|
+
*/
|
|
21
|
+
color?: BadgeColor;
|
|
22
|
+
/**
|
|
23
|
+
* Tamano del badge.
|
|
24
|
+
* @default 'md'
|
|
25
|
+
* @variation 'xs' | 'sm' | 'md'
|
|
26
|
+
* @see {@link BadgeSize}
|
|
27
|
+
*/
|
|
28
|
+
size?: BadgeSize;
|
|
29
|
+
} & React.HTMLAttributes<HTMLSpanElement>;
|
|
30
|
+
/** Variantes visuales disponibles para el badge. */
|
|
31
|
+
type BadgeVariants = 'default' | 'destructive' | 'info' | 'success' | 'warning' | 'error';
|
|
32
|
+
/** Niveles de color disponibles para el badge. */
|
|
33
|
+
type BadgeColor = 'solid' | 'translucent';
|
|
34
|
+
/** Tamanos disponibles para el badge. */
|
|
35
|
+
type BadgeSize = 'xs' | 'sm' | 'md';
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Componente Badge.
|
|
39
|
+
*
|
|
40
|
+
* Renderiza una etiqueta compacta con variantes semanticas y tamanos predefinidos.
|
|
41
|
+
*/
|
|
42
|
+
declare function Badge({ variant, color, size, className, children, ...props }: BadgeProps): react_jsx_runtime.JSX.Element;
|
|
43
|
+
|
|
44
|
+
export { Badge, type BadgeColor, type BadgeProps, type BadgeSize, type BadgeVariants };
|
package/dist/badge.js
ADDED
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
// src/lib/runtime-styles.ts
|
|
2
|
+
var STYLE_LINK_ID = "cuenti-dna-runtime-styles";
|
|
3
|
+
var runtimeStylesInitialized = false;
|
|
4
|
+
var canInjectStyles = () => typeof window !== "undefined" && typeof document !== "undefined";
|
|
5
|
+
var toFileHref = (filePath) => new URL(`file://${filePath.replace(/\\/g, "/")}`).href;
|
|
6
|
+
var resolveStylesHrefFromImportMeta = () => {
|
|
7
|
+
try {
|
|
8
|
+
return new URL("./styles.css", import.meta.url).href;
|
|
9
|
+
} catch {
|
|
10
|
+
return null;
|
|
11
|
+
}
|
|
12
|
+
};
|
|
13
|
+
var resolveStylesHrefFromCommonJsFilename = () => {
|
|
14
|
+
if (typeof __filename !== "string") {
|
|
15
|
+
return null;
|
|
16
|
+
}
|
|
17
|
+
try {
|
|
18
|
+
return new URL("./styles.css", toFileHref(__filename)).href;
|
|
19
|
+
} catch {
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
var resolveStylesHref = () => resolveStylesHrefFromImportMeta() ?? resolveStylesHrefFromCommonJsFilename();
|
|
24
|
+
var injectStylesheet = (href) => {
|
|
25
|
+
if (document.getElementById(STYLE_LINK_ID)) {
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
const link = document.createElement("link");
|
|
29
|
+
link.id = STYLE_LINK_ID;
|
|
30
|
+
link.rel = "stylesheet";
|
|
31
|
+
link.href = href;
|
|
32
|
+
link.setAttribute("data-cuenti-dna", "runtime");
|
|
33
|
+
document.head.appendChild(link);
|
|
34
|
+
};
|
|
35
|
+
var ensureRuntimeStyles = () => {
|
|
36
|
+
if (runtimeStylesInitialized) {
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
runtimeStylesInitialized = true;
|
|
40
|
+
if (!canInjectStyles()) {
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
const href = resolveStylesHref();
|
|
44
|
+
if (!href) {
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
injectStylesheet(href);
|
|
48
|
+
};
|
|
49
|
+
ensureRuntimeStyles();
|
|
50
|
+
|
|
51
|
+
// src/components/surfaces/badge.tsx
|
|
52
|
+
import { cva } from "class-variance-authority";
|
|
53
|
+
|
|
54
|
+
// src/utils/cn.ts
|
|
55
|
+
import { clsx } from "clsx";
|
|
56
|
+
import { twMerge } from "tailwind-merge";
|
|
57
|
+
function cn(...inputs) {
|
|
58
|
+
return twMerge(clsx(inputs));
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
// src/components/surfaces/badge.tsx
|
|
62
|
+
import { jsx } from "react/jsx-runtime";
|
|
63
|
+
var badgeVariants = {
|
|
64
|
+
default: {
|
|
65
|
+
solid: "border-none bg-neutral-700 text-white",
|
|
66
|
+
translucent: "border-2 border-neutral-600 bg-neutral-200 text-neutral-700"
|
|
67
|
+
},
|
|
68
|
+
destructive: {
|
|
69
|
+
solid: "bg-destructive text-destructive-foreground",
|
|
70
|
+
translucent: "border-2 border-destructive-400 bg-destructive-25 text-destructive"
|
|
71
|
+
},
|
|
72
|
+
info: {
|
|
73
|
+
solid: "bg-info text-info-foreground",
|
|
74
|
+
translucent: "border-2 border-info bg-info-25 text-info"
|
|
75
|
+
},
|
|
76
|
+
success: {
|
|
77
|
+
solid: "bg-success text-success-foreground",
|
|
78
|
+
translucent: "border-2 border-success bg-success-25 text-success"
|
|
79
|
+
},
|
|
80
|
+
warning: {
|
|
81
|
+
solid: "bg-warning text-warning-foreground",
|
|
82
|
+
translucent: "border-2 border-warning bg-warning-50 text-warning"
|
|
83
|
+
},
|
|
84
|
+
error: {
|
|
85
|
+
solid: "bg-destructive text-destructive-foreground",
|
|
86
|
+
translucent: "border-2 border-destructive bg-destructive-50 text-destructive"
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
var badgeSizes = {
|
|
90
|
+
xs: "h-6 px-3 py-1 rounded-[8px] gap-1 text-sm",
|
|
91
|
+
sm: "h-10 px-5 py-2 rounded-[14px] gap-1.5",
|
|
92
|
+
md: "h-12 py-3 px-5 gap-1.5 rounded-[14px]"
|
|
93
|
+
};
|
|
94
|
+
var baseStyles = "font-semibold inline-flex items-center justify-center whitespace-nowrap font-medium leading-none transition-colors duration-200 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-[1em]";
|
|
95
|
+
var badgeStyles = cva(baseStyles, {
|
|
96
|
+
variants: {
|
|
97
|
+
size: badgeSizes
|
|
98
|
+
},
|
|
99
|
+
defaultVariants: {
|
|
100
|
+
size: "md"
|
|
101
|
+
}
|
|
102
|
+
});
|
|
103
|
+
function Badge({
|
|
104
|
+
variant = "default",
|
|
105
|
+
color = "solid",
|
|
106
|
+
size = "md",
|
|
107
|
+
className,
|
|
108
|
+
children,
|
|
109
|
+
...props
|
|
110
|
+
}) {
|
|
111
|
+
const classes = cn(
|
|
112
|
+
badgeStyles({ size }),
|
|
113
|
+
badgeVariants[variant][color],
|
|
114
|
+
className
|
|
115
|
+
);
|
|
116
|
+
return /* @__PURE__ */ jsx("span", { "data-slot": "badge", className: classes + "", ...props, children });
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
// src/lib/badge.ts
|
|
120
|
+
ensureRuntimeStyles();
|
|
121
|
+
export {
|
|
122
|
+
Badge
|
|
123
|
+
};
|
|
124
|
+
//# sourceMappingURL=badge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/lib/runtime-styles.ts","../src/components/surfaces/badge.tsx","../src/utils/cn.ts","../src/lib/badge.ts"],"sourcesContent":["const STYLE_LINK_ID = 'cuenti-dna-runtime-styles'\nlet runtimeStylesInitialized = false\n\ndeclare const __filename: string | undefined\n\nconst canInjectStyles = () =>\n typeof window !== 'undefined' && typeof document !== 'undefined'\n\nconst toFileHref = (filePath: string) =>\n new URL(`file://${filePath.replace(/\\\\/g, '/')}`).href\n\nconst resolveStylesHrefFromImportMeta = () => {\n try {\n return new URL('./styles.css', import.meta.url).href\n } catch {\n return null\n }\n}\n\nconst resolveStylesHrefFromCommonJsFilename = () => {\n if (typeof __filename !== 'string') {\n return null\n }\n\n try {\n return new URL('./styles.css', toFileHref(__filename)).href\n } catch {\n return null\n }\n}\n\nconst resolveStylesHref = () =>\n resolveStylesHrefFromImportMeta() ?? resolveStylesHrefFromCommonJsFilename()\n\nconst injectStylesheet = (href: string) => {\n if (document.getElementById(STYLE_LINK_ID)) {\n return\n }\n\n const link = document.createElement('link')\n link.id = STYLE_LINK_ID\n link.rel = 'stylesheet'\n link.href = href\n link.setAttribute('data-cuenti-dna', 'runtime')\n document.head.appendChild(link)\n}\n\nexport const ensureRuntimeStyles = () => {\n if (runtimeStylesInitialized) {\n return\n }\n\n runtimeStylesInitialized = true\n\n if (!canInjectStyles()) {\n return\n }\n\n const href = resolveStylesHref()\n\n if (!href) {\n return\n }\n\n injectStylesheet(href)\n}\n\nensureRuntimeStyles()\n","import { cva } from 'class-variance-authority'\r\nimport type {\r\n BadgeColor,\r\n BadgeProps,\r\n BadgeSize,\r\n BadgeVariants\r\n} from '@/types/atoms/surfaces/badge'\r\nimport { cn } from '@/utils/cn'\r\n\r\n/**\r\n * Variantes visuales disponibles para el componente Badge.\r\n */\r\nexport const badgeVariants = {\r\n default: {\r\n solid: 'border-none bg-neutral-700 text-white',\r\n translucent: 'border-2 border-neutral-600 bg-neutral-200 text-neutral-700'\r\n },\r\n destructive: {\r\n solid: 'bg-destructive text-destructive-foreground',\r\n translucent:\r\n 'border-2 border-destructive-400 bg-destructive-25 text-destructive'\r\n },\r\n info: {\r\n solid: 'bg-info text-info-foreground',\r\n translucent: 'border-2 border-info bg-info-25 text-info'\r\n },\r\n success: {\r\n solid: 'bg-success text-success-foreground',\r\n translucent: 'border-2 border-success bg-success-25 text-success'\r\n },\r\n warning: {\r\n solid: 'bg-warning text-warning-foreground',\r\n translucent: 'border-2 border-warning bg-warning-50 text-warning'\r\n },\r\n error: {\r\n solid: 'bg-destructive text-destructive-foreground',\r\n translucent:\r\n 'border-2 border-destructive bg-destructive-50 text-destructive'\r\n }\r\n} satisfies Record<BadgeVariants, Record<BadgeColor, string>>\r\n\r\n/**\r\n * Tamanos visuales disponibles para el componente Badge.\r\n */\r\nexport const badgeSizes = {\r\n xs: 'h-6 px-3 py-1 rounded-[8px] gap-1 text-sm',\r\n sm: 'h-10 px-5 py-2 rounded-[14px] gap-1.5',\r\n md: 'h-12 py-3 px-5 gap-1.5 rounded-[14px]'\r\n} satisfies Record<BadgeSize, string>\r\n\r\nconst baseStyles =\r\n \"font-semibold inline-flex items-center justify-center whitespace-nowrap font-medium leading-none transition-colors duration-200 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-[1em]\"\r\n\r\nconst badgeStyles = cva(baseStyles, {\r\n variants: {\r\n size: badgeSizes\r\n },\r\n defaultVariants: {\r\n size: 'md'\r\n }\r\n} as const)\r\n\r\n/**\r\n * Componente Badge.\r\n *\r\n * Renderiza una etiqueta compacta con variantes semanticas y tamanos predefinidos.\r\n */\r\nexport function Badge({\r\n variant = 'default',\r\n color = 'solid',\r\n size = 'md',\r\n className,\r\n children,\r\n ...props\r\n}: BadgeProps) {\r\n const classes = cn(\r\n badgeStyles({ size }),\r\n badgeVariants[variant][color],\r\n className\r\n )\r\n\r\n return (\r\n <span data-slot=\"badge\" className={classes + ''} {...props}>\r\n {children}\r\n </span>\r\n )\r\n}\r\n","import type { ClassValue } from 'clsx'\nimport { clsx } from 'clsx'\nimport { twMerge } from 'tailwind-merge'\n\n/**\n * Combina clases condicionales y resuelve conflictos de Tailwind.\n *\n * Usa `clsx` para componer entradas heterogeneas y `tailwind-merge`\n * para priorizar la ultima clase utilitaria en conflicto.\n */\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs))\n}\n","/* biome-ignore-all lint/performance/noBarrelFile: public package subpath entry point */\r\n\r\nimport { ensureRuntimeStyles } from '@/lib/runtime-styles'\r\n\r\nensureRuntimeStyles()\r\n\r\nexport { Badge } from '@/components/surfaces/badge'\r\nexport type {\r\n BadgeColor,\r\n BadgeProps,\r\n BadgeSize,\r\n BadgeVariants\r\n} from '@/types/atoms/surfaces/badge'\r\n"],"mappings":";AAAA,IAAM,gBAAgB;AACtB,IAAI,2BAA2B;AAI/B,IAAM,kBAAkB,MACtB,OAAO,WAAW,eAAe,OAAO,aAAa;AAEvD,IAAM,aAAa,CAAC,aAClB,IAAI,IAAI,UAAU,SAAS,QAAQ,OAAO,GAAG,CAAC,EAAE,EAAE;AAEpD,IAAM,kCAAkC,MAAM;AAC5C,MAAI;AACF,WAAO,IAAI,IAAI,gBAAgB,YAAY,GAAG,EAAE;AAAA,EAClD,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,IAAM,wCAAwC,MAAM;AAClD,MAAI,OAAO,eAAe,UAAU;AAClC,WAAO;AAAA,EACT;AAEA,MAAI;AACF,WAAO,IAAI,IAAI,gBAAgB,WAAW,UAAU,CAAC,EAAE;AAAA,EACzD,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,IAAM,oBAAoB,MACxB,gCAAgC,KAAK,sCAAsC;AAE7E,IAAM,mBAAmB,CAAC,SAAiB;AACzC,MAAI,SAAS,eAAe,aAAa,GAAG;AAC1C;AAAA,EACF;AAEA,QAAM,OAAO,SAAS,cAAc,MAAM;AAC1C,OAAK,KAAK;AACV,OAAK,MAAM;AACX,OAAK,OAAO;AACZ,OAAK,aAAa,mBAAmB,SAAS;AAC9C,WAAS,KAAK,YAAY,IAAI;AAChC;AAEO,IAAM,sBAAsB,MAAM;AACvC,MAAI,0BAA0B;AAC5B;AAAA,EACF;AAEA,6BAA2B;AAE3B,MAAI,CAAC,gBAAgB,GAAG;AACtB;AAAA,EACF;AAEA,QAAM,OAAO,kBAAkB;AAE/B,MAAI,CAAC,MAAM;AACT;AAAA,EACF;AAEA,mBAAiB,IAAI;AACvB;AAEA,oBAAoB;;;ACnEpB,SAAS,WAAW;;;ACCpB,SAAS,YAAY;AACrB,SAAS,eAAe;AAQjB,SAAS,MAAM,QAAsB;AAC1C,SAAO,QAAQ,KAAK,MAAM,CAAC;AAC7B;;;ADsEI;AAtEG,IAAM,gBAAgB;AAAA,EAC3B,SAAS;AAAA,IACP,OAAO;AAAA,IACP,aAAa;AAAA,EACf;AAAA,EACA,aAAa;AAAA,IACX,OAAO;AAAA,IACP,aACE;AAAA,EACJ;AAAA,EACA,MAAM;AAAA,IACJ,OAAO;AAAA,IACP,aAAa;AAAA,EACf;AAAA,EACA,SAAS;AAAA,IACP,OAAO;AAAA,IACP,aAAa;AAAA,EACf;AAAA,EACA,SAAS;AAAA,IACP,OAAO;AAAA,IACP,aAAa;AAAA,EACf;AAAA,EACA,OAAO;AAAA,IACL,OAAO;AAAA,IACP,aACE;AAAA,EACJ;AACF;AAKO,IAAM,aAAa;AAAA,EACxB,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN;AAEA,IAAM,aACJ;AAEF,IAAM,cAAc,IAAI,YAAY;AAAA,EAClC,UAAU;AAAA,IACR,MAAM;AAAA,EACR;AAAA,EACA,iBAAiB;AAAA,IACf,MAAM;AAAA,EACR;AACF,CAAU;AAOH,SAAS,MAAM;AAAA,EACpB,UAAU;AAAA,EACV,QAAQ;AAAA,EACR,OAAO;AAAA,EACP;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAAe;AACb,QAAM,UAAU;AAAA,IACd,YAAY,EAAE,KAAK,CAAC;AAAA,IACpB,cAAc,OAAO,EAAE,KAAK;AAAA,IAC5B;AAAA,EACF;AAEA,SACE,oBAAC,UAAK,aAAU,SAAQ,WAAW,UAAU,IAAK,GAAG,OAClD,UACH;AAEJ;;;AElFA,oBAAoB;","names":[]}
|