@jjlmoya/utils-textiles 1.11.0 → 1.13.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 (26) hide show
  1. package/package.json +5 -3
  2. package/scripts/postinstall.mjs +27 -0
  3. package/src/tool/burnTest/component.astro +0 -380
  4. package/src/tool/burnTest/textile-burn-test.css +378 -0
  5. package/src/tool/clothingSizeConverter/clothing-size-converter.css +717 -0
  6. package/src/tool/clothingSizeConverter/component.astro +0 -719
  7. package/src/tool/fabricProjectCalculator/component.astro +0 -540
  8. package/src/tool/fabricProjectCalculator/fabric-project-calculator.css +538 -0
  9. package/src/tool/fabricTruth/component.astro +0 -428
  10. package/src/tool/fabricTruth/fabric-truthfulness.css +426 -0
  11. package/src/tool/fiberPrep/component.astro +0 -652
  12. package/src/tool/fiberPrep/fiber-preparation-natural-dyeing.css +650 -0
  13. package/src/tool/knittingGauge/component.astro +0 -458
  14. package/src/tool/knittingGauge/knitting-gauge-calculator.css +456 -0
  15. package/src/tool/laundryGuide/component.astro +0 -317
  16. package/src/tool/laundryGuide/laundry-guide.css +315 -0
  17. package/src/tool/needleConverter/component.astro +0 -344
  18. package/src/tool/needleConverter/knitting-needle-converter.css +342 -0
  19. package/src/tool/sewingPatternScaler/component.astro +0 -314
  20. package/src/tool/sewingPatternScaler/sewing-pattern-scaler.css +313 -0
  21. package/src/tool/shoeSizeConverter/component.astro +0 -255
  22. package/src/tool/shoeSizeConverter/shoe-size-converter.css +253 -0
  23. package/src/tool/stainChemistry/component.astro +0 -479
  24. package/src/tool/stainChemistry/stain-chemical-protocol.css +477 -0
  25. package/src/tool/yarnCalculator/component.astro +0 -446
  26. package/src/tool/yarnCalculator/yarn-calculator.css +444 -0
@@ -172,347 +172,3 @@ const needleUI = ui as NeedleConverterUI;
172
172
  init();
173
173
  </script>
174
174
 
175
- <style>
176
- .needle-wrapper {
177
- padding: 1.5rem 0;
178
- width: 100%;
179
- }
180
-
181
- .needle-card {
182
- --nc-p: #3b82f6;
183
- --nc-s: #0ea5e9;
184
-
185
- background: var(--bg-surface);
186
- color: var(--text-main);
187
- width: calc(100% - 24px);
188
- max-width: 1100px;
189
- margin: 0 auto;
190
- border-radius: 24px;
191
- border: 1px solid var(--border-color);
192
- display: flex;
193
- flex-direction: column;
194
- overflow: hidden;
195
- }
196
-
197
- @media (min-width: 1024px) {
198
- .needle-card {
199
- flex-direction: row;
200
- }
201
- }
202
-
203
- .card-sidebar {
204
- flex: 0 0 auto;
205
- padding: 24px;
206
- width: 100%;
207
- background: var(--bg-surface);
208
- }
209
-
210
- @media (min-width: 1024px) {
211
- .card-sidebar {
212
- width: 400px;
213
- padding: 40px;
214
- border-right: 1px solid var(--border-color);
215
- }
216
- }
217
-
218
- .card-main {
219
- flex: 1 1 auto;
220
- padding: 24px;
221
- background: var(--bg-surface);
222
- display: flex;
223
- flex-direction: column;
224
- gap: 32px;
225
- min-width: 0;
226
- }
227
-
228
- @media (min-width: 1024px) {
229
- .card-main {
230
- padding: 40px;
231
- }
232
- }
233
-
234
- .label-tiny {
235
- font-size: 10px;
236
- font-weight: 700;
237
- text-transform: uppercase;
238
- letter-spacing: 0.12em;
239
- color: var(--text-muted);
240
- margin-bottom: 12px;
241
- display: block;
242
- }
243
-
244
- .mode-toggle {
245
- display: flex;
246
- background: var(--bg-muted);
247
- padding: 4px;
248
- border-radius: 12px;
249
- margin-bottom: 32px;
250
- }
251
-
252
- .toggle-btn {
253
- flex: 1;
254
- border: none;
255
- background: transparent;
256
- padding: 12px;
257
- font-size: 10px;
258
- font-weight: 800;
259
- text-transform: uppercase;
260
- letter-spacing: 0.05em;
261
- color: var(--text-muted);
262
- cursor: pointer;
263
- border-radius: 8px;
264
- transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
265
- }
266
-
267
- .toggle-btn.active {
268
- background: var(--bg-surface);
269
- color: var(--text-main);
270
- box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.05);
271
- }
272
-
273
- .calibration-area {
274
- background: var(--bg-muted);
275
- border-radius: 20px;
276
- padding: 24px;
277
- border: 1px solid var(--border-color);
278
- margin-bottom: 24px;
279
- position: relative;
280
- overflow: hidden;
281
- }
282
-
283
- .hole-selector {
284
- display: flex;
285
- align-items: center;
286
- gap: 24px;
287
- overflow-x: auto;
288
- padding: 30px 10px;
289
- scrollbar-width: none;
290
- scroll-snap-type: x mandatory;
291
- }
292
-
293
- .hole-selector::-webkit-scrollbar {
294
- display: none;
295
- }
296
-
297
- :global(.needle-hole) {
298
- flex: 0 0 auto;
299
- width: 64px;
300
- height: 64px;
301
- background: var(--bg-surface);
302
- border: 1.5px solid var(--border-color);
303
- border-radius: 50%;
304
- display: flex;
305
- align-items: center;
306
- justify-content: center;
307
- cursor: pointer;
308
- position: relative;
309
- transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
310
- scroll-snap-align: center;
311
- }
312
-
313
- :global(.needle-hole::after) {
314
- content: '';
315
- position: absolute;
316
- width: var(--size-px);
317
- height: var(--size-px);
318
- background: var(--text-main);
319
- border-radius: 50%;
320
- opacity: 0.1;
321
- transition: transform 0.3s ease;
322
- }
323
-
324
- :global(.needle-hole.active) {
325
- border-color: var(--nc-p);
326
- background: rgba(59, 130, 246, 0.08);
327
- transform: scale(1.15);
328
- box-shadow: 0 10px 15px -3px rgba(59, 130, 246, 0.15);
329
- }
330
-
331
- :global(.needle-hole.active::after) {
332
- opacity: 1;
333
- background: var(--nc-p);
334
- transform: scale(1.05);
335
- }
336
-
337
- :global(.hole-label) {
338
- position: absolute;
339
- bottom: -28px;
340
- font-size: 11px;
341
- font-weight: 800;
342
- color: var(--text-muted);
343
- transition: color 0.2s;
344
- }
345
-
346
- :global(.needle-hole.active .hole-label) {
347
- color: var(--nc-p);
348
- }
349
-
350
- .calibrator-desc {
351
- font-size: 12px;
352
- color: var(--text-muted);
353
- font-weight: 400;
354
- line-height: 1.6;
355
- }
356
-
357
- .conversion-grid {
358
- display: grid;
359
- grid-template-columns: repeat(3, 1fr);
360
- gap: 16px;
361
- }
362
-
363
- .system-card {
364
- background: var(--bg-muted);
365
- border-radius: 20px;
366
- padding: 24px 16px;
367
- text-align: center;
368
- border: 1px solid var(--border-color);
369
- transition: border-color 0.2s;
370
- }
371
-
372
- .val-large {
373
- display: block;
374
- font-size: 28px;
375
- font-weight: 800;
376
- color: var(--text-main);
377
- line-height: 1;
378
- margin-bottom: 8px;
379
- letter-spacing: -0.02em;
380
- }
381
-
382
- .val-tag {
383
- font-size: 10px;
384
- font-weight: 700;
385
- text-transform: uppercase;
386
- color: var(--text-muted);
387
- letter-spacing: 0.1em;
388
- }
389
-
390
- .yarn-box {
391
- background: #f0f9ff;
392
- border-left: 4px solid var(--nc-s);
393
- padding: 28px;
394
- border-radius: 16px;
395
- display: flex;
396
- gap: 20px;
397
- align-items: center;
398
- }
399
-
400
- .theme-dark .yarn-box {
401
- background: #082f49;
402
- }
403
-
404
- .yarn-icon {
405
- width: 56px;
406
- height: 56px;
407
- background: var(--bg-surface);
408
- border-radius: 16px;
409
- display: flex;
410
- align-items: center;
411
- justify-content: center;
412
- color: var(--nc-s);
413
- flex-shrink: 0;
414
- box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.05);
415
- }
416
-
417
- .yarn-content {
418
- flex: 1;
419
- }
420
-
421
- .yarn-label {
422
- font-size: 9px;
423
- font-weight: 800;
424
- color: #0284c7;
425
- text-transform: uppercase;
426
- letter-spacing: 0.1em;
427
- display: block;
428
- margin-bottom: 4px;
429
- }
430
-
431
- .theme-dark .yarn-label {
432
- color: #7dd3fc;
433
- }
434
-
435
- .yarn-name {
436
- display: block;
437
- font-size: 17px;
438
- font-weight: 800;
439
- color: #075985;
440
- }
441
-
442
- .theme-dark .yarn-name {
443
- color: #bae6fd;
444
- }
445
-
446
- .yarn-wpi {
447
- display: block;
448
- font-size: 12px;
449
- color: #0369a1;
450
- font-weight: 500;
451
- margin-top: 4px;
452
- }
453
-
454
- .theme-dark .yarn-wpi {
455
- color: #7dd3fc;
456
- }
457
-
458
- .table-section {
459
- border-top: 1px solid var(--border-color);
460
- padding-top: 40px;
461
- }
462
-
463
- .needle-table-wrapper {
464
- overflow-x: auto;
465
- border-radius: 16px;
466
- border: 1px solid var(--border-color);
467
- }
468
-
469
- .needle-table {
470
- width: 100%;
471
- border-collapse: collapse;
472
- font-size: 14px;
473
- text-align: center;
474
- }
475
-
476
- .needle-table th {
477
- background: var(--bg-muted);
478
- padding: 16px;
479
- font-size: 10px;
480
- font-weight: 800;
481
- text-transform: uppercase;
482
- color: var(--text-muted);
483
- border-bottom: 1px solid var(--border-color);
484
- }
485
-
486
- .needle-table :global(td) {
487
- padding: 16px;
488
- border-bottom: 1px solid var(--border-color);
489
- color: var(--text-muted);
490
- transition: all 0.2s;
491
- }
492
-
493
- .needle-table :global(tbody tr:nth-child(even) td) {
494
- background: rgba(0, 0, 0, 0.02);
495
- }
496
-
497
- .theme-dark .needle-table :global(tbody tr:nth-child(even) td) {
498
- background: rgba(255, 255, 255, 0.02);
499
- }
500
-
501
- .needle-table :global(tr:hover td) {
502
- background: var(--bg-muted);
503
- }
504
-
505
- .needle-table :global(tr.active td) {
506
- background: rgba(59, 130, 246, 0.05);
507
- color: var(--nc-p);
508
- font-weight: 700;
509
- }
510
-
511
- .needle-table :global(tr.active td:first-child) {
512
- box-shadow: inset 4px 0 0 var(--nc-p);
513
- }
514
-
515
- .theme-dark .needle-table :global(tr.active td) {
516
- background: rgba(59, 130, 246, 0.1);
517
- }
518
- </style>
@@ -0,0 +1,342 @@
1
+ .needle-wrapper {
2
+ padding: 1.5rem 0;
3
+ width: 100%;
4
+ }
5
+
6
+ .needle-card {
7
+ --nc-p: #3b82f6;
8
+ --nc-s: #0ea5e9;
9
+
10
+ background: var(--bg-surface);
11
+ color: var(--text-main);
12
+ width: calc(100% - 24px);
13
+ max-width: 1100px;
14
+ margin: 0 auto;
15
+ border-radius: 24px;
16
+ border: 1px solid var(--border-color);
17
+ display: flex;
18
+ flex-direction: column;
19
+ overflow: hidden;
20
+ }
21
+
22
+ @media (min-width: 1024px) {
23
+ .needle-card {
24
+ flex-direction: row;
25
+ }
26
+ }
27
+
28
+ .card-sidebar {
29
+ flex: 0 0 auto;
30
+ padding: 24px;
31
+ width: 100%;
32
+ background: var(--bg-surface);
33
+ }
34
+
35
+ @media (min-width: 1024px) {
36
+ .card-sidebar {
37
+ width: 400px;
38
+ padding: 40px;
39
+ border-right: 1px solid var(--border-color);
40
+ }
41
+ }
42
+
43
+ .card-main {
44
+ flex: 1 1 auto;
45
+ padding: 24px;
46
+ background: var(--bg-surface);
47
+ display: flex;
48
+ flex-direction: column;
49
+ gap: 32px;
50
+ min-width: 0;
51
+ }
52
+
53
+ @media (min-width: 1024px) {
54
+ .card-main {
55
+ padding: 40px;
56
+ }
57
+ }
58
+
59
+ .label-tiny {
60
+ font-size: 10px;
61
+ font-weight: 700;
62
+ text-transform: uppercase;
63
+ letter-spacing: 0.12em;
64
+ color: var(--text-muted);
65
+ margin-bottom: 12px;
66
+ display: block;
67
+ }
68
+
69
+ .mode-toggle {
70
+ display: flex;
71
+ background: var(--bg-muted);
72
+ padding: 4px;
73
+ border-radius: 12px;
74
+ margin-bottom: 32px;
75
+ }
76
+
77
+ .toggle-btn {
78
+ flex: 1;
79
+ border: none;
80
+ background: transparent;
81
+ padding: 12px;
82
+ font-size: 10px;
83
+ font-weight: 800;
84
+ text-transform: uppercase;
85
+ letter-spacing: 0.05em;
86
+ color: var(--text-muted);
87
+ cursor: pointer;
88
+ border-radius: 8px;
89
+ transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
90
+ }
91
+
92
+ .toggle-btn.active {
93
+ background: var(--bg-surface);
94
+ color: var(--text-main);
95
+ box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.05);
96
+ }
97
+
98
+ .calibration-area {
99
+ background: var(--bg-muted);
100
+ border-radius: 20px;
101
+ padding: 24px;
102
+ border: 1px solid var(--border-color);
103
+ margin-bottom: 24px;
104
+ position: relative;
105
+ overflow: hidden;
106
+ }
107
+
108
+ .hole-selector {
109
+ display: flex;
110
+ align-items: center;
111
+ gap: 24px;
112
+ overflow-x: auto;
113
+ padding: 30px 10px;
114
+ scrollbar-width: none;
115
+ scroll-snap-type: x mandatory;
116
+ }
117
+
118
+ .hole-selector::-webkit-scrollbar {
119
+ display: none;
120
+ }
121
+
122
+ .needle-hole {
123
+ flex: 0 0 auto;
124
+ width: 64px;
125
+ height: 64px;
126
+ background: var(--bg-surface);
127
+ border: 1.5px solid var(--border-color);
128
+ border-radius: 50%;
129
+ display: flex;
130
+ align-items: center;
131
+ justify-content: center;
132
+ cursor: pointer;
133
+ position: relative;
134
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
135
+ scroll-snap-align: center;
136
+ }
137
+
138
+ .needle-hole::after {
139
+ content: '';
140
+ position: absolute;
141
+ width: var(--size-px);
142
+ height: var(--size-px);
143
+ background: var(--text-main);
144
+ border-radius: 50%;
145
+ opacity: 0.1;
146
+ transition: transform 0.3s ease;
147
+ }
148
+
149
+ .needle-hole.active {
150
+ border-color: var(--nc-p);
151
+ background: rgba(59, 130, 246, 0.08);
152
+ transform: scale(1.15);
153
+ box-shadow: 0 10px 15px -3px rgba(59, 130, 246, 0.15);
154
+ }
155
+
156
+ .needle-hole.active::after {
157
+ opacity: 1;
158
+ background: var(--nc-p);
159
+ transform: scale(1.05);
160
+ }
161
+
162
+ .hole-label {
163
+ position: absolute;
164
+ bottom: -28px;
165
+ font-size: 11px;
166
+ font-weight: 800;
167
+ color: var(--text-muted);
168
+ transition: color 0.2s;
169
+ }
170
+
171
+ .needle-hole.active .hole-label {
172
+ color: var(--nc-p);
173
+ }
174
+
175
+ .calibrator-desc {
176
+ font-size: 12px;
177
+ color: var(--text-muted);
178
+ font-weight: 400;
179
+ line-height: 1.6;
180
+ }
181
+
182
+ .conversion-grid {
183
+ display: grid;
184
+ grid-template-columns: repeat(3, 1fr);
185
+ gap: 16px;
186
+ }
187
+
188
+ .system-card {
189
+ background: var(--bg-muted);
190
+ border-radius: 20px;
191
+ padding: 24px 16px;
192
+ text-align: center;
193
+ border: 1px solid var(--border-color);
194
+ transition: border-color 0.2s;
195
+ }
196
+
197
+ .val-large {
198
+ display: block;
199
+ font-size: 28px;
200
+ font-weight: 800;
201
+ color: var(--text-main);
202
+ line-height: 1;
203
+ margin-bottom: 8px;
204
+ letter-spacing: -0.02em;
205
+ }
206
+
207
+ .val-tag {
208
+ font-size: 10px;
209
+ font-weight: 700;
210
+ text-transform: uppercase;
211
+ color: var(--text-muted);
212
+ letter-spacing: 0.1em;
213
+ }
214
+
215
+ .yarn-box {
216
+ background: #f0f9ff;
217
+ border-left: 4px solid var(--nc-s);
218
+ padding: 28px;
219
+ border-radius: 16px;
220
+ display: flex;
221
+ gap: 20px;
222
+ align-items: center;
223
+ }
224
+
225
+ .theme-dark .yarn-box {
226
+ background: #082f49;
227
+ }
228
+
229
+ .yarn-icon {
230
+ width: 56px;
231
+ height: 56px;
232
+ background: var(--bg-surface);
233
+ border-radius: 16px;
234
+ display: flex;
235
+ align-items: center;
236
+ justify-content: center;
237
+ color: var(--nc-s);
238
+ flex-shrink: 0;
239
+ box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.05);
240
+ }
241
+
242
+ .yarn-content {
243
+ flex: 1;
244
+ }
245
+
246
+ .yarn-label {
247
+ font-size: 9px;
248
+ font-weight: 800;
249
+ color: #0284c7;
250
+ text-transform: uppercase;
251
+ letter-spacing: 0.1em;
252
+ display: block;
253
+ margin-bottom: 4px;
254
+ }
255
+
256
+ .theme-dark .yarn-label {
257
+ color: #7dd3fc;
258
+ }
259
+
260
+ .yarn-name {
261
+ display: block;
262
+ font-size: 17px;
263
+ font-weight: 800;
264
+ color: #075985;
265
+ }
266
+
267
+ .theme-dark .yarn-name {
268
+ color: #bae6fd;
269
+ }
270
+
271
+ .yarn-wpi {
272
+ display: block;
273
+ font-size: 12px;
274
+ color: #0369a1;
275
+ font-weight: 500;
276
+ margin-top: 4px;
277
+ }
278
+
279
+ .theme-dark .yarn-wpi {
280
+ color: #7dd3fc;
281
+ }
282
+
283
+ .table-section {
284
+ border-top: 1px solid var(--border-color);
285
+ padding-top: 40px;
286
+ }
287
+
288
+ .needle-table-wrapper {
289
+ overflow-x: auto;
290
+ border-radius: 16px;
291
+ border: 1px solid var(--border-color);
292
+ }
293
+
294
+ .needle-table {
295
+ width: 100%;
296
+ border-collapse: collapse;
297
+ font-size: 14px;
298
+ text-align: center;
299
+ }
300
+
301
+ .needle-table th {
302
+ background: var(--bg-muted);
303
+ padding: 16px;
304
+ font-size: 10px;
305
+ font-weight: 800;
306
+ text-transform: uppercase;
307
+ color: var(--text-muted);
308
+ border-bottom: 1px solid var(--border-color);
309
+ }
310
+
311
+ .needle-table td {
312
+ padding: 16px;
313
+ border-bottom: 1px solid var(--border-color);
314
+ color: var(--text-muted);
315
+ transition: all 0.2s;
316
+ }
317
+
318
+ .needle-table tbody tr:nth-child(even td) {
319
+ background: rgba(0, 0, 0, 0.02);
320
+ }
321
+
322
+ .theme-dark .needle-table tbody tr:nth-child(even td) {
323
+ background: rgba(255, 255, 255, 0.02);
324
+ }
325
+
326
+ .needle-table tr:hover td {
327
+ background: var(--bg-muted);
328
+ }
329
+
330
+ .needle-table tr.active td {
331
+ background: rgba(59, 130, 246, 0.05);
332
+ color: var(--nc-p);
333
+ font-weight: 700;
334
+ }
335
+
336
+ .needle-table tr.active td:first-child {
337
+ box-shadow: inset 4px 0 0 var(--nc-p);
338
+ }
339
+
340
+ .theme-dark .needle-table tr.active td {
341
+ background: rgba(59, 130, 246, 0.1);
342
+ }