@jjlmoya/utils-home 1.14.0 → 1.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. package/package.json +7 -4
  2. package/scripts/postinstall.mjs +27 -0
  3. package/src/entries.ts +23 -0
  4. package/src/tool/dewPointCalculator/component.astro +0 -232
  5. package/src/tool/dewPointCalculator/dew-point-calculator.css +230 -0
  6. package/src/tool/dewPointCalculator/entry.ts +32 -0
  7. package/src/tool/dewPointCalculator/index.ts +2 -34
  8. package/src/tool/heatingComparator/component.astro +0 -269
  9. package/src/tool/heatingComparator/entry.ts +30 -0
  10. package/src/tool/heatingComparator/heating-consumption-comparator.css +267 -0
  11. package/src/tool/heatingComparator/index.ts +2 -32
  12. package/src/tool/ledSavingCalculator/component.astro +0 -305
  13. package/src/tool/ledSavingCalculator/entry.ts +31 -0
  14. package/src/tool/ledSavingCalculator/index.ts +2 -33
  15. package/src/tool/ledSavingCalculator/led-saving-calculator.css +303 -0
  16. package/src/tool/projectorCalculator/component.astro +0 -359
  17. package/src/tool/projectorCalculator/entry.ts +31 -0
  18. package/src/tool/projectorCalculator/index.ts +2 -33
  19. package/src/tool/projectorCalculator/projector-throw-calculator.css +357 -0
  20. package/src/tool/qrGenerator/component.astro +0 -266
  21. package/src/tool/qrGenerator/entry.ts +30 -0
  22. package/src/tool/qrGenerator/index.ts +2 -32
  23. package/src/tool/qrGenerator/qr-generator.css +264 -0
  24. package/src/tool/solarCalculator/component.astro +0 -298
  25. package/src/tool/solarCalculator/entry.ts +30 -0
  26. package/src/tool/solarCalculator/index.ts +2 -32
  27. package/src/tool/solarCalculator/solar-panel-calculator.css +296 -0
  28. package/src/tool/tariffComparator/component.astro +0 -337
  29. package/src/tool/tariffComparator/electricity-tariff-comparator.css +335 -0
  30. package/src/tool/tariffComparator/entry.ts +31 -0
  31. package/src/tool/tariffComparator/index.ts +2 -33
  32. package/src/tools.ts +1 -1
@@ -208,362 +208,3 @@ const initial = calculateProjection(100, 16 / 9, 1.5);
208
208
  init();
209
209
  </script>
210
210
 
211
- <style>
212
- .proj-wrapper {
213
- --proj-p: #06b6d4;
214
-
215
- width: 100%;
216
- padding: 1rem 0;
217
- }
218
-
219
- .proj-card {
220
- background: var(--bg-surface);
221
- width: calc(100% - 24px);
222
- max-width: 960px;
223
- margin: 0 auto;
224
- border-radius: 24px;
225
- overflow: hidden;
226
- display: flex;
227
- flex-direction: column;
228
- border: 1px solid var(--border-color);
229
- color: var(--text-main);
230
- }
231
-
232
- @media (min-width: 768px) {
233
- .proj-card {
234
- flex-direction: row;
235
- min-height: 580px;
236
- }
237
- }
238
-
239
- .proj-left {
240
- flex: 0 0 auto;
241
- width: 100%;
242
- padding: 32px;
243
- border-bottom: 1px solid var(--border-color);
244
- display: flex;
245
- flex-direction: column;
246
- gap: 24px;
247
- }
248
-
249
- @media (min-width: 768px) {
250
- .proj-left {
251
- width: 360px;
252
- border-bottom: none;
253
- border-right: 1px solid var(--border-color);
254
- }
255
- }
256
-
257
- .proj-right {
258
- flex: 1;
259
- background: #020617;
260
- position: relative;
261
- overflow: hidden;
262
- display: flex;
263
- flex-direction: column;
264
- min-height: 380px;
265
- }
266
-
267
- .proj-viz-dots {
268
- position: absolute;
269
- inset: 0;
270
- opacity: 0.15;
271
- pointer-events: none;
272
- background-image: radial-gradient(#334155 1px, transparent 1px);
273
- background-size: 30px 30px;
274
- }
275
-
276
- .proj-sim-badge {
277
- position: relative;
278
- z-index: 1;
279
- display: flex;
280
- align-items: center;
281
- gap: 6px;
282
- padding: 16px 20px 0;
283
- font-size: 0.6rem;
284
- font-weight: 900;
285
- text-transform: uppercase;
286
- letter-spacing: 0.18em;
287
- color: #94a3b8;
288
- }
289
-
290
- .proj-sim-dot {
291
- width: 7px;
292
- height: 7px;
293
- border-radius: 50%;
294
- background: var(--proj-p);
295
- animation: proj-pulse 2s infinite;
296
- }
297
-
298
- @keyframes proj-pulse {
299
- 0%, 100% { opacity: 1; }
300
- 50% { opacity: 0.3; }
301
- }
302
-
303
- .proj-lens-pulse {
304
- animation: proj-pulse 2s infinite;
305
- }
306
-
307
- .proj-svg {
308
- flex: 1;
309
- width: 100%;
310
- position: relative;
311
- z-index: 1;
312
- }
313
-
314
- .proj-header {
315
- display: flex;
316
- flex-direction: column;
317
- gap: 4px;
318
- }
319
-
320
- .proj-title {
321
- font-size: 1.25rem;
322
- font-weight: 900;
323
- color: var(--text-main);
324
- margin: 0;
325
- }
326
-
327
- .proj-subtitle {
328
- font-size: 0.8125rem;
329
- color: var(--text-muted);
330
- margin: 0;
331
- }
332
-
333
- .proj-field {
334
- display: flex;
335
- flex-direction: column;
336
- gap: 10px;
337
- }
338
-
339
- .proj-field-header {
340
- display: flex;
341
- justify-content: space-between;
342
- align-items: center;
343
- }
344
-
345
- .proj-label {
346
- font-size: 0.6875rem;
347
- font-weight: 700;
348
- text-transform: uppercase;
349
- letter-spacing: 0.1em;
350
- color: var(--proj-p);
351
- }
352
-
353
- .proj-unit {
354
- font-size: 0.75rem;
355
- color: var(--text-muted);
356
- }
357
-
358
- .proj-slider {
359
- width: 100%;
360
- height: 6px;
361
- accent-color: var(--proj-p);
362
- cursor: pointer;
363
- border-radius: 9999px;
364
- }
365
-
366
- .proj-number-row {
367
- position: relative;
368
- display: flex;
369
- align-items: center;
370
- }
371
-
372
- .proj-number-input {
373
- width: 100%;
374
- font-size: 3rem;
375
- font-weight: 900;
376
- color: var(--text-main);
377
- background: transparent;
378
- border: none;
379
- border-bottom: 2px solid var(--border-color);
380
- padding: 4px 2rem 4px 0;
381
- outline: none;
382
- transition: border-color 0.2s;
383
- }
384
-
385
- .proj-number-input:focus {
386
- border-color: var(--proj-p);
387
- }
388
-
389
- .proj-number-unit {
390
- position: absolute;
391
- right: 4px;
392
- bottom: 8px;
393
- font-size: 1.5rem;
394
- color: var(--text-muted);
395
- font-weight: 300;
396
- }
397
-
398
- .proj-ratio-grid {
399
- display: grid;
400
- grid-template-columns: repeat(3, 1fr);
401
- gap: 8px;
402
- }
403
-
404
- .proj-ratio-btn {
405
- display: flex;
406
- flex-direction: column;
407
- align-items: center;
408
- gap: 4px;
409
- padding: 10px 8px;
410
- border-radius: 12px;
411
- border: 1px solid var(--border-color);
412
- background: var(--bg-surface);
413
- color: var(--text-muted);
414
- font-size: 0.8125rem;
415
- font-weight: 700;
416
- cursor: pointer;
417
- transition: all 0.2s;
418
- }
419
-
420
- .proj-ratio-btn:hover {
421
- border-color: var(--proj-p);
422
- color: var(--text-main);
423
- }
424
-
425
- .proj-ratio-active {
426
- background: var(--proj-p);
427
- color: #fff;
428
- border-color: var(--proj-p);
429
- box-shadow: 0 4px 14px rgba(6, 182, 212, 0.35);
430
- }
431
-
432
- .proj-ratio-icon {
433
- display: block;
434
- border: 2px solid currentcolor;
435
- border-radius: 2px;
436
- opacity: 0.6;
437
- }
438
-
439
- .proj-ratio-active .proj-ratio-icon {
440
- opacity: 1;
441
- border-color: #fff;
442
- }
443
-
444
- .ratio-169 {
445
- width: 28px;
446
- height: 16px;
447
- }
448
-
449
- .ratio-219 {
450
- width: 36px;
451
- height: 14px;
452
- }
453
-
454
- .ratio-43 {
455
- width: 20px;
456
- height: 16px;
457
- }
458
-
459
- .proj-ratio-sub {
460
- font-size: 0.625rem;
461
- font-weight: 500;
462
- opacity: 0.75;
463
- }
464
-
465
- .proj-hint-wrap {
466
- position: relative;
467
- }
468
-
469
- .proj-hint-icon {
470
- width: 16px;
471
- height: 16px;
472
- color: var(--text-muted);
473
- cursor: help;
474
- }
475
-
476
- .proj-hint-tooltip {
477
- position: absolute;
478
- bottom: calc(100% + 6px);
479
- right: 0;
480
- width: 220px;
481
- background: #1e293b;
482
- color: #e2e8f0;
483
- font-size: 0.75rem;
484
- font-weight: 400;
485
- padding: 10px 12px;
486
- border-radius: 10px;
487
- box-shadow: 0 8px 24px rgba(0,0,0,0.3);
488
- opacity: 0;
489
- pointer-events: none;
490
- transition: opacity 0.15s;
491
- z-index: 10;
492
- line-height: 1.5;
493
- }
494
-
495
- .proj-hint-wrap:hover .proj-hint-tooltip {
496
- opacity: 1;
497
- }
498
-
499
- .proj-throw-row {
500
- position: relative;
501
- display: flex;
502
- align-items: center;
503
- }
504
-
505
- .proj-throw-input {
506
- width: 100%;
507
- font-size: 2.5rem;
508
- font-weight: 900;
509
- color: var(--text-main);
510
- background: transparent;
511
- border: none;
512
- border-bottom: 2px solid var(--border-color);
513
- padding: 4px 3rem 4px 0;
514
- outline: none;
515
- transition: border-color 0.2s;
516
- }
517
-
518
- .proj-throw-input:focus {
519
- border-color: var(--proj-p);
520
- }
521
-
522
- .proj-throw-unit {
523
- position: absolute;
524
- right: 4px;
525
- bottom: 10px;
526
- font-size: 1.25rem;
527
- color: var(--text-muted);
528
- }
529
-
530
- .proj-results {
531
- background: rgba(6, 182, 212, 0.06);
532
- border: 1px solid rgba(6, 182, 212, 0.15);
533
- border-radius: 16px;
534
- padding: 18px;
535
- }
536
-
537
- .proj-results-grid {
538
- display: grid;
539
- grid-template-columns: 1fr 1fr;
540
- gap: 12px;
541
- margin-bottom: 14px;
542
- padding-bottom: 14px;
543
- border-bottom: 1px solid rgba(6, 182, 212, 0.15);
544
- }
545
-
546
- .proj-res-label {
547
- font-size: 0.625rem;
548
- font-weight: 900;
549
- text-transform: uppercase;
550
- letter-spacing: 0.12em;
551
- color: var(--proj-p);
552
- margin: 0 0 4px;
553
- }
554
-
555
- .proj-res-val {
556
- font-size: 1.125rem;
557
- font-weight: 700;
558
- color: var(--text-main);
559
- margin: 0;
560
- }
561
-
562
- .proj-distance-val {
563
- font-size: 2.5rem;
564
- font-weight: 900;
565
- color: var(--text-main);
566
- margin: 0;
567
- line-height: 1;
568
- }
569
- </style>
@@ -0,0 +1,31 @@
1
+ import type { HomeToolEntry, ToolLocaleContent } from '../../types';
2
+
3
+ import type { ProjectorCalculatorUI } from './ui';
4
+
5
+ export type ProjectorCalculatorLocaleContent = ToolLocaleContent<ProjectorCalculatorUI>;
6
+
7
+
8
+ export const projectorCalculator: HomeToolEntry<ProjectorCalculatorUI> = {
9
+ id: 'projector-calculator',
10
+ icons: {
11
+ bg: 'mdi:projector',
12
+ fg: 'mdi:ruler',
13
+ },
14
+ i18n: {
15
+ de: async () => (await import('./i18n/de')).content,
16
+ en: async () => (await import('./i18n/en')).content,
17
+ es: async () => (await import('./i18n/es')).content,
18
+ fr: async () => (await import('./i18n/fr')).content,
19
+ id: async () => (await import('./i18n/id')).content,
20
+ it: async () => (await import('./i18n/it')).content,
21
+ ja: async () => (await import('./i18n/ja')).content,
22
+ ko: async () => (await import('./i18n/ko')).content,
23
+ nl: async () => (await import('./i18n/nl')).content,
24
+ pl: async () => (await import('./i18n/pl')).content,
25
+ pt: async () => (await import('./i18n/pt')).content,
26
+ ru: async () => (await import('./i18n/ru')).content,
27
+ sv: async () => (await import('./i18n/sv')).content,
28
+ tr: async () => (await import('./i18n/tr')).content,
29
+ zh: async () => (await import('./i18n/zh')).content,
30
+ },
31
+ };
@@ -1,36 +1,5 @@
1
- import type { HomeToolEntry, ToolLocaleContent, ToolDefinition } from '../../types';
2
-
3
- import type { ProjectorCalculatorUI } from './ui';
4
-
5
- export type ProjectorCalculatorLocaleContent = ToolLocaleContent<ProjectorCalculatorUI>;
6
-
7
-
8
- export const projectorCalculator: HomeToolEntry<ProjectorCalculatorUI> = {
9
- id: 'projector-calculator',
10
- icons: {
11
- bg: 'mdi:projector',
12
- fg: 'mdi:ruler',
13
- },
14
- i18n: {
15
- de: async () => (await import('./i18n/de')).content,
16
- en: async () => (await import('./i18n/en')).content,
17
- es: async () => (await import('./i18n/es')).content,
18
- fr: async () => (await import('./i18n/fr')).content,
19
- id: async () => (await import('./i18n/id')).content,
20
- it: async () => (await import('./i18n/it')).content,
21
- ja: async () => (await import('./i18n/ja')).content,
22
- ko: async () => (await import('./i18n/ko')).content,
23
- nl: async () => (await import('./i18n/nl')).content,
24
- pl: async () => (await import('./i18n/pl')).content,
25
- pt: async () => (await import('./i18n/pt')).content,
26
- ru: async () => (await import('./i18n/ru')).content,
27
- sv: async () => (await import('./i18n/sv')).content,
28
- tr: async () => (await import('./i18n/tr')).content,
29
- zh: async () => (await import('./i18n/zh')).content,
30
- },
31
- };
32
-
33
-
1
+ import { projectorCalculator } from './entry';
2
+ export * from './entry';
34
3
  export const PROJECTOR_CALCULATOR_TOOL: ToolDefinition = {
35
4
  entry: projectorCalculator,
36
5
  Component: () => import('./component.astro'),