@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
@@ -505,722 +505,3 @@ const brands = [
505
505
  startInit();
506
506
  </script>
507
507
 
508
- <style>
509
- .clothing-converter {
510
- max-width: 900px;
511
- margin: 0 auto;
512
- padding: 1rem 1rem 4rem;
513
- }
514
-
515
- .converter-card {
516
- background: var(--bg-surface);
517
- border: 1px solid var(--border-color);
518
- border-radius: 2.5rem;
519
- padding: 2.5rem;
520
- box-shadow: 0 20px 50px rgba(0, 0, 0, 0.05);
521
- display: flex;
522
- flex-direction: column;
523
- gap: 2.5rem;
524
- }
525
-
526
- .theme-dark .converter-card {
527
- box-shadow: 0 20px 50px rgba(0, 0, 0, 0.3);
528
- }
529
-
530
- .selector-section {
531
- display: flex;
532
- flex-direction: column;
533
- gap: 1.5rem;
534
- }
535
-
536
- .selector-group {
537
- display: flex;
538
- flex-direction: column;
539
- gap: 0.75rem;
540
- }
541
-
542
- .selector-label {
543
- font-size: 0.75rem;
544
- font-weight: 800;
545
- color: var(--text-muted);
546
- text-transform: uppercase;
547
- letter-spacing: 0.1em;
548
- }
549
-
550
- .btn-group {
551
- display: grid;
552
- grid-template-columns: repeat(auto-fit, minmax(100px, 1fr));
553
- gap: 0.75rem;
554
- }
555
-
556
- .cat-btn,
557
- .gender-btn {
558
- padding: 0.875rem;
559
- border-radius: 1rem;
560
- border: 2px solid transparent;
561
- background: var(--bg-page);
562
- cursor: pointer;
563
- transition: all 0.3s;
564
- display: flex;
565
- flex-direction: column;
566
- align-items: center;
567
- gap: 0.5rem;
568
- color: var(--text-muted);
569
- font-weight: 600;
570
- font-size: 0.875rem;
571
- }
572
-
573
- .cat-btn svg,
574
- .gender-btn svg {
575
- width: 1.5rem;
576
- height: 1.5rem;
577
- }
578
-
579
- .cat-btn.active,
580
- .gender-btn.active {
581
- background: #3b82f6;
582
- border-color: #1e40af;
583
- color: white;
584
- box-shadow: 0 8px 20px rgba(59, 130, 246, 0.3);
585
- transform: translateY(-2px);
586
- }
587
-
588
- .cat-btn:hover,
589
- .gender-btn:hover {
590
- border-color: #3b82f6;
591
- }
592
-
593
- .tabs {
594
- display: flex;
595
- gap: 0.5rem;
596
- border-bottom: 2px solid var(--border-color);
597
- }
598
-
599
- .tab-btn {
600
- padding: 0.875rem 1.5rem;
601
- border: none;
602
- background: transparent;
603
- cursor: pointer;
604
- color: var(--text-muted);
605
- font-weight: 600;
606
- border-bottom: 3px solid transparent;
607
- margin-bottom: -2px;
608
- display: flex;
609
- gap: 0.5rem;
610
- align-items: center;
611
- transition: color 0.2s;
612
- }
613
-
614
- .tab-btn svg {
615
- width: 1.1rem;
616
- height: 1.1rem;
617
- }
618
-
619
- .tab-btn.active {
620
- color: #3b82f6;
621
- border-bottom-color: #3b82f6;
622
- }
623
-
624
- .tab-content {
625
- display: none;
626
- }
627
-
628
- .tab-content.active {
629
- display: flex;
630
- flex-direction: column;
631
- gap: 2rem;
632
- animation: tab-fade-in 0.3s ease;
633
- }
634
-
635
- @keyframes tab-fade-in {
636
- from {
637
- opacity: 0;
638
- transform: translateY(8px);
639
- }
640
- to {
641
- opacity: 1;
642
- transform: translateY(0);
643
- }
644
- }
645
-
646
- .control-row {
647
- display: grid;
648
- grid-template-columns: 1fr 1fr;
649
- gap: 1.5rem;
650
- }
651
-
652
- .field-group {
653
- display: flex;
654
- flex-direction: column;
655
- gap: 0.5rem;
656
- }
657
-
658
- .field-label {
659
- font-size: 0.75rem;
660
- font-weight: 800;
661
- color: var(--text-muted);
662
- text-transform: uppercase;
663
- letter-spacing: 0.1em;
664
- }
665
-
666
- .select-wrap {
667
- position: relative;
668
- }
669
-
670
- .select-wrap::after {
671
- content: '▾';
672
- position: absolute;
673
- right: 1.25rem;
674
- top: 50%;
675
- transform: translateY(-50%);
676
- pointer-events: none;
677
- color: var(--text-muted);
678
- }
679
-
680
- .region-select,
681
- .size-select {
682
- appearance: none;
683
- width: 100%;
684
- background: var(--bg-page);
685
- border: 1.5px solid var(--border-color);
686
- border-radius: 1rem;
687
- padding: 0.875rem 2.75rem 0.875rem 1.25rem;
688
- font-size: 1rem;
689
- font-weight: 600;
690
- color: var(--text-main);
691
- outline: none;
692
- cursor: pointer;
693
- transition: border-color 0.2s;
694
- }
695
-
696
- .region-select:focus,
697
- .size-select:focus {
698
- border-color: #3b82f6;
699
- }
700
-
701
- .results-grid {
702
- display: grid;
703
- grid-template-columns: repeat(3, 1fr);
704
- gap: 1rem;
705
- }
706
-
707
- .result-card {
708
- background: var(--bg-page);
709
- border: 1px solid var(--border-color);
710
- border-radius: 1.25rem;
711
- padding: 1.5rem;
712
- display: flex;
713
- flex-direction: column;
714
- align-items: center;
715
- gap: 0.5rem;
716
- transition: all 0.3s;
717
- }
718
-
719
- .result-card:hover {
720
- transform: translateY(-2px);
721
- border-color: #3b82f6;
722
- }
723
-
724
- .result-label {
725
- font-size: 0.7rem;
726
- font-weight: 800;
727
- color: var(--text-muted);
728
- text-transform: uppercase;
729
- letter-spacing: 0.05em;
730
- }
731
-
732
- .result-value {
733
- font-size: 2.5rem;
734
- font-weight: 900;
735
- color: #3b82f6;
736
- line-height: 1;
737
- }
738
-
739
- .quick-grid-section {
740
- border-top: 1px solid var(--border-color);
741
- padding-top: 1.5rem;
742
- }
743
-
744
- .section-title {
745
- font-size: 0.75rem;
746
- font-weight: 800;
747
- color: var(--text-muted);
748
- text-transform: uppercase;
749
- letter-spacing: 0.05em;
750
- margin: 0 0 1rem;
751
- }
752
-
753
- .size-grid {
754
- display: grid;
755
- grid-template-columns: repeat(auto-fill, minmax(65px, 1fr));
756
- gap: 0.75rem;
757
- }
758
-
759
- :global(.size-cell) {
760
- aspect-ratio: 1;
761
- display: flex;
762
- align-items: center;
763
- justify-content: center;
764
- border-radius: 0.75rem;
765
- background: var(--bg-surface);
766
- border: 1.5px solid var(--border-color);
767
- font-size: 0.875rem;
768
- font-weight: 700;
769
- color: var(--text-muted);
770
- cursor: pointer;
771
- transition: all 0.2s;
772
- }
773
-
774
- :global(.size-cell:hover) {
775
- border-color: #3b82f6;
776
- color: #3b82f6;
777
- transform: scale(1.05);
778
- }
779
-
780
- :global(.size-cell.active) {
781
- background: #3b82f6;
782
- border-color: #1e40af;
783
- color: white;
784
- box-shadow: 0 5px 15px rgba(59, 130, 246, 0.35);
785
- transform: scale(1.05);
786
- }
787
-
788
- .measurements-layout {
789
- display: grid;
790
- grid-template-columns: 1fr 1fr;
791
- gap: 2rem;
792
- }
793
-
794
- .measurements-inputs {
795
- display: flex;
796
- flex-direction: column;
797
- gap: 1.25rem;
798
- }
799
-
800
- .measurements-section-title {
801
- font-size: 1.1rem;
802
- font-weight: 800;
803
- color: var(--text-main);
804
- margin: 0;
805
- }
806
-
807
- .measure-field {
808
- display: flex;
809
- flex-direction: column;
810
- gap: 0.5rem;
811
- }
812
-
813
- .measure-label {
814
- font-size: 0.75rem;
815
- font-weight: 700;
816
- color: var(--text-muted);
817
- text-transform: uppercase;
818
- letter-spacing: 0.05em;
819
- }
820
-
821
- .measure-input {
822
- width: 100%;
823
- background: var(--bg-page);
824
- border: 1.5px solid var(--border-color);
825
- border-radius: 1rem;
826
- padding: 0.875rem 1.25rem;
827
- font-size: 1rem;
828
- font-weight: 600;
829
- color: var(--text-main);
830
- outline: none;
831
- transition: border-color 0.2s;
832
- }
833
-
834
- .measure-input:focus {
835
- border-color: #3b82f6;
836
- }
837
-
838
- .btn-recommend {
839
- padding: 1rem;
840
- background: #10b981;
841
- color: white;
842
- border: none;
843
- border-radius: 1rem;
844
- font-weight: 700;
845
- cursor: pointer;
846
- transition: all 0.3s;
847
- display: flex;
848
- align-items: center;
849
- justify-content: center;
850
- gap: 0.75rem;
851
- font-size: 1rem;
852
- }
853
-
854
- .btn-recommend:hover {
855
- transform: translateY(-2px);
856
- box-shadow: 0 8px 20px rgba(16, 185, 129, 0.3);
857
- }
858
-
859
- .btn-recommend svg {
860
- width: 1.25rem;
861
- height: 1.25rem;
862
- }
863
-
864
- .tips-card {
865
- background: rgba(59, 130, 246, 0.05);
866
- border: 1px solid rgba(59, 130, 246, 0.2);
867
- border-radius: 1.25rem;
868
- padding: 1.5rem;
869
- color: #1e40af;
870
- }
871
-
872
- .theme-dark .tips-card {
873
- background: rgba(59, 130, 246, 0.08);
874
- color: #93c5fd;
875
- }
876
-
877
- .tips-title {
878
- display: flex;
879
- align-items: center;
880
- gap: 0.5rem;
881
- font-size: 0.9rem;
882
- font-weight: 700;
883
- margin: 0 0 1rem;
884
- }
885
-
886
- .tips-title svg {
887
- width: 1.1rem;
888
- height: 1.1rem;
889
- flex-shrink: 0;
890
- }
891
-
892
- .tips-grid {
893
- display: grid;
894
- grid-template-columns: 1fr 1fr;
895
- gap: 0.75rem;
896
- }
897
-
898
- .tip-item {
899
- display: flex;
900
- align-items: center;
901
- gap: 0.75rem;
902
- padding: 0.75rem;
903
- background: rgba(59, 130, 246, 0.08);
904
- border-radius: 0.75rem;
905
- font-size: 0.8rem;
906
- font-weight: 600;
907
- }
908
-
909
- .theme-dark .tip-item {
910
- background: rgba(59, 130, 246, 0.12);
911
- }
912
-
913
- .tip-item svg {
914
- width: 1rem;
915
- height: 1rem;
916
- flex-shrink: 0;
917
- color: #3b82f6;
918
- }
919
-
920
- .recommendation-box {
921
- display: none;
922
- background: #ecfdf5;
923
- border: 2px solid #10b981;
924
- border-radius: 1.25rem;
925
- padding: 1.5rem;
926
- color: #047857;
927
- animation: slide-down 0.3s ease;
928
- }
929
-
930
- .theme-dark .recommendation-box {
931
- background: rgba(6, 78, 59, 0.3);
932
- color: #6ee7b7;
933
- }
934
-
935
- @keyframes slide-down {
936
- from {
937
- opacity: 0;
938
- transform: translateY(-8px);
939
- }
940
- to {
941
- opacity: 1;
942
- transform: translateY(0);
943
- }
944
- }
945
-
946
- .recommend-header {
947
- display: flex;
948
- align-items: center;
949
- gap: 0.75rem;
950
- margin-bottom: 1rem;
951
- }
952
-
953
- .recommend-header svg {
954
- width: 1.5rem;
955
- height: 1.5rem;
956
- flex-shrink: 0;
957
- }
958
-
959
- .recommend-header h4 {
960
- margin: 0;
961
- font-size: 1rem;
962
- font-weight: 700;
963
- }
964
-
965
- :global(.rec-size-label) {
966
- display: block;
967
- font-size: 1rem;
968
- margin-bottom: 0.5rem;
969
- }
970
-
971
- :global(.rec-size) {
972
- color: #10b981;
973
- font-style: normal;
974
- font-size: 1.2em;
975
- }
976
-
977
- :global(.rec-info) {
978
- display: block;
979
- font-size: 0.875rem;
980
- opacity: 0.85;
981
- }
982
-
983
- :global(.rec-error) {
984
- color: #dc2626;
985
- }
986
-
987
- :global(.recommend-details) {
988
- display: grid;
989
- grid-template-columns: repeat(3, 1fr);
990
- gap: 0.75rem;
991
- margin-top: 1rem;
992
- padding-top: 1rem;
993
- border-top: 1px solid rgba(16, 185, 129, 0.3);
994
- }
995
-
996
- :global(.recommend-item) {
997
- text-align: center;
998
- display: flex;
999
- flex-direction: column;
1000
- gap: 0.25rem;
1001
- }
1002
-
1003
- :global(.rec-label) {
1004
- font-size: 0.7rem;
1005
- text-transform: uppercase;
1006
- opacity: 0.7;
1007
- }
1008
-
1009
- :global(.recommend-item strong) {
1010
- font-weight: 700;
1011
- color: #10b981;
1012
- }
1013
-
1014
- .fit-guide {
1015
- border-top: 1px solid var(--border-color);
1016
- padding-top: 1.5rem;
1017
- display: flex;
1018
- flex-direction: column;
1019
- gap: 1.25rem;
1020
- }
1021
-
1022
- .fit-grid {
1023
- display: grid;
1024
- grid-template-columns: repeat(auto-fit, minmax(130px, 1fr));
1025
- gap: 1rem;
1026
- }
1027
-
1028
- .fit-card {
1029
- background: var(--bg-page);
1030
- border: 2px solid var(--border-color);
1031
- border-radius: 1rem;
1032
- padding: 1.25rem;
1033
- display: flex;
1034
- flex-direction: column;
1035
- align-items: center;
1036
- gap: 0.5rem;
1037
- cursor: pointer;
1038
- transition: all 0.3s;
1039
- color: inherit;
1040
- text-align: center;
1041
- }
1042
-
1043
- .fit-card:hover {
1044
- border-color: #3b82f6;
1045
- background: rgba(59, 130, 246, 0.04);
1046
- transform: translateY(-2px);
1047
- }
1048
-
1049
- .fit-card.active {
1050
- border-color: #0284c7;
1051
- background: rgba(2, 132, 199, 0.08);
1052
- box-shadow: 0 4px 12px rgba(2, 132, 199, 0.15);
1053
- }
1054
-
1055
- .theme-dark .fit-card.active {
1056
- background: rgba(2, 132, 199, 0.12);
1057
- }
1058
-
1059
- .fit-brand {
1060
- font-weight: 700;
1061
- color: var(--text-main);
1062
- font-size: 0.95rem;
1063
- }
1064
-
1065
- .fit-size-label {
1066
- font-size: 0.75rem;
1067
- color: var(--text-muted);
1068
- font-weight: 600;
1069
- }
1070
-
1071
- .fit-notification {
1072
- display: none;
1073
- padding: 1.25rem;
1074
- background: rgba(3, 105, 161, 0.06);
1075
- border: 2px solid #0284c7;
1076
- border-radius: 1rem;
1077
- color: #0369a1;
1078
- font-size: 0.875rem;
1079
- line-height: 1.5;
1080
- }
1081
-
1082
- .theme-dark .fit-notification {
1083
- background: rgba(3, 105, 161, 0.1);
1084
- color: #7dd3fc;
1085
- }
1086
-
1087
- .fit-info {
1088
- display: flex;
1089
- align-items: center;
1090
- gap: 0.5rem;
1091
- font-size: 0.85rem;
1092
- color: var(--text-muted);
1093
- margin: 0;
1094
- }
1095
-
1096
- .fit-info svg {
1097
- width: 1rem;
1098
- height: 1rem;
1099
- flex-shrink: 0;
1100
- }
1101
-
1102
- .table-section {
1103
- border-top: 1px solid var(--border-color);
1104
- padding-top: 1.5rem;
1105
- }
1106
-
1107
- .table-wrap {
1108
- overflow-x: auto;
1109
- border-radius: 1.25rem;
1110
- border: 1px solid var(--border-color);
1111
- margin-top: 1rem;
1112
- }
1113
-
1114
- .conv-table {
1115
- width: 100%;
1116
- border-collapse: collapse;
1117
- background: var(--bg-surface);
1118
- }
1119
-
1120
- .conv-table thead {
1121
- background: var(--bg-page);
1122
- border-bottom: 2px solid var(--border-color);
1123
- }
1124
-
1125
- .conv-table th {
1126
- padding: 1rem 1.25rem;
1127
- text-align: left;
1128
- font-weight: 700;
1129
- color: var(--text-main);
1130
- font-size: 0.875rem;
1131
- text-transform: uppercase;
1132
- letter-spacing: 0.05em;
1133
- }
1134
-
1135
- .conv-table td {
1136
- padding: 1rem 1.25rem;
1137
- border-bottom: 1px solid var(--border-color);
1138
- color: var(--text-muted);
1139
- font-weight: 500;
1140
- }
1141
-
1142
- .conv-table tbody tr:hover td {
1143
- background: var(--bg-page);
1144
- }
1145
-
1146
- :global(.eu-cell) {
1147
- font-weight: 700;
1148
- color: #3b82f6;
1149
- }
1150
-
1151
- :global(.eu-cell.active) {
1152
- background: rgba(59, 130, 246, 0.1);
1153
- }
1154
-
1155
- .info-banner {
1156
- display: flex;
1157
- align-items: flex-start;
1158
- gap: 1rem;
1159
- padding: 1.25rem;
1160
- background: rgba(59, 130, 246, 0.05);
1161
- border: 1px solid rgba(59, 130, 246, 0.2);
1162
- border-radius: 1.25rem;
1163
- color: #1e40af;
1164
- font-size: 0.875rem;
1165
- line-height: 1.5;
1166
- }
1167
-
1168
- .theme-dark .info-banner {
1169
- background: rgba(59, 130, 246, 0.08);
1170
- color: #bfdbfe;
1171
- }
1172
-
1173
- .info-banner svg {
1174
- width: 1.25rem;
1175
- height: 1.25rem;
1176
- flex-shrink: 0;
1177
- margin-top: 0.125rem;
1178
- }
1179
-
1180
- .info-banner p {
1181
- margin: 0;
1182
- }
1183
-
1184
- .info-banner strong {
1185
- display: block;
1186
- margin-bottom: 0.25rem;
1187
- }
1188
-
1189
- @media (max-width: 640px) {
1190
- .converter-card {
1191
- padding: 1.5rem;
1192
- gap: 2rem;
1193
- border-radius: 1.5rem;
1194
- }
1195
-
1196
- .btn-group {
1197
- grid-template-columns: repeat(2, 1fr);
1198
- }
1199
-
1200
- .control-row {
1201
- grid-template-columns: 1fr;
1202
- }
1203
-
1204
- .results-grid {
1205
- grid-template-columns: 1fr;
1206
- }
1207
-
1208
- .measurements-layout {
1209
- grid-template-columns: 1fr;
1210
- }
1211
-
1212
- .fit-grid {
1213
- grid-template-columns: repeat(3, 1fr);
1214
- }
1215
- }
1216
-
1217
- @media (max-width: 400px) {
1218
- .btn-group {
1219
- grid-template-columns: 1fr;
1220
- }
1221
-
1222
- .fit-grid {
1223
- grid-template-columns: repeat(2, 1fr);
1224
- }
1225
- }
1226
- </style>