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.
Files changed (128) hide show
  1. package/README.md +49 -54
  2. package/dist/badge.cjs +152 -0
  3. package/dist/badge.cjs.map +1 -0
  4. package/dist/badge.d.cts +44 -0
  5. package/dist/badge.d.ts +44 -0
  6. package/dist/badge.js +124 -0
  7. package/dist/badge.js.map +1 -0
  8. package/dist/button.cjs +140 -0
  9. package/dist/button.cjs.map +1 -0
  10. package/dist/button.d.cts +37 -0
  11. package/dist/button.d.ts +37 -0
  12. package/dist/button.js +112 -0
  13. package/dist/button.js.map +1 -0
  14. package/dist/card.cjs +178 -0
  15. package/dist/card.cjs.map +1 -0
  16. package/dist/card.d.cts +62 -0
  17. package/dist/card.d.ts +62 -0
  18. package/dist/card.js +144 -0
  19. package/dist/card.js.map +1 -0
  20. package/dist/checkbox.cjs +266 -0
  21. package/dist/checkbox.cjs.map +1 -0
  22. package/dist/checkbox.d.cts +59 -0
  23. package/dist/checkbox.d.ts +59 -0
  24. package/dist/checkbox.js +238 -0
  25. package/dist/checkbox.js.map +1 -0
  26. package/dist/cn.cjs +91 -0
  27. package/dist/cn.cjs.map +1 -0
  28. package/dist/cn.d.cts +11 -0
  29. package/dist/cn.d.ts +11 -0
  30. package/dist/cn.js +63 -0
  31. package/dist/cn.js.map +1 -0
  32. package/dist/form.cjs +90 -0
  33. package/dist/form.cjs.map +1 -0
  34. package/dist/form.d.cts +6 -0
  35. package/dist/form.d.ts +6 -0
  36. package/dist/form.js +62 -0
  37. package/dist/form.js.map +1 -0
  38. package/dist/helper-text.cjs +272 -0
  39. package/dist/helper-text.cjs.map +1 -0
  40. package/dist/helper-text.d.cts +20 -0
  41. package/dist/helper-text.d.ts +20 -0
  42. package/dist/helper-text.js +243 -0
  43. package/dist/helper-text.js.map +1 -0
  44. package/dist/icons.cjs +161 -0
  45. package/dist/icons.cjs.map +1 -0
  46. package/dist/icons.d.cts +18 -0
  47. package/dist/icons.d.ts +18 -0
  48. package/dist/icons.js +131 -0
  49. package/dist/icons.js.map +1 -0
  50. package/dist/input.cjs +743 -0
  51. package/dist/input.cjs.map +1 -0
  52. package/dist/input.d.cts +118 -0
  53. package/dist/input.d.ts +118 -0
  54. package/dist/input.js +711 -0
  55. package/dist/input.js.map +1 -0
  56. package/dist/label.cjs +625 -0
  57. package/dist/label.cjs.map +1 -0
  58. package/dist/label.d.cts +13 -0
  59. package/dist/label.d.ts +13 -0
  60. package/dist/label.js +597 -0
  61. package/dist/label.js.map +1 -0
  62. package/dist/radio-CYS6kOi5.d.cts +60 -0
  63. package/dist/radio-CYS6kOi5.d.ts +60 -0
  64. package/dist/radio.cjs +372 -0
  65. package/dist/radio.cjs.map +1 -0
  66. package/dist/radio.d.cts +23 -0
  67. package/dist/radio.d.ts +23 -0
  68. package/dist/radio.js +342 -0
  69. package/dist/radio.js.map +1 -0
  70. package/dist/scroll-area.cjs +214 -0
  71. package/dist/scroll-area.cjs.map +1 -0
  72. package/dist/scroll-area.d.cts +16 -0
  73. package/dist/scroll-area.d.ts +16 -0
  74. package/dist/scroll-area.js +186 -0
  75. package/dist/scroll-area.js.map +1 -0
  76. package/dist/select.cjs +1725 -0
  77. package/dist/select.cjs.map +1 -0
  78. package/dist/select.d.cts +141 -0
  79. package/dist/select.d.ts +141 -0
  80. package/dist/select.js +1691 -0
  81. package/dist/select.js.map +1 -0
  82. package/dist/styles.css +744 -58
  83. package/dist/switch.cjs +162 -0
  84. package/dist/switch.cjs.map +1 -0
  85. package/dist/switch.d.cts +45 -0
  86. package/dist/switch.d.ts +45 -0
  87. package/dist/switch.js +134 -0
  88. package/dist/switch.js.map +1 -0
  89. package/dist/tooltip.cjs +588 -0
  90. package/dist/tooltip.cjs.map +1 -0
  91. package/dist/tooltip.d.cts +76 -0
  92. package/dist/tooltip.d.ts +76 -0
  93. package/dist/tooltip.js +557 -0
  94. package/dist/tooltip.js.map +1 -0
  95. package/dist/use-formatted-numeric-input.cjs +164 -0
  96. package/dist/use-formatted-numeric-input.cjs.map +1 -0
  97. package/dist/use-formatted-numeric-input.d.cts +14 -0
  98. package/dist/use-formatted-numeric-input.d.ts +14 -0
  99. package/dist/use-formatted-numeric-input.js +136 -0
  100. package/dist/use-formatted-numeric-input.js.map +1 -0
  101. package/dist/use-formatted-numeric-inputs-EV4gGOur.d.cts +39 -0
  102. package/dist/use-formatted-numeric-inputs-EV4gGOur.d.ts +39 -0
  103. package/dist/use-radio-group.cjs +128 -0
  104. package/dist/use-radio-group.cjs.map +1 -0
  105. package/dist/use-radio-group.d.cts +18 -0
  106. package/dist/use-radio-group.d.ts +18 -0
  107. package/dist/use-radio-group.js +100 -0
  108. package/dist/use-radio-group.js.map +1 -0
  109. package/dist/use-radio.cjs +143 -0
  110. package/dist/use-radio.cjs.map +1 -0
  111. package/dist/use-radio.d.cts +22 -0
  112. package/dist/use-radio.d.ts +22 -0
  113. package/dist/use-radio.js +115 -0
  114. package/dist/use-radio.js.map +1 -0
  115. package/package.json +106 -19
  116. package/scripts/cli/args.cjs +71 -0
  117. package/scripts/cli/constants.cjs +53 -0
  118. package/scripts/cli/core.cjs +66 -0
  119. package/scripts/cli/css.cjs +224 -0
  120. package/scripts/cli/workflows.cjs +270 -0
  121. package/scripts/cli.cjs +9 -556
  122. package/src/styles/globals.css +12 -5
  123. package/dist/index.cjs +0 -1346
  124. package/dist/index.cjs.map +0 -1
  125. package/dist/index.d.cts +0 -491
  126. package/dist/index.d.ts +0 -491
  127. package/dist/index.js +0 -1295
  128. 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 interactiva (estilo shadcn)
26
+ ### Inicializacion de estilos
27
27
 
28
- Despues de instalar, ejecuta el asistente interactivo:
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
- Importa los componentes desde el paquete:
81
+ Import recomendado por subpath:
68
82
 
69
83
  ```tsx
70
- import { Input, Button } from 'cuenti-dna'
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
- Importa los estilos globales una sola vez en tu app (por ejemplo en el entrypoint):
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":[]}
@@ -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 };
@@ -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":[]}