@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
@@ -344,449 +344,3 @@ const initLabels = yarnUI.sizeLabels?.sweater ?? ['S', 'M', 'L', 'XL'];
344
344
  init();
345
345
  </script>
346
346
 
347
- <style>
348
- .yc-wrapper {
349
- --yc-p: #10b981;
350
-
351
- width: 100%;
352
- padding: 1rem 0;
353
- }
354
-
355
- .yc-card {
356
- background: var(--bg-surface);
357
- width: calc(100% - 24px);
358
- max-width: 1100px;
359
- margin: 0 auto;
360
- border-radius: 24px;
361
- overflow: hidden;
362
- display: flex;
363
- flex-direction: column;
364
- color: var(--text-main);
365
- }
366
-
367
- @media (min-width: 1024px) {
368
- .yc-card {
369
- flex-direction: row;
370
- min-height: 700px;
371
- }
372
- }
373
-
374
- .yc-sidebar {
375
- flex: 0 0 auto;
376
- width: 100%;
377
- background: var(--bg-surface);
378
- padding: 32px;
379
- display: flex;
380
- flex-direction: column;
381
- gap: 40px;
382
- }
383
-
384
- @media (min-width: 1024px) {
385
- .yc-sidebar {
386
- width: 440px;
387
- padding: 48px;
388
- border-right: 1px solid var(--border-color);
389
- overflow-y: auto;
390
- }
391
- }
392
-
393
- .yc-main {
394
- flex: 1;
395
- background: var(--bg-surface);
396
- padding: 32px;
397
- display: flex;
398
- flex-direction: column;
399
- }
400
-
401
- @media (min-width: 1024px) {
402
- .yc-main {
403
- padding: 64px 48px;
404
- }
405
- }
406
-
407
- .section-label {
408
- font-size: 11px;
409
- font-weight: 800;
410
- text-transform: uppercase;
411
- letter-spacing: 0.12em;
412
- color: var(--text-muted);
413
- margin-bottom: 20px;
414
- display: block;
415
- }
416
-
417
- .project-grid {
418
- display: grid;
419
- grid-template-columns: repeat(3, 1fr);
420
- gap: 12px;
421
- }
422
-
423
- .project-item {
424
- aspect-ratio: 1;
425
- background: var(--bg-muted);
426
- border: 1px solid var(--border-color);
427
- border-radius: 16px;
428
- display: flex;
429
- flex-direction: column;
430
- align-items: center;
431
- justify-content: center;
432
- cursor: pointer;
433
- transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
434
- gap: 8px;
435
- }
436
-
437
- .project-item svg {
438
- width: 32px;
439
- height: 32px;
440
- color: var(--text-muted);
441
- transition: color 0.2s;
442
- }
443
-
444
- .project-item span {
445
- font-size: 10px;
446
- font-weight: 700;
447
- color: var(--text-muted);
448
- }
449
-
450
- .project-item.active {
451
- background: #f0fdf4;
452
- border-color: var(--yc-p);
453
- box-shadow: 0 4px 6px -1px rgba(16, 185, 129, 0.1);
454
- }
455
-
456
- .project-item.active svg {
457
- color: var(--yc-p);
458
- }
459
-
460
- .project-item.active span {
461
- color: #065f46;
462
- }
463
-
464
- .input-block {
465
- display: flex;
466
- flex-direction: column;
467
- gap: 8px;
468
- }
469
-
470
- .pill-selector {
471
- display: flex;
472
- background: var(--bg-muted);
473
- padding: 4px;
474
- border-radius: 12px;
475
- margin-top: 4px;
476
- }
477
-
478
- .pill-btn {
479
- flex: 1;
480
- border: none;
481
- background: transparent;
482
- padding: 10px;
483
- font-size: 11px;
484
- font-weight: 700;
485
- color: var(--text-muted);
486
- cursor: pointer;
487
- border-radius: 8px;
488
- transition: all 0.2s;
489
- }
490
-
491
- .pill-btn.active {
492
- background: var(--yc-p);
493
- color: #fff;
494
- box-shadow: 0 4px 6px -1px rgba(16, 185, 129, 0.2);
495
- }
496
-
497
- .custom-input-box {
498
- background: var(--bg-muted);
499
- padding: 16px;
500
- border-radius: 20px;
501
- border: 1px solid var(--border-color);
502
- }
503
-
504
- .ball-grid {
505
- display: grid;
506
- grid-template-columns: 1fr 1fr;
507
- gap: 16px;
508
- }
509
-
510
- .label-tiny {
511
- font-size: 9px;
512
- font-weight: 800;
513
- color: var(--text-muted);
514
- margin-bottom: 8px;
515
- display: block;
516
- }
517
-
518
- .custom-input {
519
- width: 100%;
520
- padding: 14px 16px;
521
- background: var(--bg-surface);
522
- border: 1px solid var(--border-color);
523
- border-radius: 12px;
524
- font-size: 15px;
525
- font-weight: 700;
526
- color: var(--text-main);
527
- transition: all 0.2s;
528
- }
529
-
530
- .custom-input:focus {
531
- outline: none;
532
- border-color: var(--yc-p);
533
- box-shadow: 0 0 0 4px rgba(16, 185, 129, 0.1);
534
- }
535
-
536
- .switch-row {
537
- display: flex;
538
- align-items: center;
539
- justify-content: space-between;
540
- padding: 12px 16px;
541
- background: var(--bg-muted);
542
- border-radius: 12px;
543
- border: 1px solid var(--border-color);
544
- cursor: pointer;
545
- }
546
-
547
- .cable-label {
548
- font-size: 13px;
549
- font-weight: 800;
550
- }
551
-
552
- .switch-toggle {
553
- width: 44px;
554
- height: 24px;
555
- background: var(--border-color);
556
- border-radius: 100px;
557
- position: relative;
558
- transition: all 0.3s;
559
- }
560
-
561
- .switch-toggle::before {
562
- content: "";
563
- position: absolute;
564
- width: 18px;
565
- height: 18px;
566
- background: #fff;
567
- border-radius: 50%;
568
- top: 3px;
569
- left: 3px;
570
- transition: all 0.3s;
571
- }
572
-
573
- .switch-row.active {
574
- border-color: var(--yc-p);
575
- background: #f0fdf4;
576
- }
577
-
578
- .switch-row.active .switch-toggle {
579
- background: var(--yc-p);
580
- }
581
-
582
- .switch-row.active .switch-toggle::before {
583
- transform: translateX(20px);
584
- }
585
-
586
- .results-panel {
587
- flex: 1;
588
- display: flex;
589
- flex-direction: column;
590
- justify-content: center;
591
- }
592
-
593
- .main-stat {
594
- text-align: center;
595
- margin-bottom: 48px;
596
- }
597
-
598
- .stat-prefix {
599
- font-size: 12px;
600
- font-weight: 800;
601
- color: var(--text-muted);
602
- text-transform: uppercase;
603
- letter-spacing: 0.2em;
604
- display: block;
605
- margin-bottom: 8px;
606
- }
607
-
608
- .stat-row {
609
- display: flex;
610
- align-items: baseline;
611
- justify-content: center;
612
- }
613
-
614
- .stat-value {
615
- font-size: 96px;
616
- font-weight: 950;
617
- color: var(--text-main);
618
- line-height: 1;
619
- letter-spacing: -0.05em;
620
- }
621
-
622
- .stat-suffix {
623
- font-size: 28px;
624
- font-weight: 900;
625
- color: var(--text-muted);
626
- margin-left: 8px;
627
- }
628
-
629
- .stat-note {
630
- font-size: 14px;
631
- font-weight: 600;
632
- color: var(--text-muted);
633
- margin-top: 12px;
634
- }
635
-
636
- .balls-cta {
637
- background: var(--yc-p);
638
- color: #fff;
639
- padding: 40px;
640
- border-radius: 32px;
641
- text-align: center;
642
- box-shadow: 0 20px 40px -10px rgba(16, 185, 129, 0.4);
643
- position: relative;
644
- overflow: hidden;
645
- display: flex;
646
- flex-direction: column;
647
- align-items: center;
648
- gap: 8px;
649
- }
650
-
651
- .balls-icon {
652
- font-size: 24px;
653
- margin-bottom: 4px;
654
- opacity: 0.9;
655
- }
656
-
657
- .balls-count {
658
- display: block;
659
- font-size: 32px;
660
- font-weight: 900;
661
- line-height: 1;
662
- }
663
-
664
- .balls-desc {
665
- display: block;
666
- font-size: 14px;
667
- font-weight: 700;
668
- opacity: 0.8;
669
- }
670
-
671
- .panic-alert {
672
- margin-top: 32px;
673
- display: flex;
674
- gap: 16px;
675
- padding: 24px;
676
- background: #fffbeb;
677
- border: 1px solid #fde68a;
678
- border-radius: 20px;
679
- color: #92400e;
680
- font-size: 14px;
681
- line-height: 1.6;
682
- }
683
-
684
- .alert-icon {
685
- flex-shrink: 0;
686
- color: #f59e0b;
687
- width: 20px;
688
- }
689
-
690
- .garment-scheme {
691
- margin-top: 48px;
692
- border-top: 1px solid var(--border-color);
693
- padding-top: 48px;
694
- }
695
-
696
- .scheme-container {
697
- background: var(--bg-muted);
698
- border-radius: 24px;
699
- padding: 64px 48px;
700
- display: flex;
701
- justify-content: center;
702
- position: relative;
703
- min-height: 340px;
704
- overflow: hidden;
705
- }
706
-
707
- :global(.scheme-item) {
708
- stroke-width: 4;
709
- fill: none;
710
- stroke: var(--border-color);
711
- transition: all 0.4s cubic-bezier(0.19, 1, 0.22, 1);
712
- }
713
-
714
- :global(.scheme-item.filled) {
715
- stroke: var(--yc-p);
716
- fill: #10b98108;
717
- }
718
-
719
- :global(.scheme-callout) {
720
- stroke: var(--yc-p);
721
- stroke-width: 2;
722
- fill: none;
723
- transition: all 0.4s ease;
724
- stroke-dasharray: 6 3;
725
- opacity: 0.7;
726
- }
727
-
728
- :global(.scheme-dot) {
729
- fill: var(--yc-p);
730
- transition: all 0.4s ease;
731
- }
732
-
733
- .scheme-label {
734
- position: absolute;
735
- display: flex;
736
- flex-direction: column;
737
- gap: 4px;
738
- padding: 12px 16px;
739
- background: var(--bg-surface);
740
- border: 1.5px solid var(--border-color);
741
- border-left: 4px solid var(--yc-p);
742
- border-radius: 8px;
743
- box-shadow: 0 8px 16px -4px rgba(16, 185, 129, 0.1);
744
- pointer-events: none;
745
- transition: all 0.4s cubic-bezier(0.19, 1, 0.22, 1);
746
- z-index: 10;
747
- }
748
-
749
- .scheme-label :global(span) {
750
- font-size: 9px;
751
- font-weight: 900;
752
- text-transform: uppercase;
753
- letter-spacing: 0.1em;
754
- color: var(--text-muted);
755
- }
756
-
757
- .scheme-label :global(strong) {
758
- color: var(--text-main);
759
- font-weight: 950;
760
- font-size: 15px;
761
- }
762
-
763
- .scheme-label :global(em) {
764
- font-size: 11px;
765
- font-style: normal;
766
- color: var(--yc-p);
767
- font-weight: 800;
768
- margin-top: 2px;
769
- }
770
-
771
- .theme-dark .project-item.active {
772
- background: #064e3b;
773
- }
774
-
775
- .theme-dark .project-item.active span {
776
- color: #6ee7b7;
777
- }
778
-
779
- .theme-dark .switch-row.active {
780
- background: #064e3b;
781
- }
782
-
783
- .theme-dark .panic-alert {
784
- background: #451a03;
785
- border-color: #d97706;
786
- color: #fbbf24;
787
- }
788
-
789
- .theme-dark .scheme-container {
790
- background: var(--bg-surface);
791
- }
792
- </style>
@@ -0,0 +1,30 @@
1
+ import type { TextilesToolEntry, ToolLocaleContent } from '../../types';
2
+
3
+ import type { YarnCalculatorUI } from './ui';
4
+
5
+ export type YarnCalculatorLocaleContent = ToolLocaleContent<YarnCalculatorUI>;
6
+
7
+ export const yarnCalculator: TextilesToolEntry<YarnCalculatorUI> = {
8
+ id: 'yarn-calculator',
9
+ icons: {
10
+ bg: 'mdi:comma-circle',
11
+ fg: 'mdi:counter',
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
+ };
@@ -1,35 +1,5 @@
1
- import type { TextilesToolEntry, ToolLocaleContent, ToolDefinition } from '../../types';
2
-
3
- import type { YarnCalculatorUI } from './ui';
4
-
5
- export type YarnCalculatorLocaleContent = ToolLocaleContent<YarnCalculatorUI>;
6
-
7
- export const yarnCalculator: TextilesToolEntry<YarnCalculatorUI> = {
8
- id: 'yarn-calculator',
9
- icons: {
10
- bg: 'mdi:comma-circle',
11
- fg: 'mdi:counter',
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
- };
31
-
32
-
1
+ import { yarnCalculator } from './entry';
2
+ export * from './entry';
33
3
  export const YARN_CALCULATOR_TOOL: ToolDefinition = {
34
4
  entry: yarnCalculator,
35
5
  Component: () => import('./component.astro'),