katanakit-js 6.4.3 → 6.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (93) hide show
  1. package/README.md +4 -3
  2. package/dist/adapters/express/server.d.ts +133 -1
  3. package/dist/adapters/express/server.d.ts.map +1 -1
  4. package/dist/adapters/express/server.js +199 -97
  5. package/dist/adapters/express/server.js.map +1 -1
  6. package/dist/adapters/insforge/insforge.service.d.ts +139 -4
  7. package/dist/adapters/insforge/insforge.service.d.ts.map +1 -1
  8. package/dist/adapters/insforge/insforge.service.js +383 -213
  9. package/dist/adapters/insforge/insforge.service.js.map +1 -1
  10. package/dist/adapters/notion/notion.service.d.ts +130 -144
  11. package/dist/adapters/notion/notion.service.d.ts.map +1 -1
  12. package/dist/adapters/notion/notion.service.js +330 -341
  13. package/dist/adapters/notion/notion.service.js.map +1 -1
  14. package/dist/adapters/telegram/telegram.service.d.ts +82 -13
  15. package/dist/adapters/telegram/telegram.service.d.ts.map +1 -1
  16. package/dist/adapters/telegram/telegram.service.js +133 -55
  17. package/dist/adapters/telegram/telegram.service.js.map +1 -1
  18. package/dist/adapters/wordpress/wordpress.service.d.ts +181 -110
  19. package/dist/adapters/wordpress/wordpress.service.d.ts.map +1 -1
  20. package/dist/adapters/wordpress/wordpress.service.js +556 -465
  21. package/dist/adapters/wordpress/wordpress.service.js.map +1 -1
  22. package/dist/core/services/access.service.d.ts +167 -4
  23. package/dist/core/services/access.service.d.ts.map +1 -1
  24. package/dist/core/services/access.service.js +241 -31
  25. package/dist/core/services/access.service.js.map +1 -1
  26. package/dist/core/services/agent.service.d.ts +182 -27
  27. package/dist/core/services/agent.service.d.ts.map +1 -1
  28. package/dist/core/services/agent.service.js +296 -164
  29. package/dist/core/services/agent.service.js.map +1 -1
  30. package/dist/core/services/assistant.service.d.ts +96 -5
  31. package/dist/core/services/assistant.service.d.ts.map +1 -1
  32. package/dist/core/services/assistant.service.js +171 -66
  33. package/dist/core/services/assistant.service.js.map +1 -1
  34. package/dist/core/services/dates.service.d.ts +183 -11
  35. package/dist/core/services/dates.service.d.ts.map +1 -1
  36. package/dist/core/services/dates.service.js +256 -57
  37. package/dist/core/services/dates.service.js.map +1 -1
  38. package/dist/core/services/http.service.d.ts +172 -133
  39. package/dist/core/services/http.service.d.ts.map +1 -1
  40. package/dist/core/services/http.service.js +381 -310
  41. package/dist/core/services/http.service.js.map +1 -1
  42. package/dist/core/services/logger.service.d.ts +96 -34
  43. package/dist/core/services/logger.service.d.ts.map +1 -1
  44. package/dist/core/services/logger.service.js +128 -41
  45. package/dist/core/services/logger.service.js.map +1 -1
  46. package/dist/core/services/query.service.d.ts +101 -0
  47. package/dist/core/services/query.service.d.ts.map +1 -1
  48. package/dist/core/services/query.service.js +131 -14
  49. package/dist/core/services/query.service.js.map +1 -1
  50. package/dist/core/services/utils.service.d.ts +286 -131
  51. package/dist/core/services/utils.service.d.ts.map +1 -1
  52. package/dist/core/services/utils.service.js +417 -227
  53. package/dist/core/services/utils.service.js.map +1 -1
  54. package/dist/core/services/validation.service.d.ts +48 -3
  55. package/dist/core/services/validation.service.d.ts.map +1 -1
  56. package/dist/core/services/validation.service.js +75 -23
  57. package/dist/core/services/validation.service.js.map +1 -1
  58. package/dist/infrastructure/decorators/cache.decorator.d.ts +53 -0
  59. package/dist/infrastructure/decorators/cache.decorator.d.ts.map +1 -0
  60. package/dist/infrastructure/decorators/cache.decorator.js +47 -0
  61. package/dist/infrastructure/decorators/cache.decorator.js.map +1 -0
  62. package/dist/infrastructure/decorators/index.d.ts +4 -0
  63. package/dist/infrastructure/decorators/index.d.ts.map +1 -0
  64. package/dist/infrastructure/decorators/index.js +4 -0
  65. package/dist/infrastructure/decorators/index.js.map +1 -0
  66. package/dist/infrastructure/decorators/logger.decorator.d.ts +38 -0
  67. package/dist/infrastructure/decorators/logger.decorator.d.ts.map +1 -0
  68. package/dist/infrastructure/decorators/logger.decorator.js +66 -0
  69. package/dist/infrastructure/decorators/logger.decorator.js.map +1 -0
  70. package/dist/infrastructure/decorators/retry.decorator.d.ts +37 -0
  71. package/dist/infrastructure/decorators/retry.decorator.d.ts.map +1 -0
  72. package/dist/infrastructure/decorators/retry.decorator.js +54 -0
  73. package/dist/infrastructure/decorators/retry.decorator.js.map +1 -0
  74. package/dist/infrastructure/dom/dom.service.d.ts +11 -5
  75. package/dist/infrastructure/dom/dom.service.d.ts.map +1 -1
  76. package/dist/infrastructure/dom/dom.service.js +20 -6
  77. package/dist/infrastructure/dom/dom.service.js.map +1 -1
  78. package/dist/infrastructure/index.d.ts +1 -0
  79. package/dist/infrastructure/index.d.ts.map +1 -1
  80. package/dist/infrastructure/index.js +1 -0
  81. package/dist/infrastructure/index.js.map +1 -1
  82. package/dist/prisma/schema.json +17 -13
  83. package/dist/styles.css +2 -0
  84. package/package.json +32 -38
  85. package/scss/_flags.scss +179 -0
  86. package/scss/_functions.scss +168 -0
  87. package/scss/_mixins.scss +658 -0
  88. package/scss/_reset.scss +275 -0
  89. package/scss/_utilities.scss +449 -0
  90. package/scss/_variables.scss +539 -0
  91. package/scss/components/_index.scss +50 -0
  92. package/scss/demo.scss +12 -0
  93. package/scss/main.scss +56 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "katanakit-js",
3
- "version": "6.4.3",
3
+ "version": "6.7.1",
4
4
  "description": "KatanaKit — a sharp, framework-agnostic TypeScript service toolkit organized with hexagonal architecture.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -112,12 +112,19 @@
112
112
  "import": "./dist/schemas/index.js",
113
113
  "default": "./dist/schemas/index.js"
114
114
  },
115
+ "./styles.css": "./dist/styles.css",
116
+ "./dist/styles.css": "./dist/styles.css",
115
117
  "./package.json": "./package.json"
116
118
  },
117
119
  "files": [
118
- "dist"
120
+ "dist",
121
+ "scss"
122
+ ],
123
+ "sass": "scss/main.scss",
124
+ "style": "./dist/styles.css",
125
+ "sideEffects": [
126
+ "*.css"
119
127
  ],
120
- "sideEffects": false,
121
128
  "engines": {
122
129
  "node": ">=22.18.0"
123
130
  },
@@ -130,31 +137,17 @@
130
137
  "scripts": {
131
138
  "prepare": "husky",
132
139
  "predev": "bunx lint-staged",
133
- "dev": "concurrently --names api,assistant,tg,wa \"bun run dev:api\" \"bun run assistant:dev\" \"bun run telegram:dev\" \"bun run whatsapp:dev\"",
134
- "postdev": "bun run lint",
135
- "dev:api": "tsx src/adapters/express/main.ts",
140
+ "dev": "tsx src/adapters/express/main.ts",
136
141
  "bun:dev": "bun run src/adapters/bun/main.ts",
137
- "assistant:dev": "tsx src/adapters/assistant/main.ts",
138
- "telegram:dev": "tsx src/adapters/telegram/main.ts",
139
- "whatsapp:dev": "tsx src/adapters/whatsapp/main.ts",
140
- "clean": "node -e \"require('node:fs').rmSync('dist',{recursive:true,force:true})\"",
141
- "lint": "eslint ./src packages/ui/src",
142
- "lint:fix": "eslint --fix ./src packages/ui/src",
143
- "lint:staged": "lint-staged",
144
142
  "check": "eslint ./src packages/ui/src && tsc6 --noEmit && tsc6 -p packages/ui/tsconfig.json --noEmit && vitest run",
145
- "examples:check": "tsc6 -p tsconfig.examples.json && tsc6 -p tsconfig.examples.solid.json",
146
143
  "fix": "eslint --fix ./src packages/ui/src && tsc6 --noEmit && vitest run",
147
- "prebuild": "bunx lint-staged",
148
- "build": "bun run clean && bun run check && tsc6 -p tsconfig.json && node scripts/generate-release-notes.mjs --sync-versions",
149
- "postbuild": "bun run examples:check",
150
- "release": "bun run build && node scripts/generate-release-notes.mjs \"v$(node -p \"require('./package.json').version\")\" --write && npm publish --access public",
144
+ "build": "node -e \"require('node:fs').rmSync('dist',{recursive:true,force:true})\" && bun run check && tsc6 -p tsconfig.json && bun run ui:build && node -e \"require('node:fs').copyFileSync('packages/ui/dist/styles.css','dist/styles.css')\" && node scripts/generate-release-notes.mjs --sync-versions && bun run examples:check",
145
+ "release": "bun run build && node scripts/generate-release-notes.mjs \"v$(node -p \"require('./package.json').version\")\" --write && (npm whoami >/dev/null 2>&1 || npm login) && npm publish --access public",
151
146
  "ui:build": "bun run --filter @katanakit/ui build",
152
- "docs:clean": "node scripts/docs.mjs clean",
153
- "docs:prepare": "node scripts/docs-prepare.mjs",
147
+ "examples:check": "tsc6 -p tsconfig.examples.json && tsc6 -p tsconfig.examples.solid.json",
154
148
  "docs:dev": "node scripts/docs.mjs dev",
155
- "predocs": "bunx lint-staged",
156
149
  "docs": "node scripts/docs.mjs build",
157
- "postdocs": "node -e \"require('node:fs').accessSync('docs/.vitepress/dist/index.html')\"",
150
+ "docs:clean": "node scripts/docs.mjs clean",
158
151
  "docs:preview": "vitepress preview docs",
159
152
  "docs:gh": "node scripts/docs.mjs gh",
160
153
  "cf:deploy": "bun run build && bun run docs && wrangler pages deploy docs/.vitepress/dist --project-name katanakit-docs --branch main"
@@ -196,8 +189,8 @@
196
189
  "jsdelivr": "./dist/index.js",
197
190
  "dependencies": {
198
191
  "@js-temporal/polyfill": "0.5.1",
199
- "@prisma/orm-postgres": "8.0.0-rc.8",
200
- "@tanstack/query-core": "5.103.2",
192
+ "@prisma/orm-postgres": "8.0.0-rc.14",
193
+ "@tanstack/query-core": "5.104.1",
201
194
  "express-rate-limit": "8.7.0",
202
195
  "zod": "^4.6.5"
203
196
  },
@@ -206,7 +199,7 @@
206
199
  "@faker-js/faker": ">=9.0.0",
207
200
  "@insforge/sdk": ">=1.5.0",
208
201
  "cors": ">=2.8.0",
209
- "dotenv": ">=16.0.0",
202
+ "dotenv": ">=18.0.5",
210
203
  "express": ">=5.0.0",
211
204
  "react": ">=18.0.0",
212
205
  "react-dom": ">=18.0.0",
@@ -258,34 +251,35 @@
258
251
  }
259
252
  },
260
253
  "devDependencies": {
261
- "@angular/core": "^22.1.7",
254
+ "@angular/core": "^22.2.1",
262
255
  "@eslint/js": "^10.0.1",
263
256
  "@faker-js/faker": "^10.6.0",
264
257
  "@insforge/sdk": "^1.5.2",
258
+ "@prisma/cli-engine": "0.6.2",
265
259
  "@tailwindcss/vite": "^4.3.3",
266
260
  "@testing-library/react": "^16.3.3",
267
261
  "@types/cors": "2.8.19",
268
262
  "@types/express": "5.0.6",
269
- "@types/node": "26.6.2",
263
+ "@types/node": "26.6.4",
270
264
  "@types/react": "^19.3.0",
271
265
  "@types/react-dom": "^19.3.0",
272
266
  "better-auth": "^1.7.7",
273
267
  "bun-types": "^1.4.2",
274
268
  "concurrently": "^10.0.5",
275
269
  "cors": "2.8.6",
276
- "dotenv": "18.0.1",
277
- "eslint": "^10.11.0",
270
+ "dotenv": "18.0.5",
271
+ "eslint": "^10.12.0",
278
272
  "eslint-config-prettier": "^10.1.8",
279
273
  "eslint-plugin-prettier": "^5.5.6",
280
274
  "eslint-plugin-simple-import-sort": "^14.0.0",
281
275
  "express": "5.2.1",
282
- "globals": "^17.12.0",
276
+ "globals": "^17.13.0",
283
277
  "husky": "^9.1.7",
284
- "jsdom": "^30.1.0",
278
+ "jsdom": "^30.1.2",
285
279
  "lint-staged": "^17.6.0",
286
280
  "photoswipe": "^5.4.4",
287
- "prettier": "^3.9.8",
288
- "prisma": "8.0.0-rc.13",
281
+ "prettier": "^3.9.9",
282
+ "prisma": "8.0.0-rc.19",
289
283
  "react": "^19.3.0",
290
284
  "react-dom": "^19.3.0",
291
285
  "rxjs": "^7.8.2",
@@ -295,15 +289,15 @@
295
289
  "tslib": "^2.8.1",
296
290
  "tsx": "4.23.15",
297
291
  "typedoc": "^0.28.20",
298
- "typedoc-plugin-markdown": "^4.13.0",
292
+ "typedoc-plugin-markdown": "^4.13.1",
299
293
  "typedoc-vitepress-theme": "^1.1.4",
300
294
  "typescript": "npm:@typescript/typescript6@6.0.2",
301
- "typescript-eslint": "^8.70.0",
302
- "vite": "8.3.0",
295
+ "typescript-eslint": "^8.71.0",
296
+ "vite": "8.3.2",
303
297
  "vitepress": "^1.6.4",
304
- "vitest": "5.0.1",
298
+ "vitest": "5.0.3",
305
299
  "vue": "3.5.43",
306
- "wrangler": "4.141.0",
300
+ "wrangler": "4.147.0",
307
301
  "zone.js": "^0.16.3"
308
302
  }
309
303
  }
@@ -0,0 +1,179 @@
1
+ :root {
2
+ /* ====================================================================
3
+ * FAMILIA: ROJO (Pantone 485 / Carmesí) - Base: Aragón, Cataluña, etc.
4
+ * ==================================================================== */
5
+ --color-aragon-rojo-100: hsla(3, 100%, 97%, 1);
6
+ --color-aragon-rojo-200: hsla(3, 100%, 94%, 1);
7
+ --color-aragon-rojo-300: hsla(3, 100%, 86%, 1);
8
+ --color-aragon-rojo-400: hsla(3, 90%, 70%, 1);
9
+ --color-aragon-rojo-500: hsla(3, 85%, 60%, 1); /* Tono base claro */
10
+ --color-aragon-rojo-600: hsla(3, 79%, 48%, 1); /* Tono original de la bandera */
11
+ --color-aragon-rojo-700: hsla(3, 75%, 40%, 1);
12
+ --color-aragon-rojo-800: hsla(3, 70%, 32%, 1);
13
+ --color-aragon-rojo-900: hsla(3, 65%, 24%, 1);
14
+
15
+ /* (Aplica el mismo escalado para Cataluña, Baleares, C. Valenciana, Murcia, Navarra, La Rioja, País Vasco, Cantabria, CLM) */
16
+ --color-catalunya-rojo-100: hsla(3, 100%, 97%, 1);
17
+ --color-catalunya-rojo-200: hsla(3, 100%, 94%, 1);
18
+ --color-catalunya-rojo-300: hsla(3, 100%, 86%, 1);
19
+ --color-catalunya-rojo-400: hsla(3, 90%, 70%, 1);
20
+ --color-catalunya-rojo-500: hsla(3, 85%, 60%, 1);
21
+ --color-catalunya-rojo-600: hsla(3, 79%, 48%, 1);
22
+ --color-catalunya-rojo-700: hsla(3, 75%, 40%, 1);
23
+ --color-catalunya-rojo-800: hsla(3, 70%, 32%, 1);
24
+ --color-catalunya-rojo-900: hsla(3, 65%, 24%, 1);
25
+
26
+ /* ====================================================================
27
+ * FAMILIA: ROJO MADRID / CYL (Base: Hue 355)
28
+ * ==================================================================== */
29
+ --color-madrid-rojo-100: hsla(355, 100%, 97%, 1);
30
+ --color-madrid-rojo-200: hsla(355, 100%, 94%, 1);
31
+ --color-madrid-rojo-300: hsla(355, 100%, 86%, 1);
32
+ --color-madrid-rojo-400: hsla(355, 90%, 70%, 1);
33
+ --color-madrid-rojo-500: hsla(355, 85%, 60%, 1);
34
+ --color-madrid-rojo-600: hsla(355, 82%, 46%, 1); /* Tono original */
35
+ --color-madrid-rojo-700: hsla(355, 75%, 38%, 1);
36
+ --color-madrid-rojo-800: hsla(355, 70%, 30%, 1);
37
+ --color-madrid-rojo-900: hsla(355, 65%, 22%, 1);
38
+
39
+ --color-cyl-rojo-100: hsla(355, 100%, 97%, 1);
40
+ --color-cyl-rojo-200: hsla(355, 100%, 94%, 1);
41
+ --color-cyl-rojo-300: hsla(355, 100%, 86%, 1);
42
+ --color-cyl-rojo-400: hsla(355, 90%, 70%, 1);
43
+ --color-cyl-rojo-500: hsla(355, 85%, 60%, 1);
44
+ --color-cyl-rojo-600: hsla(355, 82%, 46%, 1);
45
+ --color-cyl-rojo-700: hsla(355, 75%, 38%, 1);
46
+ --color-cyl-rojo-800: hsla(355, 70%, 30%, 1);
47
+ --color-cyl-rojo-900: hsla(355, 65%, 22%, 1);
48
+
49
+ /* ====================================================================
50
+ * FAMILIA: AMARILLO / ORO (Pantone 109 / 116) - Aragón, Asturias, C. Valenciana
51
+ * ==================================================================== */
52
+ --color-aragon-amarillo-100: hsla(49, 100%, 95%, 1);
53
+ --color-aragon-amarillo-200: hsla(49, 100%, 90%, 1);
54
+ --color-aragon-amarillo-300: hsla(49, 100%, 80%, 1);
55
+ --color-aragon-amarillo-400: hsla(49, 100%, 65%, 1);
56
+ --color-aragon-amarillo-500: hsla(49, 100%, 55%, 1); /* Tono base */
57
+ --color-aragon-amarillo-600: hsla(49, 100%, 50%, 1); /* Tono original */
58
+ --color-aragon-amarillo-700: hsla(49, 90%, 42%, 1);
59
+ --color-aragon-amarillo-800: hsla(49, 80%, 32%, 1);
60
+ --color-aragon-amarillo-900: hsla(49, 70%, 22%, 1);
61
+
62
+ --color-asturias-amarillo-100: hsla(46, 100%, 95%, 1);
63
+ --color-asturias-amarillo-200: hsla(46, 100%, 90%, 1);
64
+ --color-asturias-amarillo-300: hsla(46, 100%, 80%, 1);
65
+ --color-asturias-amarillo-400: hsla(46, 100%, 65%, 1);
66
+ --color-asturias-amarillo-500: hsla(46, 100%, 55%, 1);
67
+ --color-asturias-amarillo-600: hsla(46, 100%, 50%, 1); /* Tono original */
68
+ --color-asturias-amarillo-700: hsla(46, 90%, 42%, 1);
69
+ --color-asturias-amarillo-800: hsla(46, 80%, 32%, 1);
70
+ --color-asturias-amarillo-900: hsla(46, 70%, 22%, 1);
71
+
72
+ /* ====================================================================
73
+ * FAMILIA: VERDE (Andalucía, Extremadura, País Vasco, La Rioja)
74
+ * ==================================================================== */
75
+ --color-andalucia-verde-100: hsla(147, 60%, 95%, 1);
76
+ --color-andalucia-verde-200: hsla(147, 70%, 85%, 1);
77
+ --color-andalucia-verde-300: hsla(147, 80%, 70%, 1);
78
+ --color-andalucia-verde-400: hsla(147, 90%, 45%, 1);
79
+ --color-andalucia-verde-500: hsla(147, 100%, 30%, 1);
80
+ --color-andalucia-verde-600: hsla(147, 100%, 20%, 1); /* Tono original */
81
+ --color-andalucia-verde-700: hsla(147, 90%, 16%, 1);
82
+ --color-andalucia-verde-800: hsla(147, 80%, 12%, 1);
83
+ --color-andalucia-verde-900: hsla(147, 70%, 8%, 1);
84
+
85
+ --color-pv-verde-100: hsla(141, 50%, 95%, 1);
86
+ --color-pv-verde-200: hsla(141, 60%, 85%, 1);
87
+ --color-pv-verde-300: hsla(141, 70%, 70%, 1);
88
+ --color-pv-verde-400: hsla(141, 80%, 50%, 1);
89
+ --color-pv-verde-500: hsla(141, 70%, 40%, 1);
90
+ --color-pv-verde-600: hsla(141, 60%, 30%, 1); /* Tono original */
91
+ --color-pv-verde-700: hsla(141, 60%, 24%, 1);
92
+ --color-pv-verde-800: hsla(141, 60%, 18%, 1);
93
+ --color-pv-verde-900: hsla(141, 60%, 12%, 1);
94
+
95
+ /* ====================================================================
96
+ * FAMILIA: AZUL (Asturias, Canarias, Galicia, Melilla)
97
+ * ==================================================================== */
98
+ --color-asturias-azul-100: hsla(219, 100%, 95%, 1);
99
+ --color-asturias-azul-200: hsla(219, 100%, 85%, 1);
100
+ --color-asturias-azul-300: hsla(219, 100%, 70%, 1);
101
+ --color-asturias-azul-400: hsla(219, 100%, 50%, 1);
102
+ --color-asturias-azul-500: hsla(219, 100%, 40%, 1);
103
+ --color-asturias-azul-600: hsla(219, 100%, 30%, 1); /* Tono original */
104
+ --color-asturias-azul-700: hsla(219, 90%, 24%, 1);
105
+ --color-asturias-azul-800: hsla(219, 80%, 18%, 1);
106
+ --color-asturias-azul-900: hsla(219, 70%, 12%, 1);
107
+
108
+ --color-galicia-azul-100: hsla(215, 60%, 95%, 1);
109
+ --color-galicia-azul-200: hsla(215, 70%, 85%, 1);
110
+ --color-galicia-azul-300: hsla(215, 76%, 70%, 1);
111
+ --color-galicia-azul-400: hsla(215, 76%, 55%, 1);
112
+ --color-galicia-azul-500: hsla(215, 76%, 50%, 1);
113
+ --color-galicia-azul-600: hsla(215, 76%, 44%, 1); /* Tono original */
114
+ --color-galicia-azul-700: hsla(215, 70%, 35%, 1);
115
+ --color-galicia-azul-800: hsla(215, 60%, 25%, 1);
116
+ --color-galicia-azul-900: hsla(215, 50%, 15%, 1);
117
+
118
+ /* ====================================================================
119
+ * FAMILIA: MORADO / PÚRPURA (Baleares)
120
+ * ==================================================================== */
121
+ --color-baleares-morado-100: hsla(269, 60%, 95%, 1);
122
+ --color-baleares-morado-200: hsla(269, 70%, 85%, 1);
123
+ --color-baleares-morado-300: hsla(269, 70%, 70%, 1);
124
+ --color-baleares-morado-400: hsla(269, 70%, 55%, 1);
125
+ --color-baleares-morado-500: hsla(269, 66%, 45%, 1);
126
+ --color-baleares-morado-600: hsla(269, 66%, 36%, 1); /* Tono original */
127
+ --color-baleares-morado-700: hsla(269, 60%, 28%, 1);
128
+ --color-baleares-morado-800: hsla(269, 50%, 20%, 1);
129
+ --color-baleares-morado-900: hsla(269, 40%, 12%, 1);
130
+
131
+ /* ====================================================================
132
+ * FAMILIA: BLANCOS Y NEGROS (Ajuste de grises puros)
133
+ * ==================================================================== */
134
+ --color-comun-blanco-100: hsla(0, 0%, 100%, 1); /* Blanco base */
135
+ --color-comun-blanco-200: hsla(0, 0%, 97%, 1);
136
+ --color-comun-blanco-300: hsla(0, 0%, 92%, 1);
137
+ --color-comun-blanco-400: hsla(0, 0%, 85%, 1);
138
+
139
+ --color-comun-negro-500: hsla(0, 0%, 30%, 1); /* Gris oscuro base */
140
+ --color-comun-negro-600: hsla(0, 0%, 20%, 1);
141
+ --color-comun-negro-700: hsla(0, 0%, 12%, 1);
142
+ --color-comun-negro-800: hsla(0, 0%, 6%, 1);
143
+ --color-comun-negro-900: hsla(0, 0%, 0%, 1); /* Negro base banderas */
144
+ }
145
+
146
+ // Prompt Chat ZAI https://chat.z.ai/s/d396b707-2a68-48fa-bd7d-4ccf0d05185f
147
+ :root {
148
+ /* =========================================
149
+ * COMUNIDAD DE MADRID (Rojo, Blanco y Amarillo)
150
+ * (Estrellas blancas sobre fondo rojo)
151
+ * ========================================= */
152
+ --madrid-rojo: hsla(355, 82%, 46%, 1); /* Rojo Carmesí (Pantone 485) */
153
+ --madrid-blanco: hsla(0, 0%, 100%, 1); /* Blanco */
154
+ --madrid-amarillo: hsla(44, 100%, 50%, 1); /* Amarillo */
155
+
156
+ /* =========================================
157
+ * REGIÓN DE MURCIA (Rojo y Blanco)
158
+ * ========================================= */
159
+ --murcia-rojo: hsla(3, 79%, 48%, 1); /* Rojo (Pantone 485) */
160
+ --murcia-blanco: hsla(0, 0%, 100%, 1); /* Blanco */
161
+
162
+ /* =========================================
163
+ * COMUNIDAD FORAL DE NAVARRA (Rojo y Oro/Amarillo)
164
+ * (Cadenas de oro sobre fondo rojo)
165
+ * ========================================= */
166
+ --navarra-rojo: hsla(3, 79%, 48%, 1); /* Rojo (Pantone 485) */
167
+ --navarra-oro: hsla(45, 100%, 50%, 1); /* Oro/Amarillo */
168
+ }
169
+
170
+
171
+ /*
172
+ * 💡 Notas sobre este enfoque:
173
+ El método Tailwind: Tailwind no usa transparencias (Alfa) para sus escalas, sino que reduce la saturación a medida que sube la luminosidad (para evitar que los colores claros se vean "deslavados" o pastel) y aumenta la oscuridad reduciendo luminosidad. Este código replica exactamente esa matemática con tus HSLA.
174
+ Familias unificadas: En lugar de tener --color-murcia-rojo-600 y --color-catalunya-rojo-600 con el mismo valor hexadecimal repetido, puedes usar --color-aragon-rojo-600 (que es el Pantone 485 oficial) para cualquier bandera que use ese mismo rojo, manteniendo tu código CSS mucho más limpio. He incluido Cataluña como ejemplo de cómo se replicaría, pero puedes aplicar la escala de Aragón al resto.
175
+ Blancos y Negros: Para los blancos y negros, al no tener matiz (Hue 0) ni saturación (Sat 0%), la escala de Tailwind se convierte en una simple escala de grises (Lightness). He añadido la variable --color-comun- para estas, ya que el blanco de Extremadura es el mismo que el de Madrid o Canarias.
176
+ *
177
+ *
178
+ *
179
+ */
@@ -0,0 +1,168 @@
1
+ // ============================================================
2
+ // _functions.scss
3
+ // Pure Sass functions: unit conversion, color manipulation and
4
+ // fluid typography. They emit no CSS by themselves — use them
5
+ // inside your own rules or mixins.
6
+ // ============================================================
7
+ @use "sass:math";
8
+ @use "sass:color";
9
+ @use "sass:meta";
10
+ @use "sass:string";
11
+ @use "sass:list";
12
+
13
+ // Root font-size. Must match the --root-font-size you set in the reset
14
+ // (62.5% → 10px on 16px browsers). This makes 1rem = 10px, so rem()
15
+ // and px() produce values where rem ≈ px.
16
+ // Override before importing this module (!default semantics).
17
+ $base-font-size: 10px !default;
18
+
19
+ // ============================================================
20
+ // PRIVATE HELPERS
21
+ // ============================================================
22
+
23
+ // Recursively replaces every occurrence of $search inside $string.
24
+ // Used by to-class() to escape CSS selectors.
25
+ @function _str-replace($string, $search, $replace: "") {
26
+ $index: string.index($string, $search);
27
+ @if not $index { @return $string; }
28
+ @return string.slice($string, 1, $index - 1) + $replace +
29
+ _str-replace(string.slice($string, $index + string.length($search)), $search, $replace);
30
+ }
31
+
32
+ // ============================================================
33
+ // UNIT CONVERSION
34
+ // Convert between px, rem and other CSS units.
35
+ // All conversions respect $base-font-size (default 10px).
36
+ // ============================================================
37
+
38
+ // Convert a px value to rem. Accepts unitless numbers (treated as px)
39
+ // or values with a px unit.
40
+ // Example: f.rem(16px) → 1.6rem (16 / 10).
41
+ @function rem($size) {
42
+ @if meta.type-of($size) != "number" {
43
+ @error "rem(): se esperaba un número, recibió #{meta.inspect($size)}.";
44
+ }
45
+ $px: if(sass(math.is-unitless($size)): $size; else: math.div($size, 1px));
46
+ $base: math.div($base-font-size, 1px);
47
+ @return math.div($px, $base) * 1rem;
48
+ }
49
+
50
+ // Convert a rem value to px. Unitless numbers are treated as rem.
51
+ // Example: f.px(1.6rem) → 16px (1.6 * 10).
52
+ @function px($size) {
53
+ @if meta.type-of($size) != "number" {
54
+ @error "px(): se esperaba un número, recibió #{meta.inspect($size)}.";
55
+ }
56
+ $num: if(sass(math.is-unitless($size)): $size; else: math.div($size, 1rem));
57
+ $base: math.div($base-font-size, 1px);
58
+ @return $num * $base * 1px;
59
+ }
60
+
61
+ // Append a unit to a unitless number (values that already have a
62
+ // unit are returned unchanged). Valid units: rem, px, em, %.
63
+ // Example: f.to-unit(4, "rem") → 4rem.
64
+ @function to-unit($value, $unit: "rem") {
65
+ @if meta.type-of($value) != "number" {
66
+ @error "to-unit(): se esperaba un número, recibió #{meta.inspect($value)}.";
67
+ }
68
+ @if not math.is-unitless($value) { @return $value; }
69
+ $valid: ("rem", "px", "em", "%");
70
+ @if not list.index($valid, $unit) {
71
+ @error "to-unit(): unidad '#{$unit}' no válida. Use: rem, px, em, %.";
72
+ }
73
+ @if $unit == "rem" { @return $value * 1rem; }
74
+ @if $unit == "px" { @return $value * 1px; }
75
+ @if $unit == "em" { @return $value * 1em; }
76
+ @if $unit == "%" { @return $value * 1%; }
77
+ @error "to-unit(): caso no cubierto para '#{$unit}'.";
78
+ }
79
+
80
+ // Remove the unit from a number by dividing by its own unit.
81
+ // Example: f.strip-unit(16px) → 16.
82
+ @function strip-unit($value) {
83
+ @if meta.type-of($value) != "number" { @error "strip-unit(): se esperaba un número."; }
84
+ @return math.div($value, ($value * 0 + 1));
85
+ }
86
+
87
+ // ============================================================
88
+ // FLUID TYPOGRAPHY (clamp)
89
+ // ============================================================
90
+
91
+ // Builds a clamp() value that scales linearly from $min at
92
+ // $min-vw viewport width to $max at $max-vw. Unitless numbers are
93
+ // treated as px. Uses the classic slope/intercept formula:
94
+ // preferred = slope * 100vw ± intercept, clamped between min and max.
95
+ // Example: f.fluid(16, 24) →
96
+ // clamp(16px, 0.5vw + 14.4px, 24px) between 320px and 1920px.
97
+ @function fluid($min, $max, $min-vw: 320px, $max-vw: 1920px) {
98
+ $min-val: if(sass(math.is-unitless($min)): $min * 1px; else: $min);
99
+ $max-val: if(sass(math.is-unitless($max)): $max * 1px; else: $max);
100
+ $vw-min: if(sass(math.is-unitless($min-vw)): $min-vw * 1px; else: $min-vw);
101
+ $vw-max: if(sass(math.is-unitless($max-vw)): $max-vw * 1px; else: $max-vw);
102
+
103
+ $slope: math.div(
104
+ strip-unit($max-val) - strip-unit($min-val),
105
+ strip-unit($vw-max) - strip-unit($vw-min)
106
+ );
107
+ $intercept: strip-unit($min-val) - ($slope * strip-unit($vw-min));
108
+
109
+ $sign: if(sass($intercept >= 0): "+"; else: "-");
110
+ $preferred: #{$slope * 100}vw #{$sign} #{math.abs($intercept)}px;
111
+
112
+ @return clamp(#{$min-val}, #{$preferred}, #{$max-val});
113
+ }
114
+
115
+ // ============================================================
116
+ // COLOR MANIPULATION
117
+ // ============================================================
118
+
119
+ // Mix a color toward white. $amount is a percentage (unitless
120
+ // numbers are treated as %). f.tint($c, 20%) = 20% white + 80% $c.
121
+ @function tint($color, $amount: 10%) {
122
+ @if meta.type-of($color) != "color" { @error "tint(): se esperaba un color."; }
123
+ $pct: if(sass(math.is-unitless($amount)): $amount * 1%; else: $amount);
124
+ @return color.mix(white, $color, $pct);
125
+ }
126
+
127
+ // Mix a color toward black. Inverse of tint().
128
+ @function shade($color, $amount: 10%) {
129
+ @if meta.type-of($color) != "color" { @error "shade(): se esperaba un color."; }
130
+ $pct: if(sass(math.is-unitless($amount)): $amount * 1%; else: $amount);
131
+ @return color.mix(black, $color, $pct);
132
+ }
133
+
134
+ // Scale saturation up/down by $amount percentage points.
135
+ @function saturate-color($color, $amount: 10%) { @return color.scale($color, $saturation: $amount); }
136
+ @function desaturate-color($color, $amount: 10%) { @return color.scale($color, $saturation: -$amount); }
137
+ // Hue-rotate the color by 180° (the complementary color).
138
+ @function complement($color) { @return color.complement($color); }
139
+
140
+ // Returns black or white (or your own pair) depending on which has
141
+ // better contrast against $color, using perceptual luminance weights
142
+ // (0.299/0.587/0.114). Bright colors return $dark, dark ones $light.
143
+ @function contrast($color, $light: white, $dark: black) {
144
+ $brightness: (color.red($color) * 0.299 + color.green($color) * 0.587 + color.blue($color) * 0.114) / 255;
145
+ @return if(sass($brightness > 0.5): $dark; else: $light);
146
+ }
147
+
148
+ // Builds a CSS color-mix() that blends a custom property with
149
+ // another color at runtime. $var-name is accepted with or without
150
+ // the var() wrapper. Example:
151
+ // f.color-mix-var(--purple-500, 20%) →
152
+ // color-mix(in srgb, var(--purple-500) 80%, white).
153
+ @function color-mix-var($var-name, $amount: 10%, $mix-with: white) {
154
+ $name: if(sass(string.index($var-name, "var(") == 1): $var-name; else: "var(#{$var-name})");
155
+ $pct: if(sass(math.is-unitless($amount)): $amount * 1%; else: $amount);
156
+ $color-pct: 100% - $pct;
157
+ @return color-mix(in srgb, #{$name} #{$color-pct}, #{$mix-with});
158
+ }
159
+
160
+ // Escapes characters that are invalid in CSS class selectors
161
+ // ('.', '/', '%') so a token key can be used as a class name.
162
+ @function to-class($key) {
163
+ $str: "#{$key}";
164
+ $str: _str-replace($str, ".", "\\.");
165
+ $str: _str-replace($str, "/", "\\/");
166
+ $str: _str-replace($str, "%", "\\%");
167
+ @return $str;
168
+ }