Rafael Lopez

fix nav teclado

...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
10 "dependencies": { 10 "dependencies": {
11 "@observablehq/plot": "^0.6.17", 11 "@observablehq/plot": "^0.6.17",
12 "@supabase/supabase-js": "^2.98.0", 12 "@supabase/supabase-js": "^2.98.0",
13 + "@sveltejs/adapter-node": "^5.5.4",
13 "d3": "^7.9.0", 14 "d3": "^7.9.0",
14 "fuse.js": "^7.1.0", 15 "fuse.js": "^7.1.0",
15 "hyparquet": "^1.25.1", 16 "hyparquet": "^1.25.1",
...@@ -32,7 +33,6 @@ ...@@ -32,7 +33,6 @@
32 "cpu": [ 33 "cpu": [
33 "ppc64" 34 "ppc64"
34 ], 35 ],
35 - "dev": true,
36 "license": "MIT", 36 "license": "MIT",
37 "optional": true, 37 "optional": true,
38 "os": [ 38 "os": [
...@@ -49,7 +49,6 @@ ...@@ -49,7 +49,6 @@
49 "cpu": [ 49 "cpu": [
50 "arm" 50 "arm"
51 ], 51 ],
52 - "dev": true,
53 "license": "MIT", 52 "license": "MIT",
54 "optional": true, 53 "optional": true,
55 "os": [ 54 "os": [
...@@ -66,7 +65,6 @@ ...@@ -66,7 +65,6 @@
66 "cpu": [ 65 "cpu": [
67 "arm64" 66 "arm64"
68 ], 67 ],
69 - "dev": true,
70 "license": "MIT", 68 "license": "MIT",
71 "optional": true, 69 "optional": true,
72 "os": [ 70 "os": [
...@@ -83,7 +81,6 @@ ...@@ -83,7 +81,6 @@
83 "cpu": [ 81 "cpu": [
84 "x64" 82 "x64"
85 ], 83 ],
86 - "dev": true,
87 "license": "MIT", 84 "license": "MIT",
88 "optional": true, 85 "optional": true,
89 "os": [ 86 "os": [
...@@ -100,7 +97,6 @@ ...@@ -100,7 +97,6 @@
100 "cpu": [ 97 "cpu": [
101 "arm64" 98 "arm64"
102 ], 99 ],
103 - "dev": true,
104 "license": "MIT", 100 "license": "MIT",
105 "optional": true, 101 "optional": true,
106 "os": [ 102 "os": [
...@@ -117,7 +113,6 @@ ...@@ -117,7 +113,6 @@
117 "cpu": [ 113 "cpu": [
118 "x64" 114 "x64"
119 ], 115 ],
120 - "dev": true,
121 "license": "MIT", 116 "license": "MIT",
122 "optional": true, 117 "optional": true,
123 "os": [ 118 "os": [
...@@ -134,7 +129,6 @@ ...@@ -134,7 +129,6 @@
134 "cpu": [ 129 "cpu": [
135 "arm64" 130 "arm64"
136 ], 131 ],
137 - "dev": true,
138 "license": "MIT", 132 "license": "MIT",
139 "optional": true, 133 "optional": true,
140 "os": [ 134 "os": [
...@@ -151,7 +145,6 @@ ...@@ -151,7 +145,6 @@
151 "cpu": [ 145 "cpu": [
152 "x64" 146 "x64"
153 ], 147 ],
154 - "dev": true,
155 "license": "MIT", 148 "license": "MIT",
156 "optional": true, 149 "optional": true,
157 "os": [ 150 "os": [
...@@ -168,7 +161,6 @@ ...@@ -168,7 +161,6 @@
168 "cpu": [ 161 "cpu": [
169 "arm" 162 "arm"
170 ], 163 ],
171 - "dev": true,
172 "license": "MIT", 164 "license": "MIT",
173 "optional": true, 165 "optional": true,
174 "os": [ 166 "os": [
...@@ -185,7 +177,6 @@ ...@@ -185,7 +177,6 @@
185 "cpu": [ 177 "cpu": [
186 "arm64" 178 "arm64"
187 ], 179 ],
188 - "dev": true,
189 "license": "MIT", 180 "license": "MIT",
190 "optional": true, 181 "optional": true,
191 "os": [ 182 "os": [
...@@ -202,7 +193,6 @@ ...@@ -202,7 +193,6 @@
202 "cpu": [ 193 "cpu": [
203 "ia32" 194 "ia32"
204 ], 195 ],
205 - "dev": true,
206 "license": "MIT", 196 "license": "MIT",
207 "optional": true, 197 "optional": true,
208 "os": [ 198 "os": [
...@@ -219,7 +209,6 @@ ...@@ -219,7 +209,6 @@
219 "cpu": [ 209 "cpu": [
220 "loong64" 210 "loong64"
221 ], 211 ],
222 - "dev": true,
223 "license": "MIT", 212 "license": "MIT",
224 "optional": true, 213 "optional": true,
225 "os": [ 214 "os": [
...@@ -236,7 +225,6 @@ ...@@ -236,7 +225,6 @@
236 "cpu": [ 225 "cpu": [
237 "mips64el" 226 "mips64el"
238 ], 227 ],
239 - "dev": true,
240 "license": "MIT", 228 "license": "MIT",
241 "optional": true, 229 "optional": true,
242 "os": [ 230 "os": [
...@@ -253,7 +241,6 @@ ...@@ -253,7 +241,6 @@
253 "cpu": [ 241 "cpu": [
254 "ppc64" 242 "ppc64"
255 ], 243 ],
256 - "dev": true,
257 "license": "MIT", 244 "license": "MIT",
258 "optional": true, 245 "optional": true,
259 "os": [ 246 "os": [
...@@ -270,7 +257,6 @@ ...@@ -270,7 +257,6 @@
270 "cpu": [ 257 "cpu": [
271 "riscv64" 258 "riscv64"
272 ], 259 ],
273 - "dev": true,
274 "license": "MIT", 260 "license": "MIT",
275 "optional": true, 261 "optional": true,
276 "os": [ 262 "os": [
...@@ -287,7 +273,6 @@ ...@@ -287,7 +273,6 @@
287 "cpu": [ 273 "cpu": [
288 "s390x" 274 "s390x"
289 ], 275 ],
290 - "dev": true,
291 "license": "MIT", 276 "license": "MIT",
292 "optional": true, 277 "optional": true,
293 "os": [ 278 "os": [
...@@ -304,7 +289,6 @@ ...@@ -304,7 +289,6 @@
304 "cpu": [ 289 "cpu": [
305 "x64" 290 "x64"
306 ], 291 ],
307 - "dev": true,
308 "license": "MIT", 292 "license": "MIT",
309 "optional": true, 293 "optional": true,
310 "os": [ 294 "os": [
...@@ -321,7 +305,6 @@ ...@@ -321,7 +305,6 @@
321 "cpu": [ 305 "cpu": [
322 "arm64" 306 "arm64"
323 ], 307 ],
324 - "dev": true,
325 "license": "MIT", 308 "license": "MIT",
326 "optional": true, 309 "optional": true,
327 "os": [ 310 "os": [
...@@ -338,7 +321,6 @@ ...@@ -338,7 +321,6 @@
338 "cpu": [ 321 "cpu": [
339 "x64" 322 "x64"
340 ], 323 ],
341 - "dev": true,
342 "license": "MIT", 324 "license": "MIT",
343 "optional": true, 325 "optional": true,
344 "os": [ 326 "os": [
...@@ -355,7 +337,6 @@ ...@@ -355,7 +337,6 @@
355 "cpu": [ 337 "cpu": [
356 "arm64" 338 "arm64"
357 ], 339 ],
358 - "dev": true,
359 "license": "MIT", 340 "license": "MIT",
360 "optional": true, 341 "optional": true,
361 "os": [ 342 "os": [
...@@ -372,7 +353,6 @@ ...@@ -372,7 +353,6 @@
372 "cpu": [ 353 "cpu": [
373 "x64" 354 "x64"
374 ], 355 ],
375 - "dev": true,
376 "license": "MIT", 356 "license": "MIT",
377 "optional": true, 357 "optional": true,
378 "os": [ 358 "os": [
...@@ -389,7 +369,6 @@ ...@@ -389,7 +369,6 @@
389 "cpu": [ 369 "cpu": [
390 "arm64" 370 "arm64"
391 ], 371 ],
392 - "dev": true,
393 "license": "MIT", 372 "license": "MIT",
394 "optional": true, 373 "optional": true,
395 "os": [ 374 "os": [
...@@ -406,7 +385,6 @@ ...@@ -406,7 +385,6 @@
406 "cpu": [ 385 "cpu": [
407 "x64" 386 "x64"
408 ], 387 ],
409 - "dev": true,
410 "license": "MIT", 388 "license": "MIT",
411 "optional": true, 389 "optional": true,
412 "os": [ 390 "os": [
...@@ -423,7 +401,6 @@ ...@@ -423,7 +401,6 @@
423 "cpu": [ 401 "cpu": [
424 "arm64" 402 "arm64"
425 ], 403 ],
426 - "dev": true,
427 "license": "MIT", 404 "license": "MIT",
428 "optional": true, 405 "optional": true,
429 "os": [ 406 "os": [
...@@ -440,7 +417,6 @@ ...@@ -440,7 +417,6 @@
440 "cpu": [ 417 "cpu": [
441 "ia32" 418 "ia32"
442 ], 419 ],
443 - "dev": true,
444 "license": "MIT", 420 "license": "MIT",
445 "optional": true, 421 "optional": true,
446 "os": [ 422 "os": [
...@@ -457,7 +433,6 @@ ...@@ -457,7 +433,6 @@
457 "cpu": [ 433 "cpu": [
458 "x64" 434 "x64"
459 ], 435 ],
460 - "dev": true,
461 "license": "MIT", 436 "license": "MIT",
462 "optional": true, 437 "optional": true,
463 "os": [ 438 "os": [
...@@ -471,7 +446,6 @@ ...@@ -471,7 +446,6 @@
471 "version": "0.3.13", 446 "version": "0.3.13",
472 "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", 447 "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz",
473 "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", 448 "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==",
474 - "dev": true,
475 "license": "MIT", 449 "license": "MIT",
476 "dependencies": { 450 "dependencies": {
477 "@jridgewell/sourcemap-codec": "^1.5.0", 451 "@jridgewell/sourcemap-codec": "^1.5.0",
...@@ -482,7 +456,6 @@ ...@@ -482,7 +456,6 @@
482 "version": "2.3.5", 456 "version": "2.3.5",
483 "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", 457 "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz",
484 "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", 458 "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==",
485 - "dev": true,
486 "license": "MIT", 459 "license": "MIT",
487 "dependencies": { 460 "dependencies": {
488 "@jridgewell/gen-mapping": "^0.3.5", 461 "@jridgewell/gen-mapping": "^0.3.5",
...@@ -493,7 +466,6 @@ ...@@ -493,7 +466,6 @@
493 "version": "3.1.2", 466 "version": "3.1.2",
494 "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", 467 "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz",
495 "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", 468 "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==",
496 - "dev": true,
497 "license": "MIT", 469 "license": "MIT",
498 "engines": { 470 "engines": {
499 "node": ">=6.0.0" 471 "node": ">=6.0.0"
...@@ -503,14 +475,12 @@ ...@@ -503,14 +475,12 @@
503 "version": "1.5.5", 475 "version": "1.5.5",
504 "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", 476 "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
505 "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", 477 "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==",
506 - "dev": true,
507 "license": "MIT" 478 "license": "MIT"
508 }, 479 },
509 "node_modules/@jridgewell/trace-mapping": { 480 "node_modules/@jridgewell/trace-mapping": {
510 "version": "0.3.31", 481 "version": "0.3.31",
511 "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", 482 "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz",
512 "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", 483 "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==",
513 - "dev": true,
514 "license": "MIT", 484 "license": "MIT",
515 "dependencies": { 485 "dependencies": {
516 "@jridgewell/resolve-uri": "^3.1.0", 486 "@jridgewell/resolve-uri": "^3.1.0",
...@@ -535,9 +505,109 @@ ...@@ -535,9 +505,109 @@
535 "version": "1.0.0-next.29", 505 "version": "1.0.0-next.29",
536 "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.29.tgz", 506 "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.29.tgz",
537 "integrity": "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==", 507 "integrity": "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==",
538 - "dev": true,
539 "license": "MIT" 508 "license": "MIT"
540 }, 509 },
510 + "node_modules/@rollup/plugin-commonjs": {
511 + "version": "29.0.2",
512 + "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-29.0.2.tgz",
513 + "integrity": "sha512-S/ggWH1LU7jTyi9DxZOKyxpVd4hF/OZ0JrEbeLjXk/DFXwRny0tjD2c992zOUYQobLrVkRVMDdmHP16HKP7GRg==",
514 + "license": "MIT",
515 + "dependencies": {
516 + "@rollup/pluginutils": "^5.0.1",
517 + "commondir": "^1.0.1",
518 + "estree-walker": "^2.0.2",
519 + "fdir": "^6.2.0",
520 + "is-reference": "1.2.1",
521 + "magic-string": "^0.30.3",
522 + "picomatch": "^4.0.2"
523 + },
524 + "engines": {
525 + "node": ">=16.0.0 || 14 >= 14.17"
526 + },
527 + "peerDependencies": {
528 + "rollup": "^2.68.0||^3.0.0||^4.0.0"
529 + },
530 + "peerDependenciesMeta": {
531 + "rollup": {
532 + "optional": true
533 + }
534 + }
535 + },
536 + "node_modules/@rollup/plugin-commonjs/node_modules/is-reference": {
537 + "version": "1.2.1",
538 + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz",
539 + "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==",
540 + "license": "MIT",
541 + "dependencies": {
542 + "@types/estree": "*"
543 + }
544 + },
545 + "node_modules/@rollup/plugin-json": {
546 + "version": "6.1.0",
547 + "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-6.1.0.tgz",
548 + "integrity": "sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA==",
549 + "license": "MIT",
550 + "dependencies": {
551 + "@rollup/pluginutils": "^5.1.0"
552 + },
553 + "engines": {
554 + "node": ">=14.0.0"
555 + },
556 + "peerDependencies": {
557 + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0"
558 + },
559 + "peerDependenciesMeta": {
560 + "rollup": {
561 + "optional": true
562 + }
563 + }
564 + },
565 + "node_modules/@rollup/plugin-node-resolve": {
566 + "version": "16.0.3",
567 + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-16.0.3.tgz",
568 + "integrity": "sha512-lUYM3UBGuM93CnMPG1YocWu7X802BrNF3jW2zny5gQyLQgRFJhV1Sq0Zi74+dh/6NBx1DxFC4b4GXg9wUCG5Qg==",
569 + "license": "MIT",
570 + "dependencies": {
571 + "@rollup/pluginutils": "^5.0.1",
572 + "@types/resolve": "1.20.2",
573 + "deepmerge": "^4.2.2",
574 + "is-module": "^1.0.0",
575 + "resolve": "^1.22.1"
576 + },
577 + "engines": {
578 + "node": ">=14.0.0"
579 + },
580 + "peerDependencies": {
581 + "rollup": "^2.78.0||^3.0.0||^4.0.0"
582 + },
583 + "peerDependenciesMeta": {
584 + "rollup": {
585 + "optional": true
586 + }
587 + }
588 + },
589 + "node_modules/@rollup/pluginutils": {
590 + "version": "5.3.0",
591 + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.3.0.tgz",
592 + "integrity": "sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==",
593 + "license": "MIT",
594 + "dependencies": {
595 + "@types/estree": "^1.0.0",
596 + "estree-walker": "^2.0.2",
597 + "picomatch": "^4.0.2"
598 + },
599 + "engines": {
600 + "node": ">=14.0.0"
601 + },
602 + "peerDependencies": {
603 + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0"
604 + },
605 + "peerDependenciesMeta": {
606 + "rollup": {
607 + "optional": true
608 + }
609 + }
610 + },
541 "node_modules/@rollup/rollup-android-arm-eabi": { 611 "node_modules/@rollup/rollup-android-arm-eabi": {
542 "version": "4.59.0", 612 "version": "4.59.0",
543 "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.59.0.tgz", 613 "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.59.0.tgz",
...@@ -545,7 +615,6 @@ ...@@ -545,7 +615,6 @@
545 "cpu": [ 615 "cpu": [
546 "arm" 616 "arm"
547 ], 617 ],
548 - "dev": true,
549 "license": "MIT", 618 "license": "MIT",
550 "optional": true, 619 "optional": true,
551 "os": [ 620 "os": [
...@@ -559,7 +628,6 @@ ...@@ -559,7 +628,6 @@
559 "cpu": [ 628 "cpu": [
560 "arm64" 629 "arm64"
561 ], 630 ],
562 - "dev": true,
563 "license": "MIT", 631 "license": "MIT",
564 "optional": true, 632 "optional": true,
565 "os": [ 633 "os": [
...@@ -573,7 +641,6 @@ ...@@ -573,7 +641,6 @@
573 "cpu": [ 641 "cpu": [
574 "arm64" 642 "arm64"
575 ], 643 ],
576 - "dev": true,
577 "license": "MIT", 644 "license": "MIT",
578 "optional": true, 645 "optional": true,
579 "os": [ 646 "os": [
...@@ -587,7 +654,6 @@ ...@@ -587,7 +654,6 @@
587 "cpu": [ 654 "cpu": [
588 "x64" 655 "x64"
589 ], 656 ],
590 - "dev": true,
591 "license": "MIT", 657 "license": "MIT",
592 "optional": true, 658 "optional": true,
593 "os": [ 659 "os": [
...@@ -601,7 +667,6 @@ ...@@ -601,7 +667,6 @@
601 "cpu": [ 667 "cpu": [
602 "arm64" 668 "arm64"
603 ], 669 ],
604 - "dev": true,
605 "license": "MIT", 670 "license": "MIT",
606 "optional": true, 671 "optional": true,
607 "os": [ 672 "os": [
...@@ -615,7 +680,6 @@ ...@@ -615,7 +680,6 @@
615 "cpu": [ 680 "cpu": [
616 "x64" 681 "x64"
617 ], 682 ],
618 - "dev": true,
619 "license": "MIT", 683 "license": "MIT",
620 "optional": true, 684 "optional": true,
621 "os": [ 685 "os": [
...@@ -629,7 +693,6 @@ ...@@ -629,7 +693,6 @@
629 "cpu": [ 693 "cpu": [
630 "arm" 694 "arm"
631 ], 695 ],
632 - "dev": true,
633 "license": "MIT", 696 "license": "MIT",
634 "optional": true, 697 "optional": true,
635 "os": [ 698 "os": [
...@@ -643,7 +706,6 @@ ...@@ -643,7 +706,6 @@
643 "cpu": [ 706 "cpu": [
644 "arm" 707 "arm"
645 ], 708 ],
646 - "dev": true,
647 "license": "MIT", 709 "license": "MIT",
648 "optional": true, 710 "optional": true,
649 "os": [ 711 "os": [
...@@ -657,7 +719,6 @@ ...@@ -657,7 +719,6 @@
657 "cpu": [ 719 "cpu": [
658 "arm64" 720 "arm64"
659 ], 721 ],
660 - "dev": true,
661 "license": "MIT", 722 "license": "MIT",
662 "optional": true, 723 "optional": true,
663 "os": [ 724 "os": [
...@@ -671,7 +732,6 @@ ...@@ -671,7 +732,6 @@
671 "cpu": [ 732 "cpu": [
672 "arm64" 733 "arm64"
673 ], 734 ],
674 - "dev": true,
675 "license": "MIT", 735 "license": "MIT",
676 "optional": true, 736 "optional": true,
677 "os": [ 737 "os": [
...@@ -685,7 +745,6 @@ ...@@ -685,7 +745,6 @@
685 "cpu": [ 745 "cpu": [
686 "loong64" 746 "loong64"
687 ], 747 ],
688 - "dev": true,
689 "license": "MIT", 748 "license": "MIT",
690 "optional": true, 749 "optional": true,
691 "os": [ 750 "os": [
...@@ -699,7 +758,6 @@ ...@@ -699,7 +758,6 @@
699 "cpu": [ 758 "cpu": [
700 "loong64" 759 "loong64"
701 ], 760 ],
702 - "dev": true,
703 "license": "MIT", 761 "license": "MIT",
704 "optional": true, 762 "optional": true,
705 "os": [ 763 "os": [
...@@ -713,7 +771,6 @@ ...@@ -713,7 +771,6 @@
713 "cpu": [ 771 "cpu": [
714 "ppc64" 772 "ppc64"
715 ], 773 ],
716 - "dev": true,
717 "license": "MIT", 774 "license": "MIT",
718 "optional": true, 775 "optional": true,
719 "os": [ 776 "os": [
...@@ -727,7 +784,6 @@ ...@@ -727,7 +784,6 @@
727 "cpu": [ 784 "cpu": [
728 "ppc64" 785 "ppc64"
729 ], 786 ],
730 - "dev": true,
731 "license": "MIT", 787 "license": "MIT",
732 "optional": true, 788 "optional": true,
733 "os": [ 789 "os": [
...@@ -741,7 +797,6 @@ ...@@ -741,7 +797,6 @@
741 "cpu": [ 797 "cpu": [
742 "riscv64" 798 "riscv64"
743 ], 799 ],
744 - "dev": true,
745 "license": "MIT", 800 "license": "MIT",
746 "optional": true, 801 "optional": true,
747 "os": [ 802 "os": [
...@@ -755,7 +810,6 @@ ...@@ -755,7 +810,6 @@
755 "cpu": [ 810 "cpu": [
756 "riscv64" 811 "riscv64"
757 ], 812 ],
758 - "dev": true,
759 "license": "MIT", 813 "license": "MIT",
760 "optional": true, 814 "optional": true,
761 "os": [ 815 "os": [
...@@ -769,7 +823,6 @@ ...@@ -769,7 +823,6 @@
769 "cpu": [ 823 "cpu": [
770 "s390x" 824 "s390x"
771 ], 825 ],
772 - "dev": true,
773 "license": "MIT", 826 "license": "MIT",
774 "optional": true, 827 "optional": true,
775 "os": [ 828 "os": [
...@@ -783,7 +836,6 @@ ...@@ -783,7 +836,6 @@
783 "cpu": [ 836 "cpu": [
784 "x64" 837 "x64"
785 ], 838 ],
786 - "dev": true,
787 "license": "MIT", 839 "license": "MIT",
788 "optional": true, 840 "optional": true,
789 "os": [ 841 "os": [
...@@ -797,7 +849,6 @@ ...@@ -797,7 +849,6 @@
797 "cpu": [ 849 "cpu": [
798 "x64" 850 "x64"
799 ], 851 ],
800 - "dev": true,
801 "license": "MIT", 852 "license": "MIT",
802 "optional": true, 853 "optional": true,
803 "os": [ 854 "os": [
...@@ -811,7 +862,6 @@ ...@@ -811,7 +862,6 @@
811 "cpu": [ 862 "cpu": [
812 "x64" 863 "x64"
813 ], 864 ],
814 - "dev": true,
815 "license": "MIT", 865 "license": "MIT",
816 "optional": true, 866 "optional": true,
817 "os": [ 867 "os": [
...@@ -825,7 +875,6 @@ ...@@ -825,7 +875,6 @@
825 "cpu": [ 875 "cpu": [
826 "arm64" 876 "arm64"
827 ], 877 ],
828 - "dev": true,
829 "license": "MIT", 878 "license": "MIT",
830 "optional": true, 879 "optional": true,
831 "os": [ 880 "os": [
...@@ -839,7 +888,6 @@ ...@@ -839,7 +888,6 @@
839 "cpu": [ 888 "cpu": [
840 "arm64" 889 "arm64"
841 ], 890 ],
842 - "dev": true,
843 "license": "MIT", 891 "license": "MIT",
844 "optional": true, 892 "optional": true,
845 "os": [ 893 "os": [
...@@ -853,7 +901,6 @@ ...@@ -853,7 +901,6 @@
853 "cpu": [ 901 "cpu": [
854 "ia32" 902 "ia32"
855 ], 903 ],
856 - "dev": true,
857 "license": "MIT", 904 "license": "MIT",
858 "optional": true, 905 "optional": true,
859 "os": [ 906 "os": [
...@@ -867,7 +914,6 @@ ...@@ -867,7 +914,6 @@
867 "cpu": [ 914 "cpu": [
868 "x64" 915 "x64"
869 ], 916 ],
870 - "dev": true,
871 "license": "MIT", 917 "license": "MIT",
872 "optional": true, 918 "optional": true,
873 "os": [ 919 "os": [
...@@ -881,7 +927,6 @@ ...@@ -881,7 +927,6 @@
881 "cpu": [ 927 "cpu": [
882 "x64" 928 "x64"
883 ], 929 ],
884 - "dev": true,
885 "license": "MIT", 930 "license": "MIT",
886 "optional": true, 931 "optional": true,
887 "os": [ 932 "os": [
...@@ -892,7 +937,6 @@ ...@@ -892,7 +937,6 @@
892 "version": "1.1.0", 937 "version": "1.1.0",
893 "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", 938 "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz",
894 "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==", 939 "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==",
895 - "dev": true,
896 "license": "MIT" 940 "license": "MIT"
897 }, 941 },
898 "node_modules/@supabase/auth-js": { 942 "node_modules/@supabase/auth-js": {
...@@ -979,7 +1023,6 @@ ...@@ -979,7 +1023,6 @@
979 "version": "1.0.9", 1023 "version": "1.0.9",
980 "resolved": "https://registry.npmjs.org/@sveltejs/acorn-typescript/-/acorn-typescript-1.0.9.tgz", 1024 "resolved": "https://registry.npmjs.org/@sveltejs/acorn-typescript/-/acorn-typescript-1.0.9.tgz",
981 "integrity": "sha512-lVJX6qEgs/4DOcRTpo56tmKzVPtoWAaVbL4hfO7t7NVwl9AAXzQR6cihesW1BmNMPl+bK6dreu2sOKBP2Q9CIA==", 1025 "integrity": "sha512-lVJX6qEgs/4DOcRTpo56tmKzVPtoWAaVbL4hfO7t7NVwl9AAXzQR6cihesW1BmNMPl+bK6dreu2sOKBP2Q9CIA==",
982 - "dev": true,
983 "license": "MIT", 1026 "license": "MIT",
984 "peerDependencies": { 1027 "peerDependencies": {
985 "acorn": "^8.9.0" 1028 "acorn": "^8.9.0"
...@@ -995,11 +1038,25 @@ ...@@ -995,11 +1038,25 @@
995 "@sveltejs/kit": "^2.0.0" 1038 "@sveltejs/kit": "^2.0.0"
996 } 1039 }
997 }, 1040 },
1041 + "node_modules/@sveltejs/adapter-node": {
1042 + "version": "5.5.4",
1043 + "resolved": "https://registry.npmjs.org/@sveltejs/adapter-node/-/adapter-node-5.5.4.tgz",
1044 + "integrity": "sha512-45X92CXW+2J8ZUzPv3eLlKWEzINKiiGeFWTjyER4ZN4sGgNoaoeSkCY/QYNxHpPXy71QPsctwccBo9jJs0ySPQ==",
1045 + "license": "MIT",
1046 + "dependencies": {
1047 + "@rollup/plugin-commonjs": "^29.0.0",
1048 + "@rollup/plugin-json": "^6.1.0",
1049 + "@rollup/plugin-node-resolve": "^16.0.0",
1050 + "rollup": "^4.59.0"
1051 + },
1052 + "peerDependencies": {
1053 + "@sveltejs/kit": "^2.4.0"
1054 + }
1055 + },
998 "node_modules/@sveltejs/kit": { 1056 "node_modules/@sveltejs/kit": {
999 "version": "2.53.3", 1057 "version": "2.53.3",
1000 "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-2.53.3.tgz", 1058 "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-2.53.3.tgz",
1001 "integrity": "sha512-tshOeBUid2v5LAblUpatIdFm5Cyykbw2EiKWOunAAX0A/oJaR7DOdC9wLR5Qqh9zUf3QUISA2m9A3suBdQSYQg==", 1059 "integrity": "sha512-tshOeBUid2v5LAblUpatIdFm5Cyykbw2EiKWOunAAX0A/oJaR7DOdC9wLR5Qqh9zUf3QUISA2m9A3suBdQSYQg==",
1002 - "dev": true,
1003 "license": "MIT", 1060 "license": "MIT",
1004 "dependencies": { 1061 "dependencies": {
1005 "@standard-schema/spec": "^1.0.0", 1062 "@standard-schema/spec": "^1.0.0",
...@@ -1041,7 +1098,6 @@ ...@@ -1041,7 +1098,6 @@
1041 "version": "6.2.4", 1098 "version": "6.2.4",
1042 "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-6.2.4.tgz", 1099 "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-6.2.4.tgz",
1043 "integrity": "sha512-ou/d51QSdTyN26D7h6dSpusAKaZkAiGM55/AKYi+9AGZw7q85hElbjK3kEyzXHhLSnRISHOYzVge6x0jRZ7DXA==", 1100 "integrity": "sha512-ou/d51QSdTyN26D7h6dSpusAKaZkAiGM55/AKYi+9AGZw7q85hElbjK3kEyzXHhLSnRISHOYzVge6x0jRZ7DXA==",
1044 - "dev": true,
1045 "license": "MIT", 1101 "license": "MIT",
1046 "dependencies": { 1102 "dependencies": {
1047 "@sveltejs/vite-plugin-svelte-inspector": "^5.0.0", 1103 "@sveltejs/vite-plugin-svelte-inspector": "^5.0.0",
...@@ -1062,7 +1118,6 @@ ...@@ -1062,7 +1118,6 @@
1062 "version": "5.0.2", 1118 "version": "5.0.2",
1063 "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte-inspector/-/vite-plugin-svelte-inspector-5.0.2.tgz", 1119 "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte-inspector/-/vite-plugin-svelte-inspector-5.0.2.tgz",
1064 "integrity": "sha512-TZzRTcEtZffICSAoZGkPSl6Etsj2torOVrx6Uw0KpXxrec9Gg6jFWQ60Q3+LmNGfZSxHRCZL7vXVZIWmuV50Ig==", 1120 "integrity": "sha512-TZzRTcEtZffICSAoZGkPSl6Etsj2torOVrx6Uw0KpXxrec9Gg6jFWQ60Q3+LmNGfZSxHRCZL7vXVZIWmuV50Ig==",
1065 - "dev": true,
1066 "license": "MIT", 1121 "license": "MIT",
1067 "dependencies": { 1122 "dependencies": {
1068 "obug": "^2.1.0" 1123 "obug": "^2.1.0"
...@@ -1352,14 +1407,12 @@ ...@@ -1352,14 +1407,12 @@
1352 "version": "0.6.0", 1407 "version": "0.6.0",
1353 "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz", 1408 "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz",
1354 "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==", 1409 "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==",
1355 - "dev": true,
1356 "license": "MIT" 1410 "license": "MIT"
1357 }, 1411 },
1358 "node_modules/@types/estree": { 1412 "node_modules/@types/estree": {
1359 "version": "1.0.8", 1413 "version": "1.0.8",
1360 "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", 1414 "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz",
1361 "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", 1415 "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==",
1362 - "dev": true,
1363 "license": "MIT" 1416 "license": "MIT"
1364 }, 1417 },
1365 "node_modules/@types/node": { 1418 "node_modules/@types/node": {
...@@ -1377,11 +1430,16 @@ ...@@ -1377,11 +1430,16 @@
1377 "integrity": "sha512-oN9ive//QSBkf19rfDv45M7eZPi0eEXylht2OLEXicu5b4KoQ1OzXIw+xDSGWxSxe1JmepRR/ZH283vsu518/Q==", 1430 "integrity": "sha512-oN9ive//QSBkf19rfDv45M7eZPi0eEXylht2OLEXicu5b4KoQ1OzXIw+xDSGWxSxe1JmepRR/ZH283vsu518/Q==",
1378 "license": "MIT" 1431 "license": "MIT"
1379 }, 1432 },
1433 + "node_modules/@types/resolve": {
1434 + "version": "1.20.2",
1435 + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz",
1436 + "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==",
1437 + "license": "MIT"
1438 + },
1380 "node_modules/@types/trusted-types": { 1439 "node_modules/@types/trusted-types": {
1381 "version": "2.0.7", 1440 "version": "2.0.7",
1382 "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", 1441 "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz",
1383 "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", 1442 "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==",
1384 - "dev": true,
1385 "license": "MIT" 1443 "license": "MIT"
1386 }, 1444 },
1387 "node_modules/@types/ws": { 1445 "node_modules/@types/ws": {
...@@ -1397,7 +1455,6 @@ ...@@ -1397,7 +1455,6 @@
1397 "version": "8.16.0", 1455 "version": "8.16.0",
1398 "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", 1456 "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz",
1399 "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", 1457 "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==",
1400 - "dev": true,
1401 "license": "MIT", 1458 "license": "MIT",
1402 "bin": { 1459 "bin": {
1403 "acorn": "bin/acorn" 1460 "acorn": "bin/acorn"
...@@ -1410,7 +1467,6 @@ ...@@ -1410,7 +1467,6 @@
1410 "version": "5.3.1", 1467 "version": "5.3.1",
1411 "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.1.tgz", 1468 "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.1.tgz",
1412 "integrity": "sha512-Z/ZeOgVl7bcSYZ/u/rh0fOpvEpq//LZmdbkXyc7syVzjPAhfOa9ebsdTSjEBDU4vs5nC98Kfduj1uFo0qyET3g==", 1469 "integrity": "sha512-Z/ZeOgVl7bcSYZ/u/rh0fOpvEpq//LZmdbkXyc7syVzjPAhfOa9ebsdTSjEBDU4vs5nC98Kfduj1uFo0qyET3g==",
1413 - "dev": true,
1414 "license": "Apache-2.0", 1470 "license": "Apache-2.0",
1415 "engines": { 1471 "engines": {
1416 "node": ">= 0.4" 1472 "node": ">= 0.4"
...@@ -1420,7 +1476,6 @@ ...@@ -1420,7 +1476,6 @@
1420 "version": "4.1.0", 1476 "version": "4.1.0",
1421 "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", 1477 "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz",
1422 "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", 1478 "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==",
1423 - "dev": true,
1424 "license": "Apache-2.0", 1479 "license": "Apache-2.0",
1425 "engines": { 1480 "engines": {
1426 "node": ">= 0.4" 1481 "node": ">= 0.4"
...@@ -1436,7 +1491,6 @@ ...@@ -1436,7 +1491,6 @@
1436 "version": "2.1.1", 1491 "version": "2.1.1",
1437 "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", 1492 "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz",
1438 "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", 1493 "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==",
1439 - "dev": true,
1440 "license": "MIT", 1494 "license": "MIT",
1441 "engines": { 1495 "engines": {
1442 "node": ">=6" 1496 "node": ">=6"
...@@ -1451,11 +1505,16 @@ ...@@ -1451,11 +1505,16 @@
1451 "node": ">= 10" 1505 "node": ">= 10"
1452 } 1506 }
1453 }, 1507 },
1508 + "node_modules/commondir": {
1509 + "version": "1.0.1",
1510 + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
1511 + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==",
1512 + "license": "MIT"
1513 + },
1454 "node_modules/cookie": { 1514 "node_modules/cookie": {
1455 "version": "0.6.0", 1515 "version": "0.6.0",
1456 "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", 1516 "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz",
1457 "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", 1517 "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==",
1458 - "dev": true,
1459 "license": "MIT", 1518 "license": "MIT",
1460 "engines": { 1519 "engines": {
1461 "node": ">= 0.6" 1520 "node": ">= 0.6"
...@@ -1866,7 +1925,6 @@ ...@@ -1866,7 +1925,6 @@
1866 "version": "4.3.1", 1925 "version": "4.3.1",
1867 "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", 1926 "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz",
1868 "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", 1927 "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==",
1869 - "dev": true,
1870 "license": "MIT", 1928 "license": "MIT",
1871 "engines": { 1929 "engines": {
1872 "node": ">=0.10.0" 1930 "node": ">=0.10.0"
...@@ -1885,7 +1943,7 @@ ...@@ -1885,7 +1943,7 @@
1885 "version": "2.1.2", 1943 "version": "2.1.2",
1886 "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", 1944 "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz",
1887 "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", 1945 "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==",
1888 - "dev": true, 1946 + "devOptional": true,
1889 "license": "Apache-2.0", 1947 "license": "Apache-2.0",
1890 "engines": { 1948 "engines": {
1891 "node": ">=8" 1949 "node": ">=8"
...@@ -1895,7 +1953,6 @@ ...@@ -1895,7 +1953,6 @@
1895 "version": "5.6.3", 1953 "version": "5.6.3",
1896 "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.6.3.tgz", 1954 "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.6.3.tgz",
1897 "integrity": "sha512-nc7XjUU/2Lb+SvEFVGcWLiKkzfw8+qHI7zn8WYXKkLMgfGSHbgCEaR6bJpev8Cm6Rmrb19Gfd/tZvGqx9is3wg==", 1955 "integrity": "sha512-nc7XjUU/2Lb+SvEFVGcWLiKkzfw8+qHI7zn8WYXKkLMgfGSHbgCEaR6bJpev8Cm6Rmrb19Gfd/tZvGqx9is3wg==",
1898 - "dev": true,
1899 "license": "MIT" 1956 "license": "MIT"
1900 }, 1957 },
1901 "node_modules/enhanced-resolve": { 1958 "node_modules/enhanced-resolve": {
...@@ -1912,11 +1969,19 @@ ...@@ -1912,11 +1969,19 @@
1912 "node": ">=10.13.0" 1969 "node": ">=10.13.0"
1913 } 1970 }
1914 }, 1971 },
1972 + "node_modules/es-errors": {
1973 + "version": "1.3.0",
1974 + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
1975 + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
1976 + "license": "MIT",
1977 + "engines": {
1978 + "node": ">= 0.4"
1979 + }
1980 + },
1915 "node_modules/esbuild": { 1981 "node_modules/esbuild": {
1916 "version": "0.27.3", 1982 "version": "0.27.3",
1917 "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.3.tgz", 1983 "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.3.tgz",
1918 "integrity": "sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==", 1984 "integrity": "sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==",
1919 - "dev": true,
1920 "hasInstallScript": true, 1985 "hasInstallScript": true,
1921 "license": "MIT", 1986 "license": "MIT",
1922 "bin": { 1987 "bin": {
...@@ -1958,24 +2023,27 @@ ...@@ -1958,24 +2023,27 @@
1958 "version": "1.2.2", 2023 "version": "1.2.2",
1959 "resolved": "https://registry.npmjs.org/esm-env/-/esm-env-1.2.2.tgz", 2024 "resolved": "https://registry.npmjs.org/esm-env/-/esm-env-1.2.2.tgz",
1960 "integrity": "sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==", 2025 "integrity": "sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==",
1961 - "dev": true,
1962 "license": "MIT" 2026 "license": "MIT"
1963 }, 2027 },
1964 "node_modules/esrap": { 2028 "node_modules/esrap": {
1965 "version": "2.2.3", 2029 "version": "2.2.3",
1966 "resolved": "https://registry.npmjs.org/esrap/-/esrap-2.2.3.tgz", 2030 "resolved": "https://registry.npmjs.org/esrap/-/esrap-2.2.3.tgz",
1967 "integrity": "sha512-8fOS+GIGCQZl/ZIlhl59htOlms6U8NvX6ZYgYHpRU/b6tVSh3uHkOHZikl3D4cMbYM0JlpBe+p/BkZEi8J9XIQ==", 2031 "integrity": "sha512-8fOS+GIGCQZl/ZIlhl59htOlms6U8NvX6ZYgYHpRU/b6tVSh3uHkOHZikl3D4cMbYM0JlpBe+p/BkZEi8J9XIQ==",
1968 - "dev": true,
1969 "license": "MIT", 2032 "license": "MIT",
1970 "dependencies": { 2033 "dependencies": {
1971 "@jridgewell/sourcemap-codec": "^1.4.15" 2034 "@jridgewell/sourcemap-codec": "^1.4.15"
1972 } 2035 }
1973 }, 2036 },
2037 + "node_modules/estree-walker": {
2038 + "version": "2.0.2",
2039 + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
2040 + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
2041 + "license": "MIT"
2042 + },
1974 "node_modules/fdir": { 2043 "node_modules/fdir": {
1975 "version": "6.5.0", 2044 "version": "6.5.0",
1976 "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", 2045 "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz",
1977 "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", 2046 "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==",
1978 - "dev": true,
1979 "license": "MIT", 2047 "license": "MIT",
1980 "engines": { 2048 "engines": {
1981 "node": ">=12.0.0" 2049 "node": ">=12.0.0"
...@@ -1993,7 +2061,6 @@ ...@@ -1993,7 +2061,6 @@
1993 "version": "2.3.3", 2061 "version": "2.3.3",
1994 "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", 2062 "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
1995 "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", 2063 "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
1996 - "dev": true,
1997 "hasInstallScript": true, 2064 "hasInstallScript": true,
1998 "license": "MIT", 2065 "license": "MIT",
1999 "optional": true, 2066 "optional": true,
...@@ -2004,6 +2071,15 @@ ...@@ -2004,6 +2071,15 @@
2004 "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 2071 "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
2005 } 2072 }
2006 }, 2073 },
2074 + "node_modules/function-bind": {
2075 + "version": "1.1.2",
2076 + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
2077 + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
2078 + "license": "MIT",
2079 + "funding": {
2080 + "url": "https://github.com/sponsors/ljharb"
2081 + }
2082 + },
2007 "node_modules/fuse.js": { 2083 "node_modules/fuse.js": {
2008 "version": "7.1.0", 2084 "version": "7.1.0",
2009 "resolved": "https://registry.npmjs.org/fuse.js/-/fuse.js-7.1.0.tgz", 2085 "resolved": "https://registry.npmjs.org/fuse.js/-/fuse.js-7.1.0.tgz",
...@@ -2020,6 +2096,18 @@ ...@@ -2020,6 +2096,18 @@
2020 "dev": true, 2096 "dev": true,
2021 "license": "ISC" 2097 "license": "ISC"
2022 }, 2098 },
2099 + "node_modules/hasown": {
2100 + "version": "2.0.3",
2101 + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.3.tgz",
2102 + "integrity": "sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg==",
2103 + "license": "MIT",
2104 + "dependencies": {
2105 + "function-bind": "^1.1.2"
2106 + },
2107 + "engines": {
2108 + "node": ">= 0.4"
2109 + }
2110 + },
2023 "node_modules/hyparquet": { 2111 "node_modules/hyparquet": {
2024 "version": "1.25.1", 2112 "version": "1.25.1",
2025 "resolved": "https://registry.npmjs.org/hyparquet/-/hyparquet-1.25.1.tgz", 2113 "resolved": "https://registry.npmjs.org/hyparquet/-/hyparquet-1.25.1.tgz",
...@@ -2065,11 +2153,31 @@ ...@@ -2065,11 +2153,31 @@
2065 "binary-search-bounds": "^2.0.0" 2153 "binary-search-bounds": "^2.0.0"
2066 } 2154 }
2067 }, 2155 },
2156 + "node_modules/is-core-module": {
2157 + "version": "2.16.1",
2158 + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz",
2159 + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==",
2160 + "license": "MIT",
2161 + "dependencies": {
2162 + "hasown": "^2.0.2"
2163 + },
2164 + "engines": {
2165 + "node": ">= 0.4"
2166 + },
2167 + "funding": {
2168 + "url": "https://github.com/sponsors/ljharb"
2169 + }
2170 + },
2171 + "node_modules/is-module": {
2172 + "version": "1.0.0",
2173 + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz",
2174 + "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==",
2175 + "license": "MIT"
2176 + },
2068 "node_modules/is-reference": { 2177 "node_modules/is-reference": {
2069 "version": "3.0.3", 2178 "version": "3.0.3",
2070 "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.3.tgz", 2179 "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.3.tgz",
2071 "integrity": "sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==", 2180 "integrity": "sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==",
2072 - "dev": true,
2073 "license": "MIT", 2181 "license": "MIT",
2074 "dependencies": { 2182 "dependencies": {
2075 "@types/estree": "^1.0.6" 2183 "@types/estree": "^1.0.6"
...@@ -2085,7 +2193,7 @@ ...@@ -2085,7 +2193,7 @@
2085 "version": "2.6.1", 2193 "version": "2.6.1",
2086 "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz", 2194 "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz",
2087 "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==", 2195 "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==",
2088 - "dev": true, 2196 + "devOptional": true,
2089 "license": "MIT", 2197 "license": "MIT",
2090 "bin": { 2198 "bin": {
2091 "jiti": "lib/jiti-cli.mjs" 2199 "jiti": "lib/jiti-cli.mjs"
...@@ -2095,7 +2203,6 @@ ...@@ -2095,7 +2203,6 @@
2095 "version": "4.1.5", 2203 "version": "4.1.5",
2096 "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", 2204 "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz",
2097 "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", 2205 "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==",
2098 - "dev": true,
2099 "license": "MIT", 2206 "license": "MIT",
2100 "engines": { 2207 "engines": {
2101 "node": ">=6" 2208 "node": ">=6"
...@@ -2105,7 +2212,7 @@ ...@@ -2105,7 +2212,7 @@
2105 "version": "1.31.1", 2212 "version": "1.31.1",
2106 "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.31.1.tgz", 2213 "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.31.1.tgz",
2107 "integrity": "sha512-l51N2r93WmGUye3WuFoN5k10zyvrVs0qfKBhyC5ogUQ6Ew6JUSswh78mbSO+IU3nTWsyOArqPCcShdQSadghBQ==", 2214 "integrity": "sha512-l51N2r93WmGUye3WuFoN5k10zyvrVs0qfKBhyC5ogUQ6Ew6JUSswh78mbSO+IU3nTWsyOArqPCcShdQSadghBQ==",
2108 - "dev": true, 2215 + "devOptional": true,
2109 "license": "MPL-2.0", 2216 "license": "MPL-2.0",
2110 "dependencies": { 2217 "dependencies": {
2111 "detect-libc": "^2.0.3" 2218 "detect-libc": "^2.0.3"
...@@ -2138,7 +2245,6 @@ ...@@ -2138,7 +2245,6 @@
2138 "cpu": [ 2245 "cpu": [
2139 "arm64" 2246 "arm64"
2140 ], 2247 ],
2141 - "dev": true,
2142 "license": "MPL-2.0", 2248 "license": "MPL-2.0",
2143 "optional": true, 2249 "optional": true,
2144 "os": [ 2250 "os": [
...@@ -2159,7 +2265,6 @@ ...@@ -2159,7 +2265,6 @@
2159 "cpu": [ 2265 "cpu": [
2160 "arm64" 2266 "arm64"
2161 ], 2267 ],
2162 - "dev": true,
2163 "license": "MPL-2.0", 2268 "license": "MPL-2.0",
2164 "optional": true, 2269 "optional": true,
2165 "os": [ 2270 "os": [
...@@ -2180,7 +2285,6 @@ ...@@ -2180,7 +2285,6 @@
2180 "cpu": [ 2285 "cpu": [
2181 "x64" 2286 "x64"
2182 ], 2287 ],
2183 - "dev": true,
2184 "license": "MPL-2.0", 2288 "license": "MPL-2.0",
2185 "optional": true, 2289 "optional": true,
2186 "os": [ 2290 "os": [
...@@ -2201,7 +2305,6 @@ ...@@ -2201,7 +2305,6 @@
2201 "cpu": [ 2305 "cpu": [
2202 "x64" 2306 "x64"
2203 ], 2307 ],
2204 - "dev": true,
2205 "license": "MPL-2.0", 2308 "license": "MPL-2.0",
2206 "optional": true, 2309 "optional": true,
2207 "os": [ 2310 "os": [
...@@ -2222,7 +2325,6 @@ ...@@ -2222,7 +2325,6 @@
2222 "cpu": [ 2325 "cpu": [
2223 "arm" 2326 "arm"
2224 ], 2327 ],
2225 - "dev": true,
2226 "license": "MPL-2.0", 2328 "license": "MPL-2.0",
2227 "optional": true, 2329 "optional": true,
2228 "os": [ 2330 "os": [
...@@ -2243,7 +2345,6 @@ ...@@ -2243,7 +2345,6 @@
2243 "cpu": [ 2345 "cpu": [
2244 "arm64" 2346 "arm64"
2245 ], 2347 ],
2246 - "dev": true,
2247 "license": "MPL-2.0", 2348 "license": "MPL-2.0",
2248 "optional": true, 2349 "optional": true,
2249 "os": [ 2350 "os": [
...@@ -2264,7 +2365,6 @@ ...@@ -2264,7 +2365,6 @@
2264 "cpu": [ 2365 "cpu": [
2265 "arm64" 2366 "arm64"
2266 ], 2367 ],
2267 - "dev": true,
2268 "license": "MPL-2.0", 2368 "license": "MPL-2.0",
2269 "optional": true, 2369 "optional": true,
2270 "os": [ 2370 "os": [
...@@ -2285,7 +2385,6 @@ ...@@ -2285,7 +2385,6 @@
2285 "cpu": [ 2385 "cpu": [
2286 "x64" 2386 "x64"
2287 ], 2387 ],
2288 - "dev": true,
2289 "license": "MPL-2.0", 2388 "license": "MPL-2.0",
2290 "optional": true, 2389 "optional": true,
2291 "os": [ 2390 "os": [
...@@ -2306,7 +2405,6 @@ ...@@ -2306,7 +2405,6 @@
2306 "cpu": [ 2405 "cpu": [
2307 "x64" 2406 "x64"
2308 ], 2407 ],
2309 - "dev": true,
2310 "license": "MPL-2.0", 2408 "license": "MPL-2.0",
2311 "optional": true, 2409 "optional": true,
2312 "os": [ 2410 "os": [
...@@ -2327,7 +2425,6 @@ ...@@ -2327,7 +2425,6 @@
2327 "cpu": [ 2425 "cpu": [
2328 "arm64" 2426 "arm64"
2329 ], 2427 ],
2330 - "dev": true,
2331 "license": "MPL-2.0", 2428 "license": "MPL-2.0",
2332 "optional": true, 2429 "optional": true,
2333 "os": [ 2430 "os": [
...@@ -2348,7 +2445,6 @@ ...@@ -2348,7 +2445,6 @@
2348 "cpu": [ 2445 "cpu": [
2349 "x64" 2446 "x64"
2350 ], 2447 ],
2351 - "dev": true,
2352 "license": "MPL-2.0", 2448 "license": "MPL-2.0",
2353 "optional": true, 2449 "optional": true,
2354 "os": [ 2450 "os": [
...@@ -2366,14 +2462,12 @@ ...@@ -2366,14 +2462,12 @@
2366 "version": "3.0.0", 2462 "version": "3.0.0",
2367 "resolved": "https://registry.npmjs.org/locate-character/-/locate-character-3.0.0.tgz", 2463 "resolved": "https://registry.npmjs.org/locate-character/-/locate-character-3.0.0.tgz",
2368 "integrity": "sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==", 2464 "integrity": "sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==",
2369 - "dev": true,
2370 "license": "MIT" 2465 "license": "MIT"
2371 }, 2466 },
2372 "node_modules/magic-string": { 2467 "node_modules/magic-string": {
2373 "version": "0.30.21", 2468 "version": "0.30.21",
2374 "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", 2469 "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz",
2375 "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", 2470 "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==",
2376 - "dev": true,
2377 "license": "MIT", 2471 "license": "MIT",
2378 "dependencies": { 2472 "dependencies": {
2379 "@jridgewell/sourcemap-codec": "^1.5.5" 2473 "@jridgewell/sourcemap-codec": "^1.5.5"
...@@ -2395,7 +2489,6 @@ ...@@ -2395,7 +2489,6 @@
2395 "version": "2.0.1", 2489 "version": "2.0.1",
2396 "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", 2490 "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz",
2397 "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==", 2491 "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==",
2398 - "dev": true,
2399 "license": "MIT", 2492 "license": "MIT",
2400 "engines": { 2493 "engines": {
2401 "node": ">=10" 2494 "node": ">=10"
...@@ -2405,7 +2498,6 @@ ...@@ -2405,7 +2498,6 @@
2405 "version": "3.3.11", 2498 "version": "3.3.11",
2406 "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", 2499 "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz",
2407 "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", 2500 "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==",
2408 - "dev": true,
2409 "funding": [ 2501 "funding": [
2410 { 2502 {
2411 "type": "github", 2503 "type": "github",
...@@ -2424,25 +2516,28 @@ ...@@ -2424,25 +2516,28 @@
2424 "version": "2.1.1", 2516 "version": "2.1.1",
2425 "resolved": "https://registry.npmjs.org/obug/-/obug-2.1.1.tgz", 2517 "resolved": "https://registry.npmjs.org/obug/-/obug-2.1.1.tgz",
2426 "integrity": "sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==", 2518 "integrity": "sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==",
2427 - "dev": true,
2428 "funding": [ 2519 "funding": [
2429 "https://github.com/sponsors/sxzz", 2520 "https://github.com/sponsors/sxzz",
2430 "https://opencollective.com/debug" 2521 "https://opencollective.com/debug"
2431 ], 2522 ],
2432 "license": "MIT" 2523 "license": "MIT"
2433 }, 2524 },
2525 + "node_modules/path-parse": {
2526 + "version": "1.0.7",
2527 + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
2528 + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
2529 + "license": "MIT"
2530 + },
2434 "node_modules/picocolors": { 2531 "node_modules/picocolors": {
2435 "version": "1.1.1", 2532 "version": "1.1.1",
2436 "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", 2533 "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
2437 "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", 2534 "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
2438 - "dev": true,
2439 "license": "ISC" 2535 "license": "ISC"
2440 }, 2536 },
2441 "node_modules/picomatch": { 2537 "node_modules/picomatch": {
2442 "version": "4.0.3", 2538 "version": "4.0.3",
2443 "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", 2539 "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz",
2444 "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", 2540 "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
2445 - "dev": true,
2446 "license": "MIT", 2541 "license": "MIT",
2447 "engines": { 2542 "engines": {
2448 "node": ">=12" 2543 "node": ">=12"
...@@ -2455,7 +2550,6 @@ ...@@ -2455,7 +2550,6 @@
2455 "version": "8.5.6", 2550 "version": "8.5.6",
2456 "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", 2551 "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz",
2457 "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", 2552 "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==",
2458 - "dev": true,
2459 "funding": [ 2553 "funding": [
2460 { 2554 {
2461 "type": "opencollective", 2555 "type": "opencollective",
...@@ -2480,6 +2574,27 @@ ...@@ -2480,6 +2574,27 @@
2480 "node": "^10 || ^12 || >=14" 2574 "node": "^10 || ^12 || >=14"
2481 } 2575 }
2482 }, 2576 },
2577 + "node_modules/resolve": {
2578 + "version": "1.22.12",
2579 + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.12.tgz",
2580 + "integrity": "sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==",
2581 + "license": "MIT",
2582 + "dependencies": {
2583 + "es-errors": "^1.3.0",
2584 + "is-core-module": "^2.16.1",
2585 + "path-parse": "^1.0.7",
2586 + "supports-preserve-symlinks-flag": "^1.0.0"
2587 + },
2588 + "bin": {
2589 + "resolve": "bin/resolve"
2590 + },
2591 + "engines": {
2592 + "node": ">= 0.4"
2593 + },
2594 + "funding": {
2595 + "url": "https://github.com/sponsors/ljharb"
2596 + }
2597 + },
2483 "node_modules/robust-predicates": { 2598 "node_modules/robust-predicates": {
2484 "version": "3.0.2", 2599 "version": "3.0.2",
2485 "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.2.tgz", 2600 "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.2.tgz",
...@@ -2490,7 +2605,6 @@ ...@@ -2490,7 +2605,6 @@
2490 "version": "4.59.0", 2605 "version": "4.59.0",
2491 "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.59.0.tgz", 2606 "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.59.0.tgz",
2492 "integrity": "sha512-2oMpl67a3zCH9H79LeMcbDhXW/UmWG/y2zuqnF2jQq5uq9TbM9TVyXvA4+t+ne2IIkBdrLpAaRQAvo7YI/Yyeg==", 2607 "integrity": "sha512-2oMpl67a3zCH9H79LeMcbDhXW/UmWG/y2zuqnF2jQq5uq9TbM9TVyXvA4+t+ne2IIkBdrLpAaRQAvo7YI/Yyeg==",
2493 - "dev": true,
2494 "license": "MIT", 2608 "license": "MIT",
2495 "dependencies": { 2609 "dependencies": {
2496 "@types/estree": "1.0.8" 2610 "@types/estree": "1.0.8"
...@@ -2547,14 +2661,12 @@ ...@@ -2547,14 +2661,12 @@
2547 "version": "3.0.1", 2661 "version": "3.0.1",
2548 "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-3.0.1.tgz", 2662 "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-3.0.1.tgz",
2549 "integrity": "sha512-n7Z7dXZhJbwuAHhNzkTti6Aw9QDDjZtm3JTpTGATIdNzdQz5GuFs22w90BcvF4INfnrL5xrX3oGsuqO5Dx3A1Q==", 2663 "integrity": "sha512-n7Z7dXZhJbwuAHhNzkTti6Aw9QDDjZtm3JTpTGATIdNzdQz5GuFs22w90BcvF4INfnrL5xrX3oGsuqO5Dx3A1Q==",
2550 - "dev": true,
2551 "license": "MIT" 2664 "license": "MIT"
2552 }, 2665 },
2553 "node_modules/sirv": { 2666 "node_modules/sirv": {
2554 "version": "3.0.2", 2667 "version": "3.0.2",
2555 "resolved": "https://registry.npmjs.org/sirv/-/sirv-3.0.2.tgz", 2668 "resolved": "https://registry.npmjs.org/sirv/-/sirv-3.0.2.tgz",
2556 "integrity": "sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==", 2669 "integrity": "sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==",
2557 - "dev": true,
2558 "license": "MIT", 2670 "license": "MIT",
2559 "dependencies": { 2671 "dependencies": {
2560 "@polka/url": "^1.0.0-next.24", 2672 "@polka/url": "^1.0.0-next.24",
...@@ -2569,17 +2681,27 @@ ...@@ -2569,17 +2681,27 @@
2569 "version": "1.2.1", 2681 "version": "1.2.1",
2570 "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", 2682 "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
2571 "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", 2683 "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
2572 - "dev": true,
2573 "license": "BSD-3-Clause", 2684 "license": "BSD-3-Clause",
2574 "engines": { 2685 "engines": {
2575 "node": ">=0.10.0" 2686 "node": ">=0.10.0"
2576 } 2687 }
2577 }, 2688 },
2689 + "node_modules/supports-preserve-symlinks-flag": {
2690 + "version": "1.0.0",
2691 + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
2692 + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
2693 + "license": "MIT",
2694 + "engines": {
2695 + "node": ">= 0.4"
2696 + },
2697 + "funding": {
2698 + "url": "https://github.com/sponsors/ljharb"
2699 + }
2700 + },
2578 "node_modules/svelte": { 2701 "node_modules/svelte": {
2579 "version": "5.53.5", 2702 "version": "5.53.5",
2580 "resolved": "https://registry.npmjs.org/svelte/-/svelte-5.53.5.tgz", 2703 "resolved": "https://registry.npmjs.org/svelte/-/svelte-5.53.5.tgz",
2581 "integrity": "sha512-YkqERnF05g8KLdDZwZrF8/i1eSbj6Eoat8Jjr2IfruZz9StLuBqo8sfCSzjosNKd+ZrQ8DkKZDjpO5y3ht1Pow==", 2704 "integrity": "sha512-YkqERnF05g8KLdDZwZrF8/i1eSbj6Eoat8Jjr2IfruZz9StLuBqo8sfCSzjosNKd+ZrQ8DkKZDjpO5y3ht1Pow==",
2582 - "dev": true,
2583 "license": "MIT", 2705 "license": "MIT",
2584 "dependencies": { 2706 "dependencies": {
2585 "@jridgewell/remapping": "^2.3.4", 2707 "@jridgewell/remapping": "^2.3.4",
...@@ -2628,7 +2750,6 @@ ...@@ -2628,7 +2750,6 @@
2628 "version": "0.2.15", 2750 "version": "0.2.15",
2629 "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", 2751 "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz",
2630 "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", 2752 "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==",
2631 - "dev": true,
2632 "license": "MIT", 2753 "license": "MIT",
2633 "dependencies": { 2754 "dependencies": {
2634 "fdir": "^6.5.0", 2755 "fdir": "^6.5.0",
...@@ -2645,7 +2766,6 @@ ...@@ -2645,7 +2766,6 @@
2645 "version": "3.0.1", 2766 "version": "3.0.1",
2646 "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", 2767 "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz",
2647 "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", 2768 "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==",
2648 - "dev": true,
2649 "license": "MIT", 2769 "license": "MIT",
2650 "engines": { 2770 "engines": {
2651 "node": ">=6" 2771 "node": ">=6"
...@@ -2667,7 +2787,6 @@ ...@@ -2667,7 +2787,6 @@
2667 "version": "7.3.1", 2787 "version": "7.3.1",
2668 "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.1.tgz", 2788 "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.1.tgz",
2669 "integrity": "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==", 2789 "integrity": "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==",
2670 - "dev": true,
2671 "license": "MIT", 2790 "license": "MIT",
2672 "dependencies": { 2791 "dependencies": {
2673 "esbuild": "^0.27.0", 2792 "esbuild": "^0.27.0",
...@@ -2742,7 +2861,6 @@ ...@@ -2742,7 +2861,6 @@
2742 "version": "1.1.2", 2861 "version": "1.1.2",
2743 "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-1.1.2.tgz", 2862 "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-1.1.2.tgz",
2744 "integrity": "sha512-zpKATdUbzbsycPFBN71nS2uzBUQiVnFoOrr2rvqv34S1lcAgMKKkjWleLGeiJlZ8lwCXvtWaRn7R3ZC16SYRuw==", 2863 "integrity": "sha512-zpKATdUbzbsycPFBN71nS2uzBUQiVnFoOrr2rvqv34S1lcAgMKKkjWleLGeiJlZ8lwCXvtWaRn7R3ZC16SYRuw==",
2745 - "dev": true,
2746 "license": "MIT", 2864 "license": "MIT",
2747 "workspaces": [ 2865 "workspaces": [
2748 "tests/deps/*", 2866 "tests/deps/*",
...@@ -2783,7 +2901,6 @@ ...@@ -2783,7 +2901,6 @@
2783 "version": "1.1.4", 2901 "version": "1.1.4",
2784 "resolved": "https://registry.npmjs.org/zimmerframe/-/zimmerframe-1.1.4.tgz", 2902 "resolved": "https://registry.npmjs.org/zimmerframe/-/zimmerframe-1.1.4.tgz",
2785 "integrity": "sha512-B58NGBEoc8Y9MWWCQGl/gq9xBCe4IiKM0a2x7GZdQKOW5Exr8S1W24J6OgM1njK8xCRGvAJIL/MxXHf6SkmQKQ==", 2903 "integrity": "sha512-B58NGBEoc8Y9MWWCQGl/gq9xBCe4IiKM0a2x7GZdQKOW5Exr8S1W24J6OgM1njK8xCRGvAJIL/MxXHf6SkmQKQ==",
2786 - "dev": true,
2787 "license": "MIT" 2904 "license": "MIT"
2788 } 2905 }
2789 } 2906 }
......
...@@ -21,6 +21,7 @@ ...@@ -21,6 +21,7 @@
21 "dependencies": { 21 "dependencies": {
22 "@observablehq/plot": "^0.6.17", 22 "@observablehq/plot": "^0.6.17",
23 "@supabase/supabase-js": "^2.98.0", 23 "@supabase/supabase-js": "^2.98.0",
24 + "@sveltejs/adapter-node": "^5.5.4",
24 "d3": "^7.9.0", 25 "d3": "^7.9.0",
25 "fuse.js": "^7.1.0", 26 "fuse.js": "^7.1.0",
26 "hyparquet": "^1.25.1", 27 "hyparquet": "^1.25.1",
......
No preview for this file type
...@@ -133,22 +133,31 @@ ...@@ -133,22 +133,31 @@
133 <a 133 <a
134 href="/" 134 href="/"
135 onclick={closeDrawer} 135 onclick={closeDrawer}
136 - class="w-full flex items-center gap-3 px-3 py-3 rounded-lg transition-colors text-left mb-4" 136 + class="w-full flex items-center px-3 py-2.5 rounded-lg transition-colors text-left"
137 style="background-color: {$page.url.pathname === '/' ? 'var(--theme-fill)' : 'transparent'};" 137 style="background-color: {$page.url.pathname === '/' ? 'var(--theme-fill)' : 'transparent'};"
138 onmouseenter={(e) => e.currentTarget.style.backgroundColor = 'var(--theme-fill)'} 138 onmouseenter={(e) => e.currentTarget.style.backgroundColor = 'var(--theme-fill)'}
139 onmouseleave={(e) => e.currentTarget.style.backgroundColor = $page.url.pathname === '/' ? 'var(--theme-fill)' : 'transparent'} 139 onmouseleave={(e) => e.currentTarget.style.backgroundColor = $page.url.pathname === '/' ? 'var(--theme-fill)' : 'transparent'}
140 > 140 >
141 - <svg class="w-4 h-4 flex-shrink-0" style="color: var(--theme-texto);" fill="currentColor" viewBox="0 0 20 20"> 141 + <span class="text-sm" style="color: var(--theme-titulo);">Inicio / Buscador</span>
142 - <rect x="2" y="2" width="7" height="7" rx="1.5"/>
143 - <rect x="11" y="2" width="7" height="7" rx="1.5"/>
144 - <rect x="2" y="11" width="7" height="7" rx="1.5"/>
145 - <rect x="11" y="11" width="7" height="7" rx="1.5"/>
146 - </svg>
147 - <span class="font-medium text-sm" style="color: var(--theme-titulo);">Inicio / Buscador</span>
148 </a> 142 </a>
149 143
144 + <!-- Descargas -->
145 + <a
146 + href="/descargas"
147 + onclick={closeDrawer}
148 + class="w-full flex items-center px-3 py-2.5 rounded-lg transition-colors text-left mb-4"
149 + style="background-color: {$page.url.pathname === '/descargas' ? 'var(--theme-fill)' : 'transparent'};"
150 + onmouseenter={(e) => e.currentTarget.style.backgroundColor = 'var(--theme-fill)'}
151 + onmouseleave={(e) => e.currentTarget.style.backgroundColor = $page.url.pathname === '/descargas' ? 'var(--theme-fill)' : 'transparent'}
152 + >
153 + <span class="text-sm" style="color: var(--theme-titulo);">Descargas</span>
154 + </a>
155 +
156 + <!-- Separador -->
157 + <div class="border-t mb-4" style="border-color: var(--theme-borde);"></div>
158 +
150 <!-- Clasificadores --> 159 <!-- Clasificadores -->
151 - <div class="mb-6"> 160 + <div class="mb-4">
152 <h3 class="text-xs font-semibold uppercase tracking-wider mb-3 px-2" style="color: var(--theme-texto);"> 161 <h3 class="text-xs font-semibold uppercase tracking-wider mb-3 px-2" style="color: var(--theme-texto);">
153 Navegar por clasificadores 162 Navegar por clasificadores
154 </h3> 163 </h3>
...@@ -157,13 +166,13 @@ ...@@ -157,13 +166,13 @@
157 <a 166 <a
158 href={c.href} 167 href={c.href}
159 onclick={closeDrawer} 168 onclick={closeDrawer}
160 - class="w-full flex items-center justify-between px-3 py-2.5 rounded-lg transition-colors text-left group" 169 + class="w-full flex items-center justify-between px-3 py-2 rounded-lg transition-colors text-left group"
161 style="background-color: {isActive(c.href) ? 'var(--theme-fill)' : 'transparent'};" 170 style="background-color: {isActive(c.href) ? 'var(--theme-fill)' : 'transparent'};"
162 onmouseenter={(e) => e.currentTarget.style.backgroundColor = 'var(--theme-fill)'} 171 onmouseenter={(e) => e.currentTarget.style.backgroundColor = 'var(--theme-fill)'}
163 onmouseleave={(e) => e.currentTarget.style.backgroundColor = isActive(c.href) ? 'var(--theme-fill)' : 'transparent'} 172 onmouseleave={(e) => e.currentTarget.style.backgroundColor = isActive(c.href) ? 'var(--theme-fill)' : 'transparent'}
164 > 173 >
165 <div class="flex-1 min-w-0"> 174 <div class="flex-1 min-w-0">
166 - <span class="text-sm font-medium block" style="color: var(--theme-titulo);">{c.nombre}</span> 175 + <span class="text-sm block" style="color: var(--theme-titulo);">{c.nombre}</span>
167 <span class="text-xs" style="color: var(--theme-texto);">{c.desc}</span> 176 <span class="text-xs" style="color: var(--theme-texto);">{c.desc}</span>
168 </div> 177 </div>
169 <svg 178 <svg
...@@ -178,86 +187,52 @@ ...@@ -178,86 +187,52 @@
178 </svg> 187 </svg>
179 </a> 188 </a>
180 {/each} 189 {/each}
190 + <a
191 + href="/clasificadores"
192 + onclick={closeDrawer}
193 + class="w-full flex items-center px-3 py-2 rounded-lg transition-colors text-left mt-1"
194 + style="background-color: {$page.url.pathname === '/clasificadores' ? 'var(--theme-fill)' : 'transparent'};"
195 + onmouseenter={(e) => e.currentTarget.style.backgroundColor = 'var(--theme-fill)'}
196 + onmouseleave={(e) => e.currentTarget.style.backgroundColor = $page.url.pathname === '/clasificadores' ? 'var(--theme-fill)' : 'transparent'}
197 + >
198 + <span class="text-xs" style="color: var(--theme-texto);">Ver todos los clasificadores</span>
199 + </a>
181 </div> 200 </div>
182 </div> 201 </div>
183 202
184 - <!-- Ver todos los clasificadores -->
185 - <a
186 - href="/clasificadores"
187 - onclick={closeDrawer}
188 - class="w-full flex items-center gap-3 px-3 py-3 rounded-lg transition-colors text-left mb-6"
189 - style="background-color: {$page.url.pathname === '/clasificadores' ? 'var(--theme-fill)' : 'transparent'};"
190 - onmouseenter={(e) => e.currentTarget.style.backgroundColor = 'var(--theme-fill)'}
191 - onmouseleave={(e) => e.currentTarget.style.backgroundColor = $page.url.pathname === '/clasificadores' ? 'var(--theme-fill)' : 'transparent'}
192 - >
193 - <svg class="w-4 h-4 flex-shrink-0" style="color: var(--theme-accent);" fill="none" stroke="currentColor" viewBox="0 0 24 24" stroke-width="1.5">
194 - <path stroke-linecap="round" stroke-linejoin="round" d="M3.75 6A2.25 2.25 0 016 3.75h2.25A2.25 2.25 0 0110.5 6v2.25a2.25 2.25 0 01-2.25 2.25H6a2.25 2.25 0 01-2.25-2.25V6zM3.75 15.75A2.25 2.25 0 016 13.5h2.25a2.25 2.25 0 012.25 2.25V18a2.25 2.25 0 01-2.25 2.25H6A2.25 2.25 0 013.75 18v-2.25zM13.5 6a2.25 2.25 0 012.25-2.25H18A2.25 2.25 0 0120.25 6v2.25A2.25 2.25 0 0118 10.5h-2.25a2.25 2.25 0 01-2.25-2.25V6zM13.5 15.75a2.25 2.25 0 012.25-2.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-2.25A2.25 2.25 0 0113.5 18v-2.25z"/>
195 - </svg>
196 - <span class="text-sm" style="color: var(--theme-accent);">Ver todos los clasificadores</span>
197 - </a>
198 -
199 <!-- Separador --> 203 <!-- Separador -->
200 - <div class="border-t my-4" style="border-color: var(--theme-borde);"></div> 204 + <div class="border-t mb-4" style="border-color: var(--theme-borde);"></div>
201 205
202 <!-- Enlaces --> 206 <!-- Enlaces -->
203 <div class="space-y-1"> 207 <div class="space-y-1">
204 <a 208 <a
205 href="/documentacion" 209 href="/documentacion"
206 onclick={closeDrawer} 210 onclick={closeDrawer}
207 - class="w-full flex items-center gap-3 px-3 py-2.5 rounded-lg transition-colors text-left" 211 + class="w-full flex items-center px-3 py-2 rounded-lg transition-colors text-left"
208 onmouseenter={(e) => e.currentTarget.style.backgroundColor = 'var(--theme-fill)'} 212 onmouseenter={(e) => e.currentTarget.style.backgroundColor = 'var(--theme-fill)'}
209 onmouseleave={(e) => e.currentTarget.style.backgroundColor = 'transparent'} 213 onmouseleave={(e) => e.currentTarget.style.backgroundColor = 'transparent'}
210 > 214 >
211 - <svg class="w-4 h-4 flex-shrink-0" style="color: var(--theme-texto);" fill="none" stroke="currentColor" viewBox="0 0 24 24" stroke-width="1.5">
212 - <path stroke-linecap="round" stroke-linejoin="round" d="M12 6.042A8.967 8.967 0 006 3.75c-1.052 0-2.062.18-3 .512v14.25A8.987 8.987 0 016 18c2.305 0 4.408.867 6 2.292m0-14.25a8.966 8.966 0 016-2.292c1.052 0 2.062.18 3 .512v14.25A8.987 8.987 0 0018 18a8.967 8.967 0 00-6 2.292m0-14.25v14.25"/>
213 - </svg>
214 <span class="text-sm" style="color: var(--theme-titulo);">Documentación</span> 215 <span class="text-sm" style="color: var(--theme-titulo);">Documentación</span>
215 </a> 216 </a>
216 <a 217 <a
217 href="/sobre" 218 href="/sobre"
218 onclick={closeDrawer} 219 onclick={closeDrawer}
219 - class="w-full flex items-center gap-3 px-3 py-2.5 rounded-lg transition-colors text-left" 220 + class="w-full flex items-center px-3 py-2 rounded-lg transition-colors text-left"
220 onmouseenter={(e) => e.currentTarget.style.backgroundColor = 'var(--theme-fill)'} 221 onmouseenter={(e) => e.currentTarget.style.backgroundColor = 'var(--theme-fill)'}
221 onmouseleave={(e) => e.currentTarget.style.backgroundColor = 'transparent'} 222 onmouseleave={(e) => e.currentTarget.style.backgroundColor = 'transparent'}
222 > 223 >
223 - <svg class="w-4 h-4 flex-shrink-0" style="color: var(--theme-texto);" fill="none" stroke="currentColor" viewBox="0 0 24 24" stroke-width="1.5">
224 - <path stroke-linecap="round" stroke-linejoin="round" d="M11.25 11.25l.041-.02a.75.75 0 011.063.852l-.708 2.836a.75.75 0 001.063.853l.041-.021M21 12a9 9 0 11-18 0 9 9 0 0118 0zm-9-3.75h.008v.008H12V8.25z"/>
225 - </svg>
226 <span class="text-sm" style="color: var(--theme-titulo);">Sobre el proyecto</span> 224 <span class="text-sm" style="color: var(--theme-titulo);">Sobre el proyecto</span>
227 </a> 225 </a>
226 + <a
227 + href="/creditos"
228 + onclick={closeDrawer}
229 + class="w-full flex items-center px-3 py-2 rounded-lg transition-colors text-left"
230 + onmouseenter={(e) => e.currentTarget.style.backgroundColor = 'var(--theme-fill)'}
231 + onmouseleave={(e) => e.currentTarget.style.backgroundColor = 'transparent'}
232 + >
233 + <span class="text-sm" style="color: var(--theme-texto);">Créditos institucionales</span>
234 + </a>
228 </div> 235 </div>
229 -
230 - <!-- Separador -->
231 - <div class="border-t my-4" style="border-color: var(--theme-borde);"></div>
232 -
233 - <!-- Descargas -->
234 - <a
235 - href="/descargas"
236 - onclick={closeDrawer}
237 - class="w-full flex items-center gap-3 px-3 py-3 rounded-lg transition-colors text-left"
238 - style="background-color: {$page.url.pathname === '/descargas' ? 'var(--theme-fill)' : 'transparent'};"
239 - onmouseenter={(e) => e.currentTarget.style.backgroundColor = 'var(--theme-fill)'}
240 - onmouseleave={(e) => e.currentTarget.style.backgroundColor = $page.url.pathname === '/descargas' ? 'var(--theme-fill)' : 'transparent'}
241 - >
242 - <svg class="w-4 h-4 flex-shrink-0" style="color: var(--theme-accent);" fill="none" stroke="currentColor" viewBox="0 0 24 24" stroke-width="1.5">
243 - <path stroke-linecap="round" stroke-linejoin="round" d="M3 16.5v2.25A2.25 2.25 0 005.25 21h13.5A2.25 2.25 0 0021 18.75V16.5M16.5 12L12 16.5m0 0L7.5 12m4.5 4.5V3"/>
244 - </svg>
245 - <span class="text-sm font-medium" style="color: var(--theme-accent);">Descargas</span>
246 - </a>
247 -
248 - <!-- Créditos -->
249 - <a
250 - href="/creditos"
251 - onclick={closeDrawer}
252 - class="w-full flex items-center gap-3 px-3 py-2.5 rounded-lg transition-colors text-left mt-2"
253 - onmouseenter={(e) => e.currentTarget.style.backgroundColor = 'var(--theme-fill)'}
254 - onmouseleave={(e) => e.currentTarget.style.backgroundColor = 'transparent'}
255 - >
256 - <svg class="w-4 h-4 flex-shrink-0" style="color: var(--theme-texto);" fill="none" stroke="currentColor" viewBox="0 0 24 24" stroke-width="1.5">
257 - <path stroke-linecap="round" stroke-linejoin="round" d="M15 19.128a9.38 9.38 0 002.625.372 9.337 9.337 0 004.121-.952 4.125 4.125 0 00-7.533-2.493M15 19.128v-.003c0-1.113-.285-2.16-.786-3.07M15 19.128v.106A12.318 12.318 0 018.624 21c-2.331 0-4.512-.645-6.374-1.766l-.001-.109a6.375 6.375 0 0111.964-3.07M12 6.375a3.375 3.375 0 11-6.75 0 3.375 3.375 0 016.75 0zm8.25 2.25a2.625 2.625 0 11-5.25 0 2.625 2.625 0 015.25 0z"/>
258 - </svg>
259 - <span class="text-sm" style="color: var(--theme-texto);">Créditos institucionales</span>
260 - </a>
261 </nav> 236 </nav>
262 237
263 <!-- Footer --> 238 <!-- Footer -->
......
...@@ -220,7 +220,7 @@ ...@@ -220,7 +220,7 @@
220 const url = `${base}${item.codigo}`; 220 const url = `${base}${item.codigo}`;
221 console.log('[SEARCH] goToResult:', item.tipo, item.codigo, '→', url); 221 console.log('[SEARCH] goToResult:', item.tipo, item.codigo, '→', url);
222 open = false; 222 open = false;
223 - window.location.href = url; 223 + goto(url);
224 } 224 }
225 } 225 }
226 226
......
1 <script> 1 <script>
2 import '../app.css'; 2 import '../app.css';
3 import { page, navigating } from '$app/stores'; 3 import { page, navigating } from '$app/stores';
4 - import favicon from '$lib/assets/favicon.svg'; 4 + import favicon from '$lib/assets/favicon.ico';
5 import Navbar from '$lib/components/ui/Navbar.svelte'; 5 import Navbar from '$lib/components/ui/Navbar.svelte';
6 import NavigationDrawer from '$lib/components/layout/NavigationDrawer.svelte'; 6 import NavigationDrawer from '$lib/components/layout/NavigationDrawer.svelte';
7 import SearchModal from '$lib/components/ui/SearchModal.svelte'; 7 import SearchModal from '$lib/components/ui/SearchModal.svelte';
......
1 <script> 1 <script>
2 import { onMount } from 'svelte'; 2 import { onMount } from 'svelte';
3 + import { goto } from '$app/navigation';
3 import { landingSearchMode, landingSelectedClassifiers, landingSearchQuery } from '$lib/stores/landingSearchState'; 4 import { landingSearchMode, landingSelectedClassifiers, landingSearchQuery } from '$lib/stores/landingSearchState';
4 import { openDrawer } from '$lib/stores/drawer.js'; 5 import { openDrawer } from '$lib/stores/drawer.js';
5 6
...@@ -811,7 +812,7 @@ ...@@ -811,7 +812,7 @@
811 url = `/programa/${generateCodigo(hit)}`; 812 url = `/programa/${generateCodigo(hit)}`;
812 } 813 }
813 814
814 - window.location.href = url; 815 + goto(url);
815 } 816 }
816 817
817 function clearSearch() { 818 function clearSearch() {
...@@ -1123,7 +1124,7 @@ ...@@ -1123,7 +1124,7 @@
1123 {#each EXAMPLES_PROGRAMAS as ex} 1124 {#each EXAMPLES_PROGRAMAS as ex}
1124 <span 1125 <span
1125 class="mode-pill" 1126 class="mode-pill"
1126 - onclick={() => searchFromPill(ex.label)} 1127 + onclick={(e) => { e.stopPropagation(); searchFromPill(ex.label); }}
1127 onkeydown={(e) => e.key === 'Enter' && searchFromPill(ex.label)} 1128 onkeydown={(e) => e.key === 'Enter' && searchFromPill(ex.label)}
1128 role="button" 1129 role="button"
1129 tabindex="0" 1130 tabindex="0"
...@@ -1165,7 +1166,7 @@ ...@@ -1165,7 +1166,7 @@
1165 class="clf-chip" 1166 class="clf-chip"
1166 class:clf-chip-active={selectedClassifiers.includes(clf.id)} 1167 class:clf-chip-active={selectedClassifiers.includes(clf.id)}
1167 class:clf-chip-disabled={clf.disabled} 1168 class:clf-chip-disabled={clf.disabled}
1168 - onclick={() => { if (!clf.disabled) toggleClassifier(clf.id); }} 1169 + onclick={(e) => { e.stopPropagation(); if (!clf.disabled) toggleClassifier(clf.id); }}
1169 disabled={clf.disabled} 1170 disabled={clf.disabled}
1170 > 1171 >
1171 <span class="clf-dot"></span> 1172 <span class="clf-dot"></span>
...@@ -1176,11 +1177,11 @@ ...@@ -1176,11 +1177,11 @@
1176 <div class="mode-card-pills"> 1177 <div class="mode-card-pills">
1177 {#each EXAMPLES_CLASIFICADORES as ex} 1178 {#each EXAMPLES_CLASIFICADORES as ex}
1178 {#if ex.href} 1179 {#if ex.href}
1179 - <a href={ex.href} class="mode-pill">{ex.label}</a> 1180 + <a href={ex.href} class="mode-pill" onclick={(e) => e.stopPropagation()}>{ex.label}</a>
1180 {:else} 1181 {:else}
1181 <span 1182 <span
1182 class="mode-pill" 1183 class="mode-pill"
1183 - onclick={() => searchFromPill(ex.label, ex.classifier)} 1184 + onclick={(e) => { e.stopPropagation(); searchFromPill(ex.label, ex.classifier); }}
1184 onkeydown={(e) => e.key === 'Enter' && searchFromPill(ex.label, ex.classifier)} 1185 onkeydown={(e) => e.key === 'Enter' && searchFromPill(ex.label, ex.classifier)}
1185 role="button" 1186 role="button"
1186 tabindex="0" 1187 tabindex="0"
...@@ -2240,8 +2241,8 @@ ...@@ -2240,8 +2241,8 @@
2240 .pills-hint{font-family:var(--sans);font-size:10px;color:#7B7870;font-weight:500} 2241 .pills-hint{font-family:var(--sans);font-size:10px;color:#7B7870;font-weight:500}
2241 .hint-desktop{display:inline} 2242 .hint-desktop{display:inline}
2242 .hint-mobile{display:none} 2243 .hint-mobile{display:none}
2243 - .mode-pill{font-family:var(--sans);font-size:11px;font-weight:500;padding:5px 10px;border-radius:8px;cursor:pointer;transition:all 0.2s;border:1px solid rgba(255,255,255,0.15);background:rgba(255,255,255,0.06);color:#F5F0E8} 2244 + .mode-pill{font-family:var(--sans);font-size:11px;font-weight:500;padding:5px 10px;border-radius:8px;cursor:pointer;transition:all 0.2s;border:1px solid rgba(255,255,255,0.15);background:rgba(255,255,255,0.06);color:#F5F0E8 !important;text-decoration:none}
2244 - .mode-pill:hover{background:rgba(255,255,255,0.12);border-color:rgba(255,255,255,0.25);color:#F5F0E8} 2245 + .mode-pill:hover{background:rgba(255,255,255,0.12);border-color:rgba(255,255,255,0.25);color:#FFFFFF !important}
2245 2246
2246 .mode-card-radio{position:absolute;top:16px;right:16px} 2247 .mode-card-radio{position:absolute;top:16px;right:16px}
2247 .radio-dot{width:18px;height:18px;border-radius:50%;border:2px solid rgba(255,255,255,0.2);display:block;transition:all 0.2s;position:relative} 2248 .radio-dot{width:18px;height:18px;border-radius:50%;border:2px solid rgba(255,255,255,0.2);display:block;transition:all 0.2s;position:relative}
...@@ -2635,8 +2636,8 @@ ...@@ -2635,8 +2636,8 @@
2635 :global(html:not(.dark)) .radio-dot-active{border-color:#D4A017} 2636 :global(html:not(.dark)) .radio-dot-active{border-color:#D4A017}
2636 2637
2637 /* Mode pills */ 2638 /* Mode pills */
2638 - :global(html:not(.dark)) .mode-pill{border-color:rgba(0,0,0,0.12);background:rgba(0,0,0,0.04);color:#555} 2639 + :global(html:not(.dark)) .mode-pill{border-color:rgba(0,0,0,0.12);background:rgba(0,0,0,0.04);color:#555 !important}
2639 - :global(html:not(.dark)) .mode-pill:hover{background:rgba(0,0,0,0.08);border-color:rgba(0,0,0,0.2);color:#1d1d1f} 2640 + :global(html:not(.dark)) .mode-pill:hover{background:rgba(0,0,0,0.08);border-color:rgba(0,0,0,0.2);color:#1d1d1f !important}
2640 :global(html:not(.dark)) .pills-hint{color:#999} 2641 :global(html:not(.dark)) .pills-hint{color:#999}
2641 2642
2642 /* Gear / settings */ 2643 /* Gear / settings */
......
1 +export const ssr = false;
2 +
1 import { error } from '@sveltejs/kit'; 3 import { error } from '@sveltejs/kit';
2 4
3 import { API_HOST } from '$lib/api.js'; 5 import { API_HOST } from '$lib/api.js';
......
...@@ -1217,18 +1217,19 @@ ...@@ -1217,18 +1217,19 @@
1217 .slice(0, 20); 1217 .slice(0, 20);
1218 } 1218 }
1219 1219
1220 - function parseDescripciones(descripcionesStr) { 1220 + function parseDescripciones(descs) {
1221 - if (!descripcionesStr) return []; 1221 + if (!descs) return [];
1222 - try { 1222 + let arr;
1223 - const parsed = JSON.parse(descripcionesStr); 1223 + if (typeof descs === 'string') {
1224 - return parsed.sort((a, b) => { 1224 + try { arr = JSON.parse(descs); } catch { return []; }
1225 - const maxYearA = getMaxYear(a.rangos); 1225 + } else {
1226 - const maxYearB = getMaxYear(b.rangos); 1226 + arr = Array.isArray(descs) ? descs : [];
1227 - return maxYearB - maxYearA;
1228 - });
1229 - } catch {
1230 - return [];
1231 } 1227 }
1228 + return [...arr].sort((a, b) => {
1229 + const maxYearA = getMaxYear(a.gestion || a.rangos);
1230 + const maxYearB = getMaxYear(b.gestion || b.rangos);
1231 + return maxYearB - maxYearA;
1232 + });
1232 } 1233 }
1233 1234
1234 function getMaxYear(rangos) { 1235 function getMaxYear(rangos) {
......
...@@ -1364,19 +1364,19 @@ ...@@ -1364,19 +1364,19 @@
1364 .slice(0, 20); 1364 .slice(0, 20);
1365 } 1365 }
1366 1366
1367 - function parseDescripciones(descripcionesStr) { 1367 + function parseDescripciones(descs) {
1368 - if (!descripcionesStr) return []; 1368 + if (!descs) return [];
1369 - try { 1369 + let arr;
1370 - const parsed = JSON.parse(descripcionesStr); 1370 + if (typeof descs === 'string') {
1371 - // Ordenar por año más reciente (extraer el máximo año de cada rango) 1371 + try { arr = JSON.parse(descs); } catch { return []; }
1372 - return parsed.sort((a, b) => { 1372 + } else {
1373 - const maxYearA = getMaxYear(a.rangos); 1373 + arr = Array.isArray(descs) ? descs : [];
1374 - const maxYearB = getMaxYear(b.rangos);
1375 - return maxYearB - maxYearA; // Descendente, más reciente primero
1376 - });
1377 - } catch {
1378 - return [];
1379 } 1374 }
1375 + return [...arr].sort((a, b) => {
1376 + const maxYearA = getMaxYear(a.gestion || a.rangos);
1377 + const maxYearB = getMaxYear(b.gestion || b.rangos);
1378 + return maxYearB - maxYearA;
1379 + });
1380 } 1380 }
1381 1381
1382 function getMaxYear(rangos) { 1382 function getMaxYear(rangos) {
......
...@@ -881,18 +881,19 @@ ...@@ -881,18 +881,19 @@
881 .slice(0, 20); 881 .slice(0, 20);
882 } 882 }
883 883
884 - function parseDescripciones(descripcionesStr) { 884 + function parseDescripciones(descs) {
885 - if (!descripcionesStr) return []; 885 + if (!descs) return [];
886 - try { 886 + let arr;
887 - const parsed = typeof descripcionesStr === 'string' ? JSON.parse(descripcionesStr) : descripcionesStr; 887 + if (typeof descs === 'string') {
888 - return parsed.sort((a, b) => { 888 + try { arr = JSON.parse(descs); } catch { return []; }
889 - const maxYearA = getMaxYear(a.rangos); 889 + } else {
890 - const maxYearB = getMaxYear(b.rangos); 890 + arr = Array.isArray(descs) ? descs : [];
891 - return maxYearB - maxYearA;
892 - });
893 - } catch {
894 - return [];
895 } 891 }
892 + return [...arr].sort((a, b) => {
893 + const maxYearA = getMaxYear(a.gestion || a.rangos);
894 + const maxYearB = getMaxYear(b.gestion || b.rangos);
895 + return maxYearB - maxYearA;
896 + });
896 } 897 }
897 898
898 function getMaxYear(rangos) { 899 function getMaxYear(rangos) {
......
...@@ -722,6 +722,7 @@ ...@@ -722,6 +722,7 @@
722 }); 722 });
723 723
724 onMount(async () => { 724 onMount(async () => {
725 + console.log('[SECTORES] onMount started');
725 isMobile = 'ontouchstart' in window || navigator.maxTouchPoints > 0; 726 isMobile = 'ontouchstart' in window || navigator.maxTouchPoints > 0;
726 727
727 requestAnimationFrame(() => { 728 requestAnimationFrame(() => {
...@@ -735,10 +736,10 @@ ...@@ -735,10 +736,10 @@
735 const data = await res.json(); 736 const data = await res.json();
736 737
737 if (Array.isArray(data)) { 738 if (Array.isArray(data)) {
738 - allItems = data; 739 + allItems = data.filter(item => String(item.acteco) !== '0' && !String(item.acteco).startsWith('0.') && !/desconocido/i.test(item.desc_acteco || ''));
739 740
740 // Sectores = items de profundidad 1 741 // Sectores = items de profundidad 1
741 - sectores = data 742 + sectores = allItems
742 .filter(item => getDepth(item.acteco) === 1) 743 .filter(item => getDepth(item.acteco) === 1)
743 .sort((a, b) => String(a.acteco).localeCompare(String(b.acteco), undefined, { numeric: true })); 744 .sort((a, b) => String(a.acteco).localeCompare(String(b.acteco), undefined, { numeric: true }));
744 745
...@@ -766,6 +767,7 @@ ...@@ -766,6 +767,7 @@
766 selectedYear = 2025; 767 selectedYear = 2025;
767 } 768 }
768 769
770 + console.log('[SECTORES] loading done, sectores:', sectores.length, 'allItems:', allItems.length, 'selectedYear:', selectedYear, 'layoutMounted:', layoutMounted, 'viewMode:', viewMode);
769 loading = false; 771 loading = false;
770 }); 772 });
771 773
...@@ -1223,18 +1225,19 @@ ...@@ -1223,18 +1225,19 @@
1223 .slice(0, 20); 1225 .slice(0, 20);
1224 } 1226 }
1225 1227
1226 - function parseDescripciones(descripcionesStr) { 1228 + function parseDescripciones(descs) {
1227 - if (!descripcionesStr) return []; 1229 + if (!descs) return [];
1228 - try { 1230 + let arr;
1229 - const parsed = JSON.parse(descripcionesStr); 1231 + if (typeof descs === 'string') {
1230 - return parsed.sort((a, b) => { 1232 + try { arr = JSON.parse(descs); } catch { return []; }
1231 - const maxYearA = getMaxYear(a.rangos); 1233 + } else {
1232 - const maxYearB = getMaxYear(b.rangos); 1234 + arr = Array.isArray(descs) ? descs : [];
1233 - return maxYearB - maxYearA;
1234 - });
1235 - } catch {
1236 - return [];
1237 } 1235 }
1236 + return [...arr].sort((a, b) => {
1237 + const maxYearA = getMaxYear(a.gestion || a.rangos);
1238 + const maxYearB = getMaxYear(b.gestion || b.rangos);
1239 + return maxYearB - maxYearA;
1240 + });
1238 } 1241 }
1239 1242
1240 function getMaxYear(rangos) { 1243 function getMaxYear(rangos) {
......
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
4 const YEARS = Array.from({ length: 10 }, (_, i) => 2016 + i); 4 const YEARS = Array.from({ length: 10 }, (_, i) => 2016 + i);
5 5
6 let mounted = $state(false); 6 let mounted = $state(false);
7 - let dataset = $state('gastos'); 7 + let dataset = $state('gasto');
8 let entities = $state([]); 8 let entities = $state([]);
9 let entitySearch = $state(''); 9 let entitySearch = $state('');
10 let entityFocused = $state(false); 10 let entityFocused = $state(false);
...@@ -18,6 +18,13 @@ ...@@ -18,6 +18,13 @@
18 } 18 }
19 19
20 function buildUrl(partition, value) { 20 function buildUrl(partition, value) {
21 + if (partition === 'completo') {
22 + return `${DOWNLOAD_BASE}${dataset}/ultimo/${dataset}.zip`;
23 + } else if (partition === 'gestion') {
24 + return `${DOWNLOAD_BASE}${dataset}/gestiones/gestion_${value}.zip`;
25 + } else if (partition === 'entidad') {
26 + return `${DOWNLOAD_BASE}${dataset}/entidades/entidad_${value}.zip`;
27 + }
21 return `${DOWNLOAD_BASE}${dataset}/${partition}/${value}`; 28 return `${DOWNLOAD_BASE}${dataset}/${partition}/${value}`;
22 } 29 }
23 30
...@@ -80,8 +87,8 @@ ...@@ -80,8 +87,8 @@
80 <div class="section"> 87 <div class="section">
81 <span class="section-label">Base</span> 88 <span class="section-label">Base</span>
82 <div class="toggle-group"> 89 <div class="toggle-group">
83 - <button class="toggle-btn" class:active={dataset === 'gastos'} onclick={() => { dataset = 'gastos'; selectedEntity = null; }}>Gastos</button> 90 + <button class="toggle-btn" class:active={dataset === 'gasto'} onclick={() => { dataset = 'gasto'; selectedEntity = null; }}>Gastos</button>
84 - <button class="toggle-btn" class:active={dataset === 'ingresos'} onclick={() => { dataset = 'ingresos'; selectedEntity = null; }}>Ingresos</button> 91 + <button class="toggle-btn" class:active={dataset === 'ingreso'} onclick={() => { dataset = 'ingreso'; selectedEntity = null; }}>Ingresos</button>
85 </div> 92 </div>
86 </div> 93 </div>
87 94
...@@ -90,7 +97,7 @@ ...@@ -90,7 +97,7 @@
90 <h2 class="section-title">Completo</h2> 97 <h2 class="section-title">Completo</h2>
91 <a href={buildUrl('completo', 'ultimo')} class="download-link"> 98 <a href={buildUrl('completo', 'ultimo')} class="download-link">
92 <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"/><polyline points="7 10 12 15 17 10"/><line x1="12" y1="15" x2="12" y2="3"/></svg> 99 <svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4"/><polyline points="7 10 12 15 17 10"/><line x1="12" y1="15" x2="12" y2="3"/></svg>
93 - Descargar todo ({dataset}) 100 + Descargar todo ({dataset === 'gasto' ? 'gastos' : 'ingresos'})
94 </a> 101 </a>
95 </div> 102 </div>
96 103
...@@ -159,20 +166,23 @@ ...@@ -159,20 +166,23 @@
159 166
160 <style> 167 <style>
161 .page { 168 .page {
162 - min-height: 100vh; 169 + height: 100dvh;
163 background: var(--theme-body); 170 background: var(--theme-body);
164 color: var(--theme-titulo); 171 color: var(--theme-titulo);
165 - font-family: var(--font-sans), -apple-system, sans-serif; 172 + font-family: 'Qanelas', var(--font-sans), -apple-system, sans-serif;
166 opacity: 0; 173 opacity: 0;
167 transition: opacity 0.4s; 174 transition: opacity 0.4s;
175 + padding-top: 60px;
176 + box-sizing: border-box;
177 + overflow-y: auto;
168 } 178 }
169 .page.mounted { opacity: 1; } 179 .page.mounted { opacity: 1; }
170 - :global(html:not(.dark)) .page { background: #f5f5f7; } 180 + :global(html:not(.dark)) .page { background: #f2f2f4; }
171 181
172 .layout { 182 .layout {
173 max-width: 700px; 183 max-width: 700px;
174 margin: 0 auto; 184 margin: 0 auto;
175 - padding: 100px 2rem 3rem; 185 + padding: 1.5rem 2rem 2rem;
176 } 186 }
177 187
178 .title { 188 .title {
...@@ -180,96 +190,137 @@ ...@@ -180,96 +190,137 @@
180 font-size: 2rem; 190 font-size: 2rem;
181 font-weight: 400; 191 font-weight: 400;
182 margin: 0 0 0.25rem; 192 margin: 0 0 0.25rem;
193 + letter-spacing: -0.02em;
183 } 194 }
184 195
185 .subtitle { 196 .subtitle {
197 + font-family: 'Qanelas', var(--font-sans);
186 font-size: 0.875rem; 198 font-size: 0.875rem;
187 color: var(--theme-texto); 199 color: var(--theme-texto);
188 - opacity: 0.6; 200 + opacity: 0.7;
189 - margin: 0 0 2rem; 201 + margin: 0 0 1.5rem;
202 + line-height: 1.5;
190 } 203 }
191 204
192 - .section { margin-bottom: 2rem; } 205 + .section {
206 + margin-bottom: 1.25rem;
207 + padding-bottom: 1.25rem;
208 + border-bottom: 1px solid var(--theme-borde);
209 + }
210 + .section:last-child { border-bottom: none; }
193 211
194 .section-label { 212 .section-label {
195 - font-family: 'DM Mono', monospace; 213 + font-family: 'JetBrains Mono', 'DM Mono', monospace;
196 font-size: 0.6875rem; 214 font-size: 0.6875rem;
197 - letter-spacing: 0.1em; 215 + letter-spacing: 0.12em;
198 text-transform: uppercase; 216 text-transform: uppercase;
199 color: var(--theme-texto); 217 color: var(--theme-texto);
200 opacity: 0.5; 218 opacity: 0.5;
201 display: block; 219 display: block;
202 - margin-bottom: 0.5rem; 220 + margin-bottom: 0.75rem;
203 } 221 }
204 222
205 .section-title { 223 .section-title {
224 + font-family: 'Qanelas', var(--font-sans);
206 font-size: 1rem; 225 font-size: 1rem;
207 - font-weight: 700; 226 + font-weight: 800;
208 - margin: 0 0 0.75rem; 227 + margin: 0 0 0.625rem;
228 + letter-spacing: -0.01em;
209 } 229 }
210 230
211 /* Toggle */ 231 /* Toggle */
212 .toggle-group { 232 .toggle-group {
213 display: flex; 233 display: flex;
214 - gap: 0.25rem; 234 + gap: 0;
215 - background: var(--theme-surface); 235 + background: #2A2A27;
216 - border-radius: 8px; 236 + border: 1px solid rgba(255,255,255,0.08);
237 + border-radius: 10px;
217 padding: 3px; 238 padding: 3px;
218 width: fit-content; 239 width: fit-content;
219 } 240 }
220 241
221 .toggle-btn { 242 .toggle-btn {
222 - font-size: 0.8125rem; 243 + font-family: 'Qanelas', var(--font-sans);
223 - font-weight: 500; 244 + font-size: 0.875rem;
224 - padding: 0.375rem 1rem; 245 + font-weight: 600;
246 + padding: 0.5rem 1.5rem;
225 border: none; 247 border: none;
226 - border-radius: 6px; 248 + border-radius: 8px;
227 background: transparent; 249 background: transparent;
228 color: var(--theme-texto); 250 color: var(--theme-texto);
229 cursor: pointer; 251 cursor: pointer;
230 - transition: all 0.15s; 252 + transition: all 0.2s;
231 } 253 }
232 .toggle-btn:hover { color: var(--theme-titulo); } 254 .toggle-btn:hover { color: var(--theme-titulo); }
233 .toggle-btn.active { 255 .toggle-btn.active {
234 - background: var(--theme-accent); 256 + background: rgba(255,255,255,0.12);
235 - color: white; 257 + color: var(--theme-titulo);
236 - font-weight: 600; 258 + font-weight: 700;
259 + }
260 + :global(html:not(.dark)) .toggle-btn.active {
261 + background: rgba(0,0,0,0.06);
262 + color: var(--theme-titulo);
237 } 263 }
238 264
239 /* Download link */ 265 /* Download link */
240 .download-link { 266 .download-link {
241 display: inline-flex; 267 display: inline-flex;
242 align-items: center; 268 align-items: center;
243 - gap: 0.375rem; 269 + gap: 0.5rem;
244 - font-size: 0.8125rem; 270 + font-family: 'Qanelas', var(--font-sans);
271 + font-size: 0.9375rem;
272 + font-weight: 600;
245 color: var(--theme-accent); 273 color: var(--theme-accent);
246 text-decoration: none; 274 text-decoration: none;
247 - border-bottom: 1px dotted rgba(201, 167, 81, 0.4); 275 + padding: 0.625rem 1.25rem;
248 - padding-bottom: 1px; 276 + border: 1px solid var(--theme-accent);
249 - transition: opacity 0.15s; 277 + border-radius: 10px;
278 + transition: all 0.2s;
279 + }
280 + .download-link:hover {
281 + background: var(--theme-accent);
282 + color: #1C1C1A;
283 + }
284 + :global(html:not(.dark)) .download-link {
285 + border-color: rgba(0,0,0,0.12);
286 + color: var(--theme-titulo);
287 + }
288 + :global(html:not(.dark)) .download-link:hover {
289 + background: rgba(0,0,0,0.03);
290 + color: var(--theme-titulo);
250 } 291 }
251 - .download-link:hover { opacity: 0.7; }
252 292
253 /* Years */ 293 /* Years */
254 .year-grid { 294 .year-grid {
255 - display: flex; 295 + display: grid;
256 - flex-wrap: wrap; 296 + grid-template-columns: repeat(auto-fill, minmax(80px, 1fr));
257 - gap: 0.5rem; 297 + gap: 0.625rem;
258 } 298 }
259 299
260 .year-link { 300 .year-link {
261 - font-family: 'DM Mono', monospace; 301 + font-family: 'Qanelas', var(--font-sans);
262 - font-size: 0.75rem; 302 + font-size: 0.8125rem;
263 - padding: 0.375rem 0.75rem; 303 + font-weight: 500;
264 - border: 1px solid var(--theme-borde); 304 + padding: 0.625rem;
265 - border-radius: 6px; 305 + background: #2A2A27;
306 + border: 1px solid rgba(255,255,255,0.08);
307 + border-radius: 10px;
266 color: var(--theme-titulo); 308 color: var(--theme-titulo);
267 text-decoration: none; 309 text-decoration: none;
268 - transition: all 0.15s; 310 + text-align: center;
311 + transition: all 0.2s;
269 } 312 }
270 .year-link:hover { 313 .year-link:hover {
271 border-color: var(--theme-accent); 314 border-color: var(--theme-accent);
272 color: var(--theme-accent); 315 color: var(--theme-accent);
316 + background: rgba(201, 167, 81, 0.06);
317 + transform: translateY(-1px);
318 + }
319 + :global(html:not(.dark)) .year-link:hover {
320 + border-color: rgba(0,0,0,0.15);
321 + color: var(--theme-titulo);
322 + background: rgba(0,0,0,0.03);
323 + transform: none;
273 } 324 }
274 325
275 /* Entity search */ 326 /* Entity search */
...@@ -279,39 +330,43 @@ ...@@ -279,39 +330,43 @@
279 330
280 .search-input { 331 .search-input {
281 width: 100%; 332 width: 100%;
282 - max-width: 400px; 333 + max-width: 480px;
283 - padding: 0.625rem 1rem; 334 + padding: 0.75rem 1.25rem;
284 border: 1px solid var(--theme-borde); 335 border: 1px solid var(--theme-borde);
285 - border-radius: 8px; 336 + border-radius: 10px;
286 - background: var(--theme-surface); 337 + background: #2A2A27;
287 color: var(--theme-titulo); 338 color: var(--theme-titulo);
288 - font-size: 0.8125rem; 339 + font-family: 'Qanelas', var(--font-sans);
340 + font-size: 0.9375rem;
289 outline: none; 341 outline: none;
290 - transition: border-color 0.15s; 342 + transition: border-color 0.2s, box-shadow 0.2s;
291 } 343 }
292 - .search-input:focus { border-color: var(--theme-accent); } 344 + .search-input:focus {
293 - .search-input::placeholder { color: var(--theme-texto); opacity: 0.5; } 345 + border-color: var(--theme-accent);
346 + box-shadow: 0 0 0 3px rgba(201, 167, 81, 0.12);
347 + }
348 + .search-input::placeholder { color: var(--theme-texto); opacity: 0.4; }
294 349
295 .search-status { 350 .search-status {
296 display: block; 351 display: block;
297 font-size: 0.75rem; 352 font-size: 0.75rem;
298 color: var(--theme-texto); 353 color: var(--theme-texto);
299 opacity: 0.6; 354 opacity: 0.6;
300 - margin-top: 0.375rem; 355 + margin-top: 0.5rem;
301 } 356 }
302 .search-status.error { color: #b42318; opacity: 1; } 357 .search-status.error { color: #b42318; opacity: 1; }
303 358
304 .search-dropdown { 359 .search-dropdown {
305 position: absolute; 360 position: absolute;
306 - top: calc(100% + 4px); 361 + top: calc(100% + 6px);
307 left: 0; 362 left: 0;
308 - max-width: 400px; 363 + max-width: 480px;
309 width: 100%; 364 width: 100%;
310 background: var(--theme-surface); 365 background: var(--theme-surface);
311 border: 1px solid var(--theme-borde); 366 border: 1px solid var(--theme-borde);
312 - border-radius: 8px; 367 + border-radius: 12px;
313 - box-shadow: 0 8px 24px rgba(0, 0, 0, 0.12); 368 + box-shadow: 0 12px 32px rgba(0, 0, 0, 0.15);
314 - max-height: 240px; 369 + max-height: 280px;
315 overflow-y: auto; 370 overflow-y: auto;
316 z-index: 10; 371 z-index: 10;
317 } 372 }
...@@ -320,7 +375,7 @@ ...@@ -320,7 +375,7 @@
320 display: flex; 375 display: flex;
321 flex-direction: column; 376 flex-direction: column;
322 width: 100%; 377 width: 100%;
323 - padding: 0.625rem 1rem; 378 + padding: 0.75rem 1.25rem;
324 border: none; 379 border: none;
325 border-top: 1px solid var(--theme-borde); 380 border-top: 1px solid var(--theme-borde);
326 background: transparent; 381 background: transparent;
...@@ -329,32 +384,53 @@ ...@@ -329,32 +384,53 @@
329 transition: background 0.15s; 384 transition: background 0.15s;
330 } 385 }
331 .search-item:first-child { border-top: none; } 386 .search-item:first-child { border-top: none; }
332 - .search-item:hover, .search-item.active { background: var(--theme-surface-hover, rgba(128,128,128,0.08)); } 387 + .search-item:hover, .search-item.active { background: var(--theme-surface-hover, rgba(128,128,128,0.06)); }
333 388
334 - .item-name { font-size: 0.8125rem; color: var(--theme-titulo); } 389 + .item-name {
335 - .item-code { font-family: 'DM Mono', monospace; font-size: 0.6875rem; color: var(--theme-texto); opacity: 0.5; } 390 + font-family: 'Qanelas', var(--font-sans);
391 + font-size: 0.875rem;
392 + font-weight: 500;
393 + color: var(--theme-titulo);
394 + }
395 + .item-code {
396 + font-family: 'JetBrains Mono', 'DM Mono', monospace;
397 + font-size: 0.6875rem;
398 + color: var(--theme-texto);
399 + opacity: 0.4;
400 + margin-top: 2px;
401 + }
336 402
337 .entity-result { 403 .entity-result {
338 display: flex; 404 display: flex;
339 align-items: center; 405 align-items: center;
340 justify-content: space-between; 406 justify-content: space-between;
341 gap: 1rem; 407 gap: 1rem;
342 - margin-top: 1rem; 408 + margin-top: 1.25rem;
343 - padding: 0.75rem 1rem; 409 + padding: 1rem 1.25rem;
344 - background: var(--theme-surface); 410 + background: #2A2A27;
345 - border-radius: 8px; 411 + border: 1px solid rgba(255,255,255,0.08);
346 - max-width: 400px; 412 + border-radius: 12px;
413 + max-width: 480px;
347 } 414 }
348 415
349 .entity-name { 416 .entity-name {
350 - font-size: 0.8125rem; 417 + font-family: 'Qanelas', var(--font-sans);
351 - font-weight: 500; 418 + font-size: 0.9375rem;
419 + font-weight: 600;
352 color: var(--theme-titulo); 420 color: var(--theme-titulo);
353 } 421 }
354 422
423 + :global(html:not(.dark)) .toggle-group { background: #ffffff; border-color: rgba(0,0,0,0.08); }
424 + :global(html:not(.dark)) .year-link { background: #ffffff; border-color: rgba(0,0,0,0.08); }
425 + :global(html:not(.dark)) .search-input { background: #ffffff; border-color: rgba(0,0,0,0.08); }
426 + :global(html:not(.dark)) .entity-result { background: #ffffff; border-color: rgba(0,0,0,0.08); }
427 + :global(html:not(.dark)) .search-dropdown { background: #ffffff; }
428 +
355 @media (max-width: 640px) { 429 @media (max-width: 640px) {
356 - .layout { padding: 80px 1rem 2rem; } 430 + .layout { padding: 1rem 1rem 2rem; }
357 - .title { font-size: 1.5rem; } 431 + .title { font-size: 2rem; }
432 + .year-grid { grid-template-columns: repeat(auto-fill, minmax(70px, 1fr)); }
358 .search-input, .search-dropdown, .entity-result { max-width: 100%; } 433 .search-input, .search-dropdown, .entity-result { max-width: 100%; }
434 + .toggle-btn { padding: 0.5rem 1rem; font-size: 0.8125rem; }
359 } 435 }
360 </style> 436 </style>
......
1 <script> 1 <script>
2 import { onMount, tick } from 'svelte'; 2 import { onMount, tick } from 'svelte';
3 + import { goto } from '$app/navigation';
3 import { page } from '$app/stores'; 4 import { page } from '$app/stores';
4 import * as d3 from 'd3'; 5 import * as d3 from 'd3';
5 6
...@@ -142,7 +143,7 @@ ...@@ -142,7 +143,7 @@
142 } 143 }
143 144
144 function navigateToEntity(item) { 145 function navigateToEntity(item) {
145 - window.location.href = `/entidad/${item.codigo}`; 146 + goto(`/entidad/${item.codigo}`);
146 } 147 }
147 148
148 function onSearchKeydown(e) { 149 function onSearchKeydown(e) {
......
1 +export const ssr = false;
2 +
1 import { error } from '@sveltejs/kit'; 3 import { error } from '@sveltejs/kit';
2 4
3 import { API_HOST } from '$lib/api.js'; 5 import { API_HOST } from '$lib/api.js';
......
1 +export const ssr = false;
2 +
1 import { error } from '@sveltejs/kit'; 3 import { error } from '@sveltejs/kit';
2 4
3 import { API_HOST } from '$lib/api.js'; 5 import { API_HOST } from '$lib/api.js';
...@@ -17,7 +19,7 @@ export async function load({ params }) { ...@@ -17,7 +19,7 @@ export async function load({ params }) {
17 const clasRes = await fetch(`${API_BASE}/clasificador`); 19 const clasRes = await fetch(`${API_BASE}/clasificador`);
18 if (clasRes.ok) { 20 if (clasRes.ok) {
19 const clasificador = await clasRes.json(); 21 const clasificador = await clasRes.json();
20 - const current = clasificador.find(c => c.organismo === parseInt(codigo)); 22 + const current = clasificador.find(c => String(c.organismo) === codigo);
21 if (current) { 23 if (current) {
22 // Padres: grupo y subgrupo (como objetos virtuales para navegación) 24 // Padres: grupo y subgrupo (como objetos virtuales para navegación)
23 padres = [ 25 padres = [
......
1 +export const ssr = false;
2 +
1 import { error } from '@sveltejs/kit'; 3 import { error } from '@sveltejs/kit';
2 4
3 import { API_HOST } from '$lib/api.js'; 5 import { API_HOST } from '$lib/api.js';
......
...@@ -19,10 +19,9 @@ ...@@ -19,10 +19,9 @@
19 </p> 19 </p>
20 20
21 <p class="p3"> 21 <p class="p3">
22 - La plataforma reúne más de veinte años de información sobre ingresos y gastos 22 + La plataforma reúne 10 años de información sobre ingresos y gastos
23 públicos, organizada mediante los clasificadores presupuestarios oficiales y a 23 públicos, organizada mediante los clasificadores presupuestarios oficiales y a
24 - través de los programas y proyectos de inversión pública. Los datos se actualizan 24 + través de los programas y proyectos de inversión pública.
25 - semanalmente y abarcan a todas las entidades del sector público.
26 </p> 25 </p>
27 26
28 <p class="p3"> 27 <p class="p3">
......
1 <script> 1 <script>
2 import { onMount, tick } from 'svelte'; 2 import { onMount, tick } from 'svelte';
3 + import { goto } from '$app/navigation';
3 import { page } from '$app/stores'; 4 import { page } from '$app/stores';
4 import { get } from 'svelte/store'; 5 import { get } from 'svelte/store';
5 import * as d3 from 'd3'; 6 import * as d3 from 'd3';
...@@ -224,7 +225,7 @@ ...@@ -224,7 +225,7 @@
224 } 225 }
225 226
226 function navigateToEntity(item) { 227 function navigateToEntity(item) {
227 - window.location.href = `/ubicacion/${item.codigo}`; 228 + goto(`/ubicacion/${item.codigo}`);
228 } 229 }
229 230
230 function onSearchKeydown(e) { 231 function onSearchKeydown(e) {
......
1 +<!DOCTYPE html>
2 +<html lang="es">
3 +<head>
4 + <meta charset="utf-8">
5 + <meta name="viewport" content="width=device-width, initial-scale=1">
6 + <title>Descargas presupuestarias</title>
7 + <style>
8 + :root {
9 + --text: #1f1f1f;
10 + --muted: #666;
11 + --link: #0b57d0;
12 + }
13 +
14 + * {
15 + box-sizing: border-box;
16 + }
17 +
18 + body {
19 + margin: 0;
20 + font-family: sans-serif;
21 + color: var(--text);
22 + line-height: 1.5;
23 + }
24 +
25 + main {
26 + max-width: 800px;
27 + margin: 0 auto;
28 + padding: 24px 16px 40px;
29 + }
30 +
31 + h1,
32 + h2,
33 + p {
34 + margin-top: 0;
35 + }
36 +
37 + h1 {
38 + margin-bottom: 16px;
39 + }
40 +
41 + h2 {
42 + margin-bottom: 8px;
43 + font-size: 1rem;
44 + }
45 +
46 + section {
47 + margin-bottom: 20px;
48 + }
49 +
50 + label,
51 + input,
52 + button {
53 + font: inherit;
54 + }
55 +
56 + input {
57 + width: 100%;
58 + padding: 8px 10px;
59 + border: 1px solid #ccc;
60 + background: #fff;
61 + }
62 +
63 + .field {
64 + display: grid;
65 + gap: 6px;
66 + }
67 +
68 + .radio-group {
69 + display: flex;
70 + flex-wrap: wrap;
71 + gap: 12px;
72 + }
73 +
74 + .radio-option {
75 + display: inline-flex;
76 + align-items: center;
77 + gap: 8px;
78 + }
79 +
80 + .radio-option input {
81 + width: auto;
82 + padding: 0;
83 + border: 0;
84 + }
85 +
86 + .links,
87 + .results {
88 + padding: 0;
89 + margin: 0;
90 + list-style: none;
91 + }
92 +
93 + .links {
94 + display: flex;
95 + flex-wrap: wrap;
96 + gap: 8px 12px;
97 + }
98 +
99 + .search-area {
100 + position: relative;
101 + }
102 +
103 + .results {
104 + position: absolute;
105 + top: calc(100% + 4px);
106 + left: 0;
107 + right: 0;
108 + z-index: 10;
109 + max-height: 240px;
110 + overflow-y: auto;
111 + border-top: 1px solid #ddd;
112 + border-bottom: 1px solid #ddd;
113 + background: #fff;
114 + }
115 +
116 + .results[hidden],
117 + .entity-downloads[hidden] {
118 + display: none;
119 + }
120 +
121 + .results li + li {
122 + border-top: 1px solid #ddd;
123 + }
124 +
125 + .result-button {
126 + display: block;
127 + width: 100%;
128 + padding: 10px 0;
129 + border: 0;
130 + background: transparent;
131 + text-align: left;
132 + cursor: pointer;
133 + }
134 +
135 + .result-button:hover,
136 + .result-button.active,
137 + .result-button:focus {
138 + background: #f3f3f3;
139 + }
140 +
141 + .meta,
142 + .status {
143 + color: var(--muted);
144 + }
145 +
146 + .status {
147 + min-height: 1.25rem;
148 + margin: 6px 0 0;
149 + font-size: 0.9rem;
150 + }
151 +
152 + .status.error {
153 + color: #b42318;
154 + }
155 +
156 + .entity-downloads p {
157 + margin-bottom: 8px;
158 + }
159 +
160 + a {
161 + color: var(--link);
162 + }
163 + </style>
164 +</head>
165 +<body>
166 + <main>
167 + <h1>Descargas</h1>
168 +
169 + <section>
170 + <div class="field">
171 + <span>Base</span>
172 + <div class="radio-group">
173 + <label class="radio-option">
174 + <input type="radio" name="dataset" value="gastos" checked>
175 + <span>Gastos</span>
176 + </label>
177 + <label class="radio-option">
178 + <input type="radio" name="dataset" value="ingresos">
179 + <span>Ingresos</span>
180 + </label>
181 + </div>
182 + </div>
183 + </section>
184 +
185 + <section>
186 + <h2>Completo</h2>
187 + <ul class="links" id="full-download"></ul>
188 + </section>
189 +
190 + <section>
191 + <h2>Por gestión</h2>
192 + <ul class="links" id="year-downloads"></ul>
193 + </section>
194 +
195 + <section>
196 + <h2>Por entidad</h2>
197 + <div class="field search-area">
198 + <label for="entity-search">Entidad</label>
199 + <input
200 + id="entity-search"
201 + name="entity-search"
202 + type="search"
203 + placeholder="Busca entidades"
204 + autocomplete="off"
205 + >
206 + <ul class="results" id="entity-results" hidden></ul>
207 + </div>
208 + <p class="status" id="entity-status">Cargando entidades...</p>
209 + <div class="entity-downloads" id="entity-downloads" hidden>
210 + <p id="entity-name"></p>
211 + <ul class="links" id="entity-links"></ul>
212 + </div>
213 + </section>
214 + </main>
215 +
216 + <script>
217 + const API_BASE = "http://136.112.29.74/api/";
218 + const DOWNLOAD_BASE = "https://abierto.economiayfinanzas.gob.bo/presupuesto/descargas/";
219 + const ENTITY_API = `${API_BASE}entidad/clasificador`;
220 + const YEARS = Array.from({ length: 10 }, (_, index) => 2016 + index);
221 + const MAX_ENTITY_RESULTS = 12;
222 + let entities = [];
223 + let activeResultIndex = -1;
224 +
225 + function setStatus(message, type = "info") {
226 + const status = document.getElementById("entity-status");
227 + status.textContent = message;
228 + status.classList.toggle("error", type === "error");
229 + }
230 +
231 + function currentDataset() {
232 + return document.querySelector('input[name="dataset"]:checked').value;
233 + }
234 +
235 + function buildUrl(partition, value) {
236 + return `${DOWNLOAD_BASE}${currentDataset()}/${partition}/${value}`;
237 + }
238 +
239 + function normalizeText(value) {
240 + return value
241 + .normalize("NFD")
242 + .replace(/[\u0300-\u036f]/g, "")
243 + .toLowerCase()
244 + .trim();
245 + }
246 +
247 + function createLinkItem(label, href) {
248 + const item = document.createElement("li");
249 + const link = document.createElement("a");
250 + link.href = href;
251 + link.textContent = label;
252 + item.appendChild(link);
253 + return item;
254 + }
255 +
256 + function renderFullDownload() {
257 + const container = document.getElementById("full-download");
258 + container.innerHTML = "";
259 + container.appendChild(createLinkItem("Descargar", buildUrl("completo", "ultimo")));
260 + }
261 +
262 + function renderYearDownloads() {
263 + const container = document.getElementById("year-downloads");
264 + container.innerHTML = "";
265 +
266 + YEARS.forEach((year) => {
267 + container.appendChild(createLinkItem(String(year), buildUrl("gestion", year)));
268 + });
269 + }
270 +
271 + function renderEntityDownloads(entity) {
272 + const wrapper = document.getElementById("entity-downloads");
273 + const name = document.getElementById("entity-name");
274 + const links = document.getElementById("entity-links");
275 +
276 + name.textContent = entity.desc_entidad;
277 + links.innerHTML = "";
278 + links.appendChild(createLinkItem("Descargar", buildUrl("entidad", entity.entidad)));
279 + wrapper.hidden = false;
280 + }
281 +
282 + function selectEntity(entity) {
283 + document.getElementById("entity-search").value = entity.desc_entidad;
284 + document.getElementById("entity-results").hidden = true;
285 + activeResultIndex = -1;
286 + renderEntityDownloads(entity);
287 + }
288 +
289 + function resultButtons() {
290 + return Array.from(document.querySelectorAll("#entity-results .result-button"));
291 + }
292 +
293 + function setActiveResult(index) {
294 + const buttons = resultButtons();
295 +
296 + buttons.forEach((button, buttonIndex) => {
297 + button.classList.toggle("active", buttonIndex === index);
298 + });
299 +
300 + activeResultIndex = index;
301 +
302 + if (index >= 0 && buttons[index]) {
303 + buttons[index].scrollIntoView({ block: "nearest" });
304 + }
305 + }
306 +
307 + function renderEntityResults(matches) {
308 + const results = document.getElementById("entity-results");
309 + results.innerHTML = "";
310 + activeResultIndex = -1;
311 +
312 + if (!matches.length) {
313 + results.hidden = true;
314 + return;
315 + }
316 +
317 + matches.forEach((entity) => {
318 + const item = document.createElement("li");
319 + const button = document.createElement("button");
320 + const meta = document.createElement("span");
321 +
322 + button.type = "button";
323 + button.className = "result-button";
324 + button.textContent = entity.desc_entidad;
325 + button.addEventListener("click", () => selectEntity(entity));
326 +
327 + meta.className = "meta";
328 + meta.textContent = `Código ${entity.entidad}`;
329 + button.appendChild(document.createElement("br"));
330 + button.appendChild(meta);
331 +
332 + item.appendChild(button);
333 + results.appendChild(item);
334 + });
335 +
336 + results.hidden = false;
337 + }
338 +
339 + function moveActiveResult(direction) {
340 + const buttons = resultButtons();
341 +
342 + if (!buttons.length) {
343 + return;
344 + }
345 +
346 + if (activeResultIndex === -1) {
347 + setActiveResult(direction > 0 ? 0 : buttons.length - 1);
348 + return;
349 + }
350 +
351 + const nextIndex = (activeResultIndex + direction + buttons.length) % buttons.length;
352 + setActiveResult(nextIndex);
353 + }
354 +
355 + function updateEntitySearch() {
356 + const query = normalizeText(document.getElementById("entity-search").value);
357 +
358 + document.getElementById("entity-downloads").hidden = true;
359 +
360 + if (!entities.length) {
361 + return;
362 + }
363 +
364 + if (!query) {
365 + setStatus("");
366 + document.getElementById("entity-results").hidden = true;
367 + activeResultIndex = -1;
368 + return;
369 + }
370 +
371 + const matches = entities
372 + .filter((entity) => entity.normalizedName.includes(query))
373 + .slice(0, MAX_ENTITY_RESULTS);
374 +
375 + if (!matches.length) {
376 + setStatus("Sin resultados.", "error");
377 + document.getElementById("entity-results").hidden = true;
378 + activeResultIndex = -1;
379 + return;
380 + }
381 +
382 + setStatus(`${matches.length} resultado(s).`);
383 + renderEntityResults(matches);
384 + }
385 +
386 + async function loadEntities() {
387 + try {
388 + const response = await fetch(ENTITY_API);
389 +
390 + if (!response.ok) {
391 + throw new Error(`HTTP ${response.status}`);
392 + }
393 +
394 + const data = await response.json();
395 +
396 + entities = data
397 + .filter((entity) => entity && entity.entidad && entity.desc_entidad)
398 + .map((entity) => ({
399 + entidad: entity.entidad,
400 + desc_entidad: entity.desc_entidad,
401 + normalizedName: normalizeText(entity.desc_entidad)
402 + }));
403 +
404 + setStatus("");
405 + } catch (error) {
406 + setStatus("No se pudieron cargar las entidades.", "error");
407 + }
408 + }
409 +
410 + function rerenderDownloads() {
411 + renderFullDownload();
412 + renderYearDownloads();
413 +
414 + const selectedName = document.getElementById("entity-search").value;
415 + const selectedEntity = entities.find(
416 + (entity) => entity.desc_entidad === selectedName
417 + );
418 +
419 + if (selectedEntity) {
420 + renderEntityDownloads(selectedEntity);
421 + }
422 + }
423 +
424 + document.querySelectorAll('input[name="dataset"]').forEach((input) => {
425 + input.addEventListener("change", rerenderDownloads);
426 + });
427 + document.getElementById("entity-search").addEventListener("input", updateEntitySearch);
428 + document.getElementById("entity-search").addEventListener("keydown", (event) => {
429 + const results = document.getElementById("entity-results");
430 +
431 + if (event.key === "ArrowDown") {
432 + event.preventDefault();
433 + if (!results.hidden) {
434 + moveActiveResult(1);
435 + }
436 + }
437 +
438 + if (event.key === "ArrowUp") {
439 + event.preventDefault();
440 + if (!results.hidden) {
441 + moveActiveResult(-1);
442 + }
443 + }
444 +
445 + if (event.key === "Enter") {
446 + const buttons = resultButtons();
447 + if (!results.hidden && activeResultIndex >= 0 && buttons[activeResultIndex]) {
448 + event.preventDefault();
449 + buttons[activeResultIndex].click();
450 + }
451 + }
452 +
453 + if (event.key === "Escape") {
454 + results.hidden = true;
455 + activeResultIndex = -1;
456 + }
457 + });
458 +
459 + renderFullDownload();
460 + renderYearDownloads();
461 + loadEntities();
462 + </script>
463 +</body>
464 +</html>
No preview for this file type
No preview for this file type
No preview for this file type
1 -import adapter from '@sveltejs/adapter-auto'; 1 +import adapter from '@sveltejs/adapter-node';
2 2
3 /** @type {import('@sveltejs/kit').Config} */ 3 /** @type {import('@sveltejs/kit').Config} */
4 const config = { 4 const config = {
5 kit: { 5 kit: {
6 - // adapter-auto only supports some environments, see https://svelte.dev/docs/kit/adapter-auto for a list.
7 - // If your environment is not supported, or you settled on a specific environment, switch out the adapter.
8 - // See https://svelte.dev/docs/kit/adapters for more information about adapters.
9 adapter: adapter() 6 adapter: adapter()
10 } 7 }
11 }; 8 };
......
...@@ -377,7 +377,7 @@ Sector → Subsector → Área → Subárea → Entidad ...@@ -377,7 +377,7 @@ Sector → Subsector → Área → Subárea → Entidad
377 377
378 --- 378 ---
379 379
380 -## Tablas de Vista de Entidad 380 +## Tablas de Vista de Entidad"
381 381
382 ### 13. `entidad_resumen` - Resumen histórico por entidad/DA 382 ### 13. `entidad_resumen` - Resumen histórico por entidad/DA
383 383
......