@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
@@ -0,0 +1,30 @@
1
+ import type { TextilesToolEntry, ToolLocaleContent } from '../../types';
2
+
3
+ import type { ClothingSizeConverterUI } from './ui';
4
+
5
+ export type ClothingSizeConverterLocaleContent = ToolLocaleContent<ClothingSizeConverterUI>;
6
+
7
+ export const clothingSizeConverter: TextilesToolEntry<ClothingSizeConverterUI> = {
8
+ id: 'clothing-size-converter',
9
+ icons: {
10
+ bg: 'mdi:tshirt-crew',
11
+ fg: 'mdi:ruler',
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 { ClothingSizeConverterUI } from './ui';
4
-
5
- export type ClothingSizeConverterLocaleContent = ToolLocaleContent<ClothingSizeConverterUI>;
6
-
7
- export const clothingSizeConverter: TextilesToolEntry<ClothingSizeConverterUI> = {
8
- id: 'clothing-size-converter',
9
- icons: {
10
- bg: 'mdi:tshirt-crew',
11
- fg: 'mdi:ruler',
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 { clothingSizeConverter } from './entry';
2
+ export * from './entry';
33
3
  export const CLOTHING_SIZE_CONVERTER_TOOL: ToolDefinition = {
34
4
  entry: clothingSizeConverter,
35
5
  Component: () => import('./component.astro'),
@@ -372,543 +372,3 @@ const calcUI = ui as FabricProjectCalculatorUI;
372
372
  init();
373
373
  </script>
374
374
 
375
- <style>
376
- .fabric-calculator-card {
377
- --f-p: #4f46e5;
378
- --f-a: #818cf8;
379
- --f-side: rgba(79, 70, 229, 0.04);
380
-
381
- display: grid;
382
- grid-template-columns: 360px 1fr;
383
- max-width: 1200px;
384
- width: 95%;
385
- margin: 2rem auto;
386
- background: var(--bg-surface);
387
- backdrop-filter: blur(25px);
388
- border-radius: 32px;
389
- overflow: hidden;
390
- border: 1px solid var(--border-color);
391
- box-shadow: 0 40px 100px rgba(0, 0, 0, 0.15);
392
- color: var(--text-main);
393
- }
394
-
395
- .theme-dark .fabric-calculator-card {
396
- --f-side: rgba(255, 255, 255, 0.03);
397
- }
398
-
399
- .fabric-sidebar {
400
- background: var(--f-side);
401
- padding: 2.5rem 2rem;
402
- display: flex;
403
- flex-direction: column;
404
- gap: 2rem;
405
- border-right: 1px solid var(--border-color);
406
- }
407
-
408
- .config-group {
409
- display: flex;
410
- flex-direction: column;
411
- gap: 1.25rem;
412
- }
413
-
414
- .config-group h3 {
415
- font-size: 0.7rem;
416
- font-weight: 900;
417
- text-transform: uppercase;
418
- letter-spacing: 0.18rem;
419
- color: var(--f-p);
420
- margin: 0;
421
- }
422
-
423
- .fabric-field {
424
- display: flex;
425
- flex-direction: column;
426
- gap: 0.6rem;
427
- }
428
-
429
- .fabric-field label {
430
- font-size: 0.72rem;
431
- font-weight: 800;
432
- text-transform: uppercase;
433
- letter-spacing: 0.06rem;
434
- color: var(--text-muted);
435
- }
436
-
437
- .fabric-select {
438
- width: 100%;
439
- padding: 0.85rem 3rem 0.85rem 1.1rem;
440
- border-radius: 14px;
441
- border: 1.5px solid var(--border-color);
442
- background: var(--bg-surface);
443
- font-size: 0.875rem;
444
- font-weight: 700;
445
- color: inherit;
446
- cursor: pointer;
447
- appearance: none;
448
- background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%234F46E5' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");
449
- background-repeat: no-repeat;
450
- background-position: right 1rem center;
451
- background-size: 1.1rem;
452
- transition: border-color 0.2s, box-shadow 0.2s;
453
- outline: none;
454
- }
455
-
456
- .fabric-select:focus {
457
- border-color: var(--f-p);
458
- box-shadow: 0 0 0 3px rgba(79, 70, 229, 0.15);
459
- }
460
-
461
- .shop-stepper {
462
- display: grid;
463
- grid-template-columns: 48px 1fr 48px;
464
- align-items: center;
465
- background: var(--bg-surface);
466
- border-radius: 14px;
467
- border: 1.5px solid var(--border-color);
468
- overflow: hidden;
469
- height: 50px;
470
- max-width: 190px;
471
- }
472
-
473
- .step-btn {
474
- height: 100%;
475
- border: none;
476
- background: transparent;
477
- color: var(--f-p);
478
- font-size: 1.6rem;
479
- font-weight: 300;
480
- cursor: pointer;
481
- display: flex;
482
- align-items: center;
483
- justify-content: center;
484
- transition: background 0.15s, color 0.15s;
485
- flex-shrink: 0;
486
- }
487
-
488
- .step-btn:hover {
489
- background: var(--f-p);
490
- color: white;
491
- }
492
-
493
- .fabric-input {
494
- width: 100%;
495
- height: 100%;
496
- border: none;
497
- background: transparent;
498
- text-align: center;
499
- font-size: 1rem;
500
- font-weight: 800;
501
- color: inherit;
502
- padding: 0;
503
- outline: none;
504
- box-shadow: none;
505
- }
506
-
507
- .preset-group {
508
- display: grid;
509
- grid-template-columns: repeat(3, 1fr);
510
- gap: 0.5rem;
511
- }
512
-
513
- .preset-pill {
514
- padding: 0.75rem 0;
515
- border-radius: 12px;
516
- border: 1.5px solid rgba(79, 70, 229, 0.25);
517
- background: rgba(79, 70, 229, 0.06);
518
- font-size: 0.72rem;
519
- font-weight: 900;
520
- color: var(--f-p);
521
- cursor: pointer;
522
- transition: all 0.2s;
523
- text-align: center;
524
- }
525
-
526
- .theme-dark .preset-pill {
527
- background: rgba(79, 70, 229, 0.08);
528
- border-color: rgba(129, 140, 248, 0.3);
529
- color: var(--f-a);
530
- }
531
-
532
- .preset-pill:hover {
533
- background: rgba(79, 70, 229, 0.12);
534
- border-color: var(--f-p);
535
- }
536
-
537
- .preset-pill.active {
538
- background: var(--f-p);
539
- color: white;
540
- border-color: var(--f-p);
541
- box-shadow: 0 6px 16px rgba(79, 70, 229, 0.35);
542
- }
543
-
544
- .btn-actions {
545
- display: grid;
546
- grid-template-columns: 1fr 1fr;
547
- gap: 1rem;
548
- margin-top: auto;
549
- padding-top: 1rem;
550
- }
551
-
552
- .f-btn {
553
- height: 50px;
554
- border-radius: 14px;
555
- font-size: 0.85rem;
556
- font-weight: 800;
557
- cursor: pointer;
558
- border: none;
559
- transition: all 0.2s;
560
- }
561
-
562
- .f-seco {
563
- background: var(--bg-muted);
564
- color: var(--text-muted);
565
- border: 1.5px solid var(--border-color);
566
- }
567
-
568
- .f-seco:hover {
569
- filter: brightness(0.95);
570
- }
571
-
572
- .f-prim {
573
- background: var(--f-p);
574
- color: white;
575
- }
576
-
577
- .f-prim:hover {
578
- filter: brightness(1.1);
579
- }
580
-
581
- .fabric-main {
582
- padding: 3rem;
583
- display: flex;
584
- flex-direction: column;
585
- gap: 2.5rem;
586
- min-width: 0;
587
- }
588
-
589
- .magic-result-area {
590
- background: linear-gradient(145deg, rgba(79, 70, 229, 0.07), rgba(129, 140, 248, 0.03));
591
- padding: 2.5rem 2rem;
592
- border-radius: 28px;
593
- border: 1px solid rgba(79, 70, 229, 0.12);
594
- }
595
-
596
- .result-lbl {
597
- display: block;
598
- font-size: 0.68rem;
599
- font-weight: 900;
600
- text-transform: uppercase;
601
- letter-spacing: 0.12rem;
602
- color: var(--text-muted);
603
- margin-bottom: 0.4rem;
604
- }
605
-
606
- .magic-result-area .val {
607
- font-size: 6rem;
608
- font-weight: 950;
609
- letter-spacing: -5px;
610
- color: var(--f-p);
611
- line-height: 0.85;
612
- }
613
-
614
- .magic-result-area .unit {
615
- font-size: 1.75rem;
616
- font-weight: 900;
617
- opacity: 0.4;
618
- margin-left: 0.5rem;
619
- }
620
-
621
- .advice-tag {
622
- display: inline-flex;
623
- align-items: center;
624
- margin-top: 1.5rem;
625
- padding: 0.85rem 2rem;
626
- background: rgba(79, 70, 229, 0.1);
627
- border: 1.5px solid rgba(79, 70, 229, 0.22);
628
- border-radius: 50px;
629
- font-size: 1rem;
630
- font-weight: 800;
631
- color: var(--f-p);
632
- }
633
-
634
- .theme-dark .advice-tag {
635
- background: rgba(129, 140, 248, 0.12);
636
- border-color: rgba(129, 140, 248, 0.25);
637
- color: var(--f-a);
638
- }
639
-
640
- .layout-container {
641
- min-width: 0;
642
- }
643
-
644
- .canvas-wrapper {
645
- background: var(--bg-muted);
646
- padding: 24px 24px 14px 12px;
647
- border-radius: 28px;
648
- }
649
-
650
- .scheme-area {
651
- display: flex;
652
- align-items: stretch;
653
- gap: 10px;
654
- }
655
-
656
- .ruler {
657
- width: 34px;
658
- flex-shrink: 0;
659
- position: relative;
660
- }
661
-
662
- :global(.ruler-mark) {
663
- position: absolute;
664
- left: 0;
665
- right: 0;
666
- display: flex;
667
- align-items: flex-start;
668
- transform: translateY(-50%);
669
- }
670
-
671
- :global(.ruler-mark::before) {
672
- content: '';
673
- width: 8px;
674
- height: 1.5px;
675
- background: var(--text-muted);
676
- flex-shrink: 0;
677
- margin-top: 0.42em;
678
- margin-right: 4px;
679
- }
680
-
681
- :global(.ruler-mark span) {
682
- font-size: 0.58rem;
683
- font-weight: 700;
684
- color: var(--text-muted);
685
- white-space: nowrap;
686
- }
687
-
688
- .fabric-board {
689
- flex: 1;
690
- height: 300px;
691
- background: var(--bg-surface);
692
- border: 2.5px solid var(--f-p);
693
- padding: 6px 6px 28px;
694
- box-shadow: 0 16px 36px rgba(0, 0, 0, 0.09);
695
- display: flex;
696
- flex-direction: column;
697
- gap: 4px;
698
- position: relative;
699
- overflow: hidden;
700
- border-radius: 4px;
701
- }
702
-
703
- :global(.piece-row) {
704
- display: flex;
705
- flex-direction: row;
706
- gap: 4px;
707
- flex-shrink: 0;
708
- align-items: stretch;
709
- }
710
-
711
- :global(.piece-block) {
712
- border-radius: 4px;
713
- border: 1.5px solid;
714
- display: flex;
715
- flex-direction: column;
716
- align-items: flex-start;
717
- justify-content: center;
718
- padding: 4px 8px;
719
- overflow: hidden;
720
- min-width: 0;
721
- transition: filter 0.15s;
722
- }
723
-
724
- :global(.piece-block:hover) {
725
- filter: brightness(1.08);
726
- }
727
-
728
- :global(.piece-name) {
729
- font-size: 0.62rem;
730
- font-weight: 800;
731
- color: var(--text-main);
732
- line-height: 1.2;
733
- white-space: nowrap;
734
- overflow: hidden;
735
- text-overflow: ellipsis;
736
- width: 100%;
737
- }
738
-
739
- :global(.piece-fold) {
740
- border-left: 3px dashed rgba(79, 70, 229, 0.65);
741
- }
742
-
743
- :global(.fold-indicator) {
744
- font-size: 0.48rem;
745
- font-weight: 800;
746
- color: rgba(79, 70, 229, 0.75);
747
- text-transform: uppercase;
748
- letter-spacing: 0.04em;
749
- margin-top: 2px;
750
- }
751
-
752
- :global(.board-empty-state) {
753
- flex: 1;
754
- display: flex;
755
- align-items: center;
756
- justify-content: center;
757
- font-size: 0.8rem;
758
- font-weight: 600;
759
- color: var(--text-muted);
760
- text-align: center;
761
- padding: 2rem;
762
- }
763
-
764
- .scheme-info {
765
- font-size: 0.68rem;
766
- font-weight: 700;
767
- color: var(--text-muted);
768
- margin-top: 0.6rem;
769
- text-align: right;
770
- }
771
-
772
- .merch-section {
773
- min-width: 0;
774
- }
775
-
776
- .merch-header {
777
- display: flex;
778
- align-items: center;
779
- justify-content: space-between;
780
- margin-bottom: 1rem;
781
- padding-bottom: 0.5rem;
782
- border-bottom: 2px solid var(--border-color);
783
- }
784
-
785
- .merch-title {
786
- font-size: 0.7rem;
787
- font-weight: 900;
788
- text-transform: uppercase;
789
- letter-spacing: 0.18rem;
790
- color: var(--f-p);
791
- margin: 0;
792
- }
793
-
794
- .copy-list-btn {
795
- font-size: 0.7rem;
796
- font-weight: 800;
797
- color: var(--f-p);
798
- background: rgba(79, 70, 229, 0.08);
799
- border: 1px solid rgba(79, 70, 229, 0.2);
800
- border-radius: 8px;
801
- padding: 0.35rem 0.85rem;
802
- cursor: pointer;
803
- transition: all 0.2s;
804
- }
805
-
806
- .copy-list-btn:hover {
807
- background: rgba(79, 70, 229, 0.15);
808
- }
809
-
810
- .merceria-checklist {
811
- list-style: none;
812
- margin: 0;
813
- padding: 0;
814
- display: flex;
815
- flex-direction: column;
816
- gap: 0.6rem;
817
- }
818
-
819
- :global(.merch-item) {
820
- display: flex;
821
- align-items: center;
822
- gap: 0.6rem;
823
- font-size: 0.875rem;
824
- font-weight: 600;
825
- color: var(--text-main);
826
- }
827
-
828
- :global(.merch-dot) {
829
- color: var(--f-p);
830
- font-size: 0.5rem;
831
- flex-shrink: 0;
832
- opacity: 0.65;
833
- }
834
-
835
- .warning-banner {
836
- display: none;
837
- background: #fff7ed;
838
- color: #c2410c;
839
- border: 1.5px solid #fed7aa;
840
- padding: 1rem 1.25rem;
841
- border-radius: 16px;
842
- font-size: 0.85rem;
843
- font-weight: 600;
844
- }
845
-
846
- @media (max-width: 1100px) {
847
- .fabric-calculator-card {
848
- grid-template-columns: 1fr;
849
- width: 100%;
850
- border-radius: 1rem;
851
- margin: 0;
852
- }
853
-
854
- .fabric-sidebar {
855
- border-right: none;
856
- border-bottom: 1px solid var(--border-color);
857
- padding: 1.75rem 1.5rem;
858
- }
859
-
860
- .btn-actions {
861
- margin-top: 1rem;
862
- }
863
-
864
- .fabric-main {
865
- padding: 2rem 1.5rem;
866
- gap: 2rem;
867
- }
868
-
869
- .magic-result-area .val {
870
- font-size: 4.5rem;
871
- letter-spacing: -3px;
872
- }
873
- }
874
-
875
- @media (max-width: 600px) {
876
- .fabric-sidebar {
877
- padding: 1.25rem;
878
- }
879
-
880
- .fabric-main {
881
- padding: 1.25rem;
882
- gap: 1.5rem;
883
- }
884
-
885
- .magic-result-area {
886
- padding: 1.5rem 1.25rem;
887
- border-radius: 1rem;
888
- }
889
-
890
- .magic-result-area .val {
891
- font-size: 3rem;
892
- letter-spacing: -2px;
893
- }
894
-
895
- .magic-result-area .unit {
896
- font-size: 1.2rem;
897
- }
898
-
899
- .advice-tag {
900
- font-size: 0.875rem;
901
- padding: 0.7rem 1.25rem;
902
- }
903
-
904
- .canvas-wrapper {
905
- padding: 14px 14px 10px 8px;
906
- border-radius: 16px;
907
- }
908
-
909
- .fabric-board {
910
- height: 220px;
911
- padding-bottom: 20px;
912
- }
913
- }
914
- </style>
@@ -0,0 +1,30 @@
1
+ import type { TextilesToolEntry, ToolLocaleContent } from '../../types';
2
+
3
+ import type { FabricProjectCalculatorUI } from './ui';
4
+
5
+ export type FabricProjectCalculatorLocaleContent = ToolLocaleContent<FabricProjectCalculatorUI>;
6
+
7
+ export const fabricProjectCalculator: TextilesToolEntry<FabricProjectCalculatorUI> = {
8
+ id: 'fabric-project-calculator',
9
+ icons: {
10
+ bg: 'mdi:content-cut',
11
+ fg: 'mdi:tape-measure',
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
+ };