@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,456 @@
1
+ .knitting-gauge-card {
2
+ --gauge-primary: #b06161;
3
+ --gauge-secondary: #ead7bb;
4
+ --gauge-accent: #d37676;
5
+ --gauge-bg: rgba(255, 255, 255, 0.75);
6
+ --gauge-sidebar-bg: rgba(255, 255, 255, 0.45);
7
+ --gauge-item-bg: rgba(255, 255, 255, 0.45);
8
+ --gauge-border: rgba(0, 0, 0, 0.05);
9
+ --gauge-input-bg: rgba(255, 255, 255, 0.6);
10
+ --gauge-radius: 24px;
11
+ --gauge-shadow: 0 15px 40px rgba(0, 0, 0, 0.08);
12
+
13
+ display: grid;
14
+ grid-template-columns: 320px 1fr;
15
+ max-width: 1150px;
16
+ width: 95%;
17
+ margin: 2rem auto;
18
+ background: var(--gauge-bg);
19
+ backdrop-filter: blur(15px);
20
+ border-radius: var(--gauge-radius);
21
+ overflow: hidden;
22
+ border: 1px solid rgba(255, 255, 255, 0.3);
23
+ box-shadow: var(--gauge-shadow);
24
+ color: #444;
25
+ }
26
+
27
+ :global(.theme-dark) .knitting-gauge-card {
28
+ --gauge-primary: #ff7e7e;
29
+ --gauge-secondary: #2d2d30;
30
+ --gauge-accent: #ffa4a4;
31
+ --gauge-bg: rgba(13, 13, 15, 0.95);
32
+ --gauge-sidebar-bg: rgba(0, 0, 0, 0.3);
33
+ --gauge-item-bg: rgba(255, 255, 255, 0.03);
34
+ --gauge-border: rgba(255, 255, 255, 0.1);
35
+ --gauge-input-bg: rgba(255, 255, 255, 0.05);
36
+ --gauge-shadow: 0 25px 60px rgba(0, 0, 0, 0.6);
37
+
38
+ color: #f3f4f6;
39
+ border-color: var(--gauge-border);
40
+ }
41
+
42
+ .gauge-sidebar {
43
+ background: var(--gauge-sidebar-bg);
44
+ padding: 1.5rem;
45
+ display: flex;
46
+ flex-direction: column;
47
+ gap: 1.5rem;
48
+ border-right: 1px solid var(--gauge-border);
49
+ max-height: 85vh;
50
+ overflow-y: auto;
51
+ }
52
+
53
+ .config-section {
54
+ display: flex;
55
+ flex-direction: column;
56
+ gap: 0.8rem;
57
+ }
58
+
59
+ .config-section h3 {
60
+ font-size: 0.7rem;
61
+ font-weight: 800;
62
+ text-transform: uppercase;
63
+ letter-spacing: 0.1rem;
64
+ color: var(--gauge-primary);
65
+ margin: 0;
66
+ display: flex;
67
+ align-items: center;
68
+ gap: 0.5rem;
69
+ }
70
+
71
+ .input-grid {
72
+ display: grid;
73
+ grid-template-columns: 1fr 1fr;
74
+ gap: 0.75rem;
75
+ }
76
+
77
+ .gauge-field {
78
+ display: flex;
79
+ flex-direction: column;
80
+ gap: 0.3rem;
81
+ position: relative;
82
+ }
83
+
84
+ .gauge-field label {
85
+ font-size: 0.6rem;
86
+ font-weight: 700;
87
+ text-transform: uppercase;
88
+ opacity: 0.6;
89
+ display: flex;
90
+ justify-content: space-between;
91
+ }
92
+
93
+ .label-sub {
94
+ font-weight: 400;
95
+ opacity: 0.8;
96
+ text-transform: none;
97
+ }
98
+
99
+ .stepper-container {
100
+ display: flex;
101
+ align-items: center;
102
+ background: var(--gauge-input-bg);
103
+ border: 1px solid var(--gauge-border);
104
+ border-radius: 8px;
105
+ overflow: hidden;
106
+ }
107
+
108
+ .stepper-container:focus-within {
109
+ border-color: var(--gauge-primary);
110
+ box-shadow: 0 0 0 2px rgba(176, 97, 97, 0.2);
111
+ }
112
+
113
+ .stepper-btn {
114
+ width: 32px;
115
+ height: 32px;
116
+ border: none;
117
+ background: rgba(0, 0, 0, 0.05);
118
+ cursor: pointer;
119
+ font-size: 1rem;
120
+ display: flex;
121
+ align-items: center;
122
+ justify-content: center;
123
+ transition: background 0.2s;
124
+ color: inherit;
125
+ }
126
+
127
+ :global(.theme-dark) .stepper-btn {
128
+ background: rgba(255, 255, 255, 0.04);
129
+ }
130
+
131
+ .stepper-btn:hover {
132
+ background: var(--gauge-secondary);
133
+ }
134
+
135
+ .gauge-input {
136
+ flex: 1;
137
+ width: 100%;
138
+ border: none;
139
+ background: transparent;
140
+ padding: 0.4rem 0.5rem;
141
+ font-size: 0.9rem;
142
+ text-align: center;
143
+ font-weight: 600;
144
+ color: inherit;
145
+ }
146
+
147
+ .gauge-input:focus {
148
+ outline: none;
149
+ }
150
+
151
+ .gauge-input-bordered {
152
+ border: 1px solid var(--gauge-border);
153
+ border-radius: 8px;
154
+ background: var(--gauge-input-bg);
155
+ }
156
+
157
+ .gauge-select {
158
+ width: 100%;
159
+ padding: 0.5rem;
160
+ border-radius: 8px;
161
+ border: 1px solid var(--gauge-border);
162
+ background: var(--gauge-input-bg);
163
+ font-size: 0.8rem;
164
+ color: inherit;
165
+ }
166
+
167
+ .gauge-main {
168
+ padding: 2.5rem;
169
+ display: flex;
170
+ flex-direction: column;
171
+ gap: 2rem;
172
+ justify-content: center;
173
+ }
174
+
175
+ .top-display {
176
+ display: grid;
177
+ grid-template-columns: auto 1fr;
178
+ gap: 3rem;
179
+ align-items: center;
180
+ }
181
+
182
+ .visualizer-container {
183
+ position: relative;
184
+ width: 180px;
185
+ height: 180px;
186
+ background: var(--gauge-sidebar-bg);
187
+ border-radius: 24px;
188
+ display: flex;
189
+ align-items: center;
190
+ justify-content: center;
191
+ border: 1px dashed var(--gauge-border);
192
+ overflow: hidden;
193
+ }
194
+
195
+ .knit-swatch {
196
+ width: 130px;
197
+ height: 130px;
198
+ background-color: var(--gauge-primary);
199
+ background-image: radial-gradient(circle at 50% 50%, var(--gauge-accent) 1px, transparent 1px);
200
+ background-size: 12px 12px;
201
+ border-radius: 12px;
202
+ box-shadow: 0 10px 25px rgba(0, 0, 0, 0.15);
203
+ transition: all 0.6s cubic-bezier(0.34, 1.56, 0.64, 1);
204
+ position: relative;
205
+ }
206
+
207
+ .main-stat h2 {
208
+ font-size: 0.75rem;
209
+ font-weight: 800;
210
+ text-transform: uppercase;
211
+ opacity: 0.6;
212
+ margin: 0 0 0.5rem;
213
+ }
214
+
215
+ .main-stat .val {
216
+ font-size: 4rem;
217
+ font-weight: 950;
218
+ color: var(--gauge-primary);
219
+ line-height: 1;
220
+ }
221
+
222
+ .val-detail {
223
+ font-size: 0.8rem;
224
+ font-weight: 600;
225
+ opacity: 0.8;
226
+ }
227
+
228
+ .metrics-grid {
229
+ display: grid;
230
+ grid-template-columns: repeat(3, 1fr);
231
+ gap: 1rem;
232
+ }
233
+
234
+ .metric-item {
235
+ padding: 1.2rem;
236
+ background: var(--gauge-item-bg);
237
+ border: 1px solid var(--gauge-border);
238
+ border-radius: 18px;
239
+ display: flex;
240
+ flex-direction: column;
241
+ gap: 0.3rem;
242
+ position: relative;
243
+ }
244
+
245
+ .metric-item .sv {
246
+ font-size: 1.5rem;
247
+ font-weight: 800;
248
+ color: var(--gauge-accent);
249
+ }
250
+
251
+ .sv-suggestion {
252
+ font-size: 1rem;
253
+ line-height: 1.2;
254
+ }
255
+
256
+ .metric-item .sl {
257
+ font-size: 0.65rem;
258
+ font-weight: 700;
259
+ text-transform: uppercase;
260
+ opacity: 0.5;
261
+ display: flex;
262
+ align-items: center;
263
+ gap: 0.3rem;
264
+ }
265
+
266
+ .info-icon {
267
+ font-size: 0.75rem;
268
+ font-style: normal;
269
+ cursor: help;
270
+ opacity: 0.5;
271
+ background: rgba(0, 0, 0, 0.08);
272
+ border-radius: 50%;
273
+ width: 14px;
274
+ height: 14px;
275
+ display: inline-flex;
276
+ align-items: center;
277
+ justify-content: center;
278
+ }
279
+
280
+ :global(.theme-dark) .info-icon {
281
+ background: rgba(255, 255, 255, 0.12);
282
+ }
283
+
284
+ .info-icon:hover {
285
+ opacity: 1;
286
+ }
287
+
288
+ [data-tooltip] {
289
+ position: relative;
290
+ }
291
+
292
+ [data-tooltip]::before {
293
+ content: attr(data-tooltip);
294
+ position: absolute;
295
+ bottom: 125%;
296
+ left: 50%;
297
+ transform: translateX(-50%);
298
+ background: #333;
299
+ color: white;
300
+ padding: 0.5rem 0.8rem;
301
+ border-radius: 6px;
302
+ font-size: 0.7rem;
303
+ white-space: normal;
304
+ width: 200px;
305
+ text-align: center;
306
+ visibility: hidden;
307
+ opacity: 0;
308
+ transition: opacity 0.3s;
309
+ z-index: 100;
310
+ pointer-events: none;
311
+ }
312
+
313
+ :global(.theme-dark) [data-tooltip]::before {
314
+ background: #1f2937;
315
+ border: 1px solid rgba(255, 255, 255, 0.1);
316
+ }
317
+
318
+ [data-tooltip]:hover::before {
319
+ visibility: visible;
320
+ opacity: 1;
321
+ }
322
+
323
+ .yarn-calc-extra {
324
+ padding: 1rem;
325
+ background: rgba(176, 97, 97, 0.05);
326
+ border-radius: 12px;
327
+ font-size: 0.8rem;
328
+ border: 1px solid rgba(176, 97, 97, 0.1);
329
+ display: none;
330
+ }
331
+
332
+ :global(.theme-dark) .yarn-calc-extra {
333
+ background: rgba(255, 126, 126, 0.08);
334
+ border-color: rgba(255, 126, 126, 0.15);
335
+ }
336
+
337
+ .yarn-title {
338
+ margin: 0;
339
+ font-weight: 700;
340
+ color: var(--gauge-primary);
341
+ }
342
+
343
+ .alert-card {
344
+ padding: 1rem;
345
+ border-radius: 12px;
346
+ font-size: 0.82rem;
347
+ margin-top: 0.5rem;
348
+ display: none;
349
+ animation: fade-in 0.4s ease;
350
+ }
351
+
352
+ .alert-card-warn {
353
+ background: #fffbeb;
354
+ color: #92400e;
355
+ border: 1px solid #fde68a;
356
+ }
357
+
358
+ :global(.theme-dark) .alert-card-warn {
359
+ background: rgba(245, 158, 11, 0.15);
360
+ color: #fbbf24;
361
+ border-color: rgba(245, 158, 11, 0.3);
362
+ }
363
+
364
+ .alert-card-err {
365
+ background: #fef2f2;
366
+ color: #991b1b;
367
+ border: 1px solid #fecaca;
368
+ }
369
+
370
+ :global(.theme-dark) .alert-card-err {
371
+ background: rgba(239, 68, 68, 0.15);
372
+ color: #f87171;
373
+ border-color: rgba(239, 68, 68, 0.3);
374
+ }
375
+
376
+ .btn-group {
377
+ display: grid;
378
+ grid-template-columns: 1fr 1.5fr;
379
+ gap: 0.75rem;
380
+ margin-top: auto;
381
+ padding-top: 1rem;
382
+ }
383
+
384
+ .ui-btn {
385
+ padding: 0.8rem;
386
+ border-radius: 12px;
387
+ border: none;
388
+ font-size: 0.75rem;
389
+ font-weight: 800;
390
+ cursor: pointer;
391
+ text-transform: uppercase;
392
+ transition: all 0.2s;
393
+ }
394
+
395
+ .ui-btn-primary {
396
+ background: var(--gauge-primary);
397
+ color: white;
398
+ }
399
+
400
+ .ui-btn-primary:hover {
401
+ filter: brightness(1.1);
402
+ transform: translateY(-1px);
403
+ }
404
+
405
+ .ui-btn-secondary {
406
+ background: rgba(0, 0, 0, 0.05);
407
+ border: 1px solid rgba(0, 0, 0, 0.1);
408
+ color: inherit;
409
+ }
410
+
411
+ :global(.theme-dark) .ui-btn-secondary {
412
+ background: rgba(255, 255, 255, 0.06);
413
+ border-color: rgba(255, 255, 255, 0.15);
414
+ }
415
+
416
+ .ui-btn-secondary:hover {
417
+ background: rgba(0, 0, 0, 0.08);
418
+ }
419
+
420
+ :global(.theme-dark) .ui-btn-secondary:hover {
421
+ background: rgba(255, 255, 255, 0.12);
422
+ }
423
+
424
+ @keyframes fade-in {
425
+ from {
426
+ opacity: 0;
427
+ transform: translateY(10px);
428
+ }
429
+ to {
430
+ opacity: 1;
431
+ transform: translateY(0);
432
+ }
433
+ }
434
+
435
+ @media (max-width: 900px) {
436
+ .knitting-gauge-card {
437
+ grid-template-columns: 1fr;
438
+ max-height: none;
439
+ }
440
+
441
+ .gauge-sidebar {
442
+ border-right: none;
443
+ border-bottom: 1px solid var(--gauge-border);
444
+ max-height: none;
445
+ }
446
+
447
+ .top-display {
448
+ grid-template-columns: 1fr;
449
+ text-align: center;
450
+ justify-items: center;
451
+ }
452
+
453
+ .metrics-grid {
454
+ grid-template-columns: 1fr;
455
+ }
456
+ }