@jjlmoya/utils-textiles 1.9.0 → 1.12.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 (53) hide show
  1. package/package.json +7 -4
  2. package/scripts/postinstall.mjs +27 -0
  3. package/src/category/index.ts +24 -25
  4. package/src/entries.ts +37 -0
  5. package/src/tool/burnTest/component.astro +0 -380
  6. package/src/tool/burnTest/entry.ts +30 -0
  7. package/src/tool/burnTest/index.ts +2 -32
  8. package/src/tool/burnTest/textile-burn-test.css +378 -0
  9. package/src/tool/clothingSizeConverter/clothing-size-converter.css +717 -0
  10. package/src/tool/clothingSizeConverter/component.astro +0 -719
  11. package/src/tool/clothingSizeConverter/entry.ts +30 -0
  12. package/src/tool/clothingSizeConverter/index.ts +2 -32
  13. package/src/tool/fabricProjectCalculator/component.astro +0 -540
  14. package/src/tool/fabricProjectCalculator/entry.ts +30 -0
  15. package/src/tool/fabricProjectCalculator/fabric-project-calculator.css +538 -0
  16. package/src/tool/fabricProjectCalculator/index.ts +2 -32
  17. package/src/tool/fabricTruth/component.astro +0 -428
  18. package/src/tool/fabricTruth/entry.ts +30 -0
  19. package/src/tool/fabricTruth/fabric-truthfulness.css +426 -0
  20. package/src/tool/fabricTruth/index.ts +2 -32
  21. package/src/tool/fiberPrep/component.astro +0 -652
  22. package/src/tool/fiberPrep/entry.ts +30 -0
  23. package/src/tool/fiberPrep/fiber-preparation-natural-dyeing.css +650 -0
  24. package/src/tool/fiberPrep/index.ts +2 -32
  25. package/src/tool/knittingGauge/component.astro +0 -458
  26. package/src/tool/knittingGauge/entry.ts +30 -0
  27. package/src/tool/knittingGauge/index.ts +2 -32
  28. package/src/tool/knittingGauge/knitting-gauge-calculator.css +456 -0
  29. package/src/tool/laundryGuide/component.astro +0 -317
  30. package/src/tool/laundryGuide/entry.ts +25 -0
  31. package/src/tool/laundryGuide/index.ts +2 -27
  32. package/src/tool/laundryGuide/laundry-guide.css +315 -0
  33. package/src/tool/needleConverter/component.astro +0 -344
  34. package/src/tool/needleConverter/entry.ts +30 -0
  35. package/src/tool/needleConverter/index.ts +2 -32
  36. package/src/tool/needleConverter/knitting-needle-converter.css +342 -0
  37. package/src/tool/sewingPatternScaler/component.astro +0 -314
  38. package/src/tool/sewingPatternScaler/entry.ts +30 -0
  39. package/src/tool/sewingPatternScaler/index.ts +2 -32
  40. package/src/tool/sewingPatternScaler/sewing-pattern-scaler.css +313 -0
  41. package/src/tool/shoeSizeConverter/component.astro +0 -255
  42. package/src/tool/shoeSizeConverter/entry.ts +30 -0
  43. package/src/tool/shoeSizeConverter/index.ts +2 -32
  44. package/src/tool/shoeSizeConverter/shoe-size-converter.css +253 -0
  45. package/src/tool/stainChemistry/component.astro +0 -479
  46. package/src/tool/stainChemistry/entry.ts +30 -0
  47. package/src/tool/stainChemistry/index.ts +2 -32
  48. package/src/tool/stainChemistry/stain-chemical-protocol.css +477 -0
  49. package/src/tool/yarnCalculator/component.astro +0 -446
  50. package/src/tool/yarnCalculator/entry.ts +30 -0
  51. package/src/tool/yarnCalculator/index.ts +2 -32
  52. package/src/tool/yarnCalculator/yarn-calculator.css +444 -0
  53. package/src/tools.ts +1 -1
@@ -278,431 +278,3 @@ const fibers = Object.entries(fiberData)
278
278
  startInit();
279
279
  </script>
280
280
 
281
- <style>
282
- .fabric-truth-container {
283
- width: 100%;
284
- padding: 1rem;
285
- }
286
-
287
- .card-wrapper {
288
- background: var(--bg-surface);
289
- border: 1px solid var(--border-color);
290
- border-radius: 1.5rem;
291
- overflow: hidden;
292
- box-shadow: 0 10px 25px rgba(0, 0, 0, 0.1);
293
- }
294
-
295
- .composition-section {
296
- padding: 2rem;
297
- border-bottom: 1px solid var(--border-color);
298
- }
299
-
300
- .section-title {
301
- font-size: 1.5rem;
302
- font-weight: bold;
303
- margin: 0 0 0.5rem;
304
- display: flex;
305
- align-items: center;
306
- gap: 0.5rem;
307
- color: var(--text-main);
308
- }
309
-
310
- .title-icon {
311
- width: 1.5rem;
312
- height: 1.5rem;
313
- color: #6366f1;
314
- }
315
-
316
- .section-description {
317
- color: var(--text-muted);
318
- margin: 0 0 1.5rem;
319
- font-size: 0.95rem;
320
- }
321
-
322
- .rows-container {
323
- display: flex;
324
- flex-direction: column;
325
- gap: 1rem;
326
- margin-bottom: 1.5rem;
327
- }
328
-
329
- .fiber-row {
330
- display: flex;
331
- gap: 0.75rem;
332
- align-items: center;
333
- animation: slide-in 0.3s ease;
334
- }
335
-
336
- @keyframes slide-in {
337
- from {
338
- opacity: 0;
339
- transform: translateX(-10px);
340
- }
341
- to {
342
- opacity: 1;
343
- transform: translateX(0);
344
- }
345
- }
346
-
347
- .fiber-select {
348
- flex: 1;
349
- min-width: 150px;
350
- background: var(--bg-page);
351
- border: 1px solid var(--border-color);
352
- border-radius: 0.75rem;
353
- padding: 0.75rem;
354
- color: var(--text-main);
355
- font-weight: 500;
356
- cursor: pointer;
357
- }
358
-
359
- .fiber-select:focus {
360
- outline: none;
361
- border-color: #6366f1;
362
- box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.1);
363
- }
364
-
365
- .fiber-perc-wrapper {
366
- position: relative;
367
- width: 120px;
368
- }
369
-
370
- .fiber-perc {
371
- width: 100%;
372
- background: var(--bg-page);
373
- border: 1px solid var(--border-color);
374
- border-radius: 0.75rem;
375
- padding: 0.75rem 2.5rem 0.75rem 0.75rem;
376
- color: var(--text-main);
377
- font-weight: 500;
378
- }
379
-
380
- .fiber-perc:focus {
381
- outline: none;
382
- border-color: #6366f1;
383
- box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.1);
384
- }
385
-
386
- .perc-symbol {
387
- position: absolute;
388
- right: 0.75rem;
389
- top: 50%;
390
- transform: translateY(-50%);
391
- color: var(--text-muted);
392
- font-weight: bold;
393
- pointer-events: none;
394
- }
395
-
396
- .remove-row-btn {
397
- background: none;
398
- border: none;
399
- color: var(--text-muted);
400
- cursor: pointer;
401
- padding: 0.5rem;
402
- display: flex;
403
- align-items: center;
404
- transition: color 0.2s;
405
- }
406
-
407
- .remove-row-btn:hover {
408
- color: #ef4444;
409
- }
410
-
411
- .controls-footer {
412
- display: flex;
413
- justify-content: space-between;
414
- align-items: center;
415
- padding-top: 1rem;
416
- border-top: 1px solid var(--border-color);
417
- gap: 1rem;
418
- flex-wrap: wrap;
419
- }
420
-
421
- .btn-add {
422
- display: flex;
423
- align-items: center;
424
- gap: 0.5rem;
425
- padding: 0.75rem 1.5rem;
426
- background: var(--bg-page);
427
- border: 1px solid var(--border-color);
428
- border-radius: 0.75rem;
429
- color: var(--text-main);
430
- font-weight: 500;
431
- cursor: pointer;
432
- transition: all 0.2s;
433
- }
434
-
435
- .btn-add:hover {
436
- background: var(--bg-surface);
437
- border-color: #6366f1;
438
- }
439
-
440
- .btn-icon {
441
- width: 1.25rem;
442
- height: 1.25rem;
443
- }
444
-
445
- .total-badge {
446
- padding: 0.75rem 1.5rem;
447
- border-radius: 0.75rem;
448
- font-weight: 600;
449
- background: var(--bg-page);
450
- color: var(--text-muted);
451
- border: 1px solid var(--border-color);
452
- transition: all 0.2s;
453
- }
454
-
455
- :global(.total-badge.total-complete) {
456
- background: rgba(16, 185, 129, 0.1);
457
- color: #10b981;
458
- border-color: #10b981;
459
- }
460
-
461
- :global(.total-badge.total-error) {
462
- background: rgba(239, 68, 68, 0.1);
463
- color: #ef4444;
464
- border-color: #ef4444;
465
- animation: pulse 0.5s;
466
- }
467
-
468
- @keyframes pulse {
469
- 0%, 100% { opacity: 1; }
470
- 50% { opacity: 0.7; }
471
- }
472
-
473
- .results-section {
474
- padding: 2rem;
475
- background: var(--bg-page);
476
- }
477
-
478
- .empty-state {
479
- text-align: center;
480
- padding: 2rem;
481
- }
482
-
483
- .empty-icon {
484
- width: 4rem;
485
- height: 4rem;
486
- margin: 0 auto 1rem;
487
- color: var(--border-color);
488
- }
489
-
490
- .empty-state p {
491
- margin: 0.5rem 0;
492
- color: var(--text-muted);
493
- font-size: 0.95rem;
494
- }
495
-
496
- .empty-helper {
497
- font-size: 0.85rem;
498
- font-style: italic;
499
- color: var(--text-muted);
500
- margin-top: 0.25rem;
501
- }
502
-
503
- .result-content {
504
- display: flex;
505
- flex-direction: column;
506
- gap: 1.5rem;
507
- animation: fade-in 0.5s ease;
508
- }
509
-
510
- :global(.result-content.hidden) {
511
- display: none;
512
- }
513
-
514
- :global(.empty-state.hidden) {
515
- display: none;
516
- }
517
-
518
- @keyframes fade-in {
519
- from { opacity: 0; }
520
- to { opacity: 1; }
521
- }
522
-
523
- .verdict-card {
524
- padding: 1.5rem;
525
- border-radius: 1rem;
526
- border-left: 4px solid;
527
- display: flex;
528
- justify-content: space-between;
529
- align-items: center;
530
- transition: all 0.3s;
531
- min-height: 100px;
532
- }
533
-
534
- :global(.verdict-card.color-red) {
535
- background: rgba(239, 68, 68, 0.1);
536
- color: #ef4444;
537
- border-left-color: #dc2626;
538
- }
539
-
540
- :global(.verdict-card.color-amber) {
541
- background: rgba(251, 146, 60, 0.1);
542
- color: #f97316;
543
- border-left-color: #ea580c;
544
- }
545
-
546
- :global(.verdict-card.color-yellow) {
547
- background: rgba(234, 179, 8, 0.1);
548
- color: #ca8a04;
549
- border-left-color: #b45309;
550
- }
551
-
552
- :global(.verdict-card.color-emerald) {
553
- background: rgba(16, 185, 129, 0.1);
554
- color: #059669;
555
- border-left-color: #047857;
556
- }
557
-
558
- :global(.verdict-card.color-blue) {
559
- background: rgba(59, 130, 246, 0.1);
560
- color: #2563eb;
561
- border-left-color: #1d4ed8;
562
- }
563
-
564
- :global(.verdict-card.color-indigo) {
565
- background: rgba(99, 102, 241, 0.1);
566
- color: #4f46e5;
567
- border-left-color: #4338ca;
568
- }
569
-
570
- :global(.verdict-card.color-gray) {
571
- background: rgba(107, 114, 128, 0.1);
572
- color: #6b7280;
573
- border-left-color: #4b5563;
574
- }
575
-
576
- .verdict-content {
577
- flex: 1;
578
- }
579
-
580
- .verdict-meta {
581
- font-size: 0.75rem;
582
- font-weight: 700;
583
- text-transform: uppercase;
584
- letter-spacing: 0.05em;
585
- opacity: 0.7;
586
- }
587
-
588
- .verdict-label {
589
- font-size: 1.75rem;
590
- font-weight: 900;
591
- margin: 0.5rem 0;
592
- }
593
-
594
- .verdict-desc {
595
- font-size: 1rem;
596
- margin: 0;
597
- opacity: 0.9;
598
- }
599
-
600
- .verdict-icon {
601
- width: 3rem;
602
- height: 3rem;
603
- display: flex;
604
- align-items: center;
605
- justify-content: center;
606
- background: rgba(255, 255, 255, 0.2);
607
- border-radius: 50%;
608
- }
609
-
610
- .stats-grid {
611
- display: grid;
612
- grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
613
- gap: 1rem;
614
- }
615
-
616
- .stat-card {
617
- background: var(--bg-surface);
618
- padding: 1rem;
619
- border-radius: 0.75rem;
620
- border: 1px solid var(--border-color);
621
- }
622
-
623
- .stat-header {
624
- display: flex;
625
- align-items: center;
626
- gap: 0.5rem;
627
- margin-bottom: 0.75rem;
628
- font-size: 0.75rem;
629
- font-weight: 700;
630
- text-transform: uppercase;
631
- letter-spacing: 0.05em;
632
- color: var(--text-muted);
633
- }
634
-
635
- .stat-bar {
636
- width: 100%;
637
- height: 6px;
638
- background: var(--border-color);
639
- border-radius: 99px;
640
- overflow: hidden;
641
- margin-bottom: 0.5rem;
642
- }
643
-
644
- .stat-fill {
645
- height: 100%;
646
- background: currentcolor;
647
- transition: width 1s ease;
648
- width: 0%;
649
- }
650
-
651
- .stat-card:nth-child(1) .stat-fill {
652
- background: #10b981;
653
- }
654
-
655
- .stat-card:nth-child(2) .stat-fill {
656
- background: #3b82f6;
657
- }
658
-
659
- .stat-card:nth-child(3) .stat-fill {
660
- background: #f97316;
661
- }
662
-
663
- .stat-value {
664
- font-size: 0.85rem;
665
- font-weight: 600;
666
- text-align: right;
667
- color: var(--text-muted);
668
- }
669
-
670
- .care-warning {
671
- background: rgba(251, 191, 36, 0.1);
672
- border: 1px solid rgba(251, 146, 60, 0.3);
673
- padding: 1rem;
674
- border-radius: 0.75rem;
675
- display: flex;
676
- gap: 0.75rem;
677
- color: #b45309;
678
- }
679
-
680
- .care-warning svg {
681
- width: 1.5rem;
682
- height: 1.5rem;
683
- flex-shrink: 0;
684
- margin-top: 0.1rem;
685
- }
686
-
687
- .care-warning h4 {
688
- font-weight: 700;
689
- font-size: 0.85rem;
690
- margin: 0 0 0.25rem;
691
- text-transform: uppercase;
692
- letter-spacing: 0.05em;
693
- }
694
-
695
- .care-warning p {
696
- font-size: 0.9rem;
697
- margin: 0;
698
- }
699
-
700
- .disclaimer {
701
- text-align: center;
702
- font-size: 0.75rem;
703
- text-transform: uppercase;
704
- letter-spacing: 0.05em;
705
- color: var(--text-muted);
706
- margin: 0;
707
- }
708
- </style>
@@ -0,0 +1,30 @@
1
+ import type { TextilesToolEntry, ToolLocaleContent } from '../../types';
2
+
3
+ import type { FabricTruthUI } from './ui';
4
+
5
+ export type FabricTruthLocaleContent = ToolLocaleContent<FabricTruthUI>;
6
+
7
+ export const fabricTruth: TextilesToolEntry<FabricTruthUI> = {
8
+ id: 'fabric-truth',
9
+ icons: {
10
+ bg: 'mdi:tag-text-outline',
11
+ fg: 'mdi:microscope',
12
+ },
13
+ i18n: {
14
+ es: () => import('./i18n/es').then((m) => m.content),
15
+ en: () => import('./i18n/en').then((m) => m.content),
16
+ fr: () => import('./i18n/fr').then((m) => m.content),
17
+ de: () => import('./i18n/de').then((m) => m.content),
18
+ id: () => import('./i18n/id').then((m) => m.content),
19
+ it: () => import('./i18n/it').then((m) => m.content),
20
+ ja: () => import('./i18n/ja').then((m) => m.content),
21
+ ko: () => import('./i18n/ko').then((m) => m.content),
22
+ nl: () => import('./i18n/nl').then((m) => m.content),
23
+ pl: () => import('./i18n/pl').then((m) => m.content),
24
+ pt: () => import('./i18n/pt').then((m) => m.content),
25
+ ru: () => import('./i18n/ru').then((m) => m.content),
26
+ sv: () => import('./i18n/sv').then((m) => m.content),
27
+ tr: () => import('./i18n/tr').then((m) => m.content),
28
+ zh: () => import('./i18n/zh').then((m) => m.content),
29
+ },
30
+ };