@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,538 @@
1
+ .fabric-calculator-card {
2
+ --f-p: #4f46e5;
3
+ --f-a: #818cf8;
4
+ --f-side: rgba(79, 70, 229, 0.04);
5
+
6
+ display: grid;
7
+ grid-template-columns: 360px 1fr;
8
+ max-width: 1200px;
9
+ width: 95%;
10
+ margin: 2rem auto;
11
+ background: var(--bg-surface);
12
+ backdrop-filter: blur(25px);
13
+ border-radius: 32px;
14
+ overflow: hidden;
15
+ border: 1px solid var(--border-color);
16
+ box-shadow: 0 40px 100px rgba(0, 0, 0, 0.15);
17
+ color: var(--text-main);
18
+ }
19
+
20
+ .theme-dark .fabric-calculator-card {
21
+ --f-side: rgba(255, 255, 255, 0.03);
22
+ }
23
+
24
+ .fabric-sidebar {
25
+ background: var(--f-side);
26
+ padding: 2.5rem 2rem;
27
+ display: flex;
28
+ flex-direction: column;
29
+ gap: 2rem;
30
+ border-right: 1px solid var(--border-color);
31
+ }
32
+
33
+ .config-group {
34
+ display: flex;
35
+ flex-direction: column;
36
+ gap: 1.25rem;
37
+ }
38
+
39
+ .config-group h3 {
40
+ font-size: 0.7rem;
41
+ font-weight: 900;
42
+ text-transform: uppercase;
43
+ letter-spacing: 0.18rem;
44
+ color: var(--f-p);
45
+ margin: 0;
46
+ }
47
+
48
+ .fabric-field {
49
+ display: flex;
50
+ flex-direction: column;
51
+ gap: 0.6rem;
52
+ }
53
+
54
+ .fabric-field label {
55
+ font-size: 0.72rem;
56
+ font-weight: 800;
57
+ text-transform: uppercase;
58
+ letter-spacing: 0.06rem;
59
+ color: var(--text-muted);
60
+ }
61
+
62
+ .fabric-select {
63
+ width: 100%;
64
+ padding: 0.85rem 3rem 0.85rem 1.1rem;
65
+ border-radius: 14px;
66
+ border: 1.5px solid var(--border-color);
67
+ background: var(--bg-surface);
68
+ font-size: 0.875rem;
69
+ font-weight: 700;
70
+ color: inherit;
71
+ cursor: pointer;
72
+ appearance: none;
73
+ 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");
74
+ background-repeat: no-repeat;
75
+ background-position: right 1rem center;
76
+ background-size: 1.1rem;
77
+ transition: border-color 0.2s, box-shadow 0.2s;
78
+ outline: none;
79
+ }
80
+
81
+ .fabric-select:focus {
82
+ border-color: var(--f-p);
83
+ box-shadow: 0 0 0 3px rgba(79, 70, 229, 0.15);
84
+ }
85
+
86
+ .shop-stepper {
87
+ display: grid;
88
+ grid-template-columns: 48px 1fr 48px;
89
+ align-items: center;
90
+ background: var(--bg-surface);
91
+ border-radius: 14px;
92
+ border: 1.5px solid var(--border-color);
93
+ overflow: hidden;
94
+ height: 50px;
95
+ max-width: 190px;
96
+ }
97
+
98
+ .step-btn {
99
+ height: 100%;
100
+ border: none;
101
+ background: transparent;
102
+ color: var(--f-p);
103
+ font-size: 1.6rem;
104
+ font-weight: 300;
105
+ cursor: pointer;
106
+ display: flex;
107
+ align-items: center;
108
+ justify-content: center;
109
+ transition: background 0.15s, color 0.15s;
110
+ flex-shrink: 0;
111
+ }
112
+
113
+ .step-btn:hover {
114
+ background: var(--f-p);
115
+ color: white;
116
+ }
117
+
118
+ .fabric-input {
119
+ width: 100%;
120
+ height: 100%;
121
+ border: none;
122
+ background: transparent;
123
+ text-align: center;
124
+ font-size: 1rem;
125
+ font-weight: 800;
126
+ color: inherit;
127
+ padding: 0;
128
+ outline: none;
129
+ box-shadow: none;
130
+ }
131
+
132
+ .preset-group {
133
+ display: grid;
134
+ grid-template-columns: repeat(3, 1fr);
135
+ gap: 0.5rem;
136
+ }
137
+
138
+ .preset-pill {
139
+ padding: 0.75rem 0;
140
+ border-radius: 12px;
141
+ border: 1.5px solid rgba(79, 70, 229, 0.25);
142
+ background: rgba(79, 70, 229, 0.06);
143
+ font-size: 0.72rem;
144
+ font-weight: 900;
145
+ color: var(--f-p);
146
+ cursor: pointer;
147
+ transition: all 0.2s;
148
+ text-align: center;
149
+ }
150
+
151
+ .theme-dark .preset-pill {
152
+ background: rgba(79, 70, 229, 0.08);
153
+ border-color: rgba(129, 140, 248, 0.3);
154
+ color: var(--f-a);
155
+ }
156
+
157
+ .preset-pill:hover {
158
+ background: rgba(79, 70, 229, 0.12);
159
+ border-color: var(--f-p);
160
+ }
161
+
162
+ .preset-pill.active {
163
+ background: var(--f-p);
164
+ color: white;
165
+ border-color: var(--f-p);
166
+ box-shadow: 0 6px 16px rgba(79, 70, 229, 0.35);
167
+ }
168
+
169
+ .btn-actions {
170
+ display: grid;
171
+ grid-template-columns: 1fr 1fr;
172
+ gap: 1rem;
173
+ margin-top: auto;
174
+ padding-top: 1rem;
175
+ }
176
+
177
+ .f-btn {
178
+ height: 50px;
179
+ border-radius: 14px;
180
+ font-size: 0.85rem;
181
+ font-weight: 800;
182
+ cursor: pointer;
183
+ border: none;
184
+ transition: all 0.2s;
185
+ }
186
+
187
+ .f-seco {
188
+ background: var(--bg-muted);
189
+ color: var(--text-muted);
190
+ border: 1.5px solid var(--border-color);
191
+ }
192
+
193
+ .f-seco:hover {
194
+ filter: brightness(0.95);
195
+ }
196
+
197
+ .f-prim {
198
+ background: var(--f-p);
199
+ color: white;
200
+ }
201
+
202
+ .f-prim:hover {
203
+ filter: brightness(1.1);
204
+ }
205
+
206
+ .fabric-main {
207
+ padding: 3rem;
208
+ display: flex;
209
+ flex-direction: column;
210
+ gap: 2.5rem;
211
+ min-width: 0;
212
+ }
213
+
214
+ .magic-result-area {
215
+ background: linear-gradient(145deg, rgba(79, 70, 229, 0.07), rgba(129, 140, 248, 0.03));
216
+ padding: 2.5rem 2rem;
217
+ border-radius: 28px;
218
+ border: 1px solid rgba(79, 70, 229, 0.12);
219
+ }
220
+
221
+ .result-lbl {
222
+ display: block;
223
+ font-size: 0.68rem;
224
+ font-weight: 900;
225
+ text-transform: uppercase;
226
+ letter-spacing: 0.12rem;
227
+ color: var(--text-muted);
228
+ margin-bottom: 0.4rem;
229
+ }
230
+
231
+ .magic-result-area .val {
232
+ font-size: 6rem;
233
+ font-weight: 950;
234
+ letter-spacing: -5px;
235
+ color: var(--f-p);
236
+ line-height: 0.85;
237
+ }
238
+
239
+ .magic-result-area .unit {
240
+ font-size: 1.75rem;
241
+ font-weight: 900;
242
+ opacity: 0.4;
243
+ margin-left: 0.5rem;
244
+ }
245
+
246
+ .advice-tag {
247
+ display: inline-flex;
248
+ align-items: center;
249
+ margin-top: 1.5rem;
250
+ padding: 0.85rem 2rem;
251
+ background: rgba(79, 70, 229, 0.1);
252
+ border: 1.5px solid rgba(79, 70, 229, 0.22);
253
+ border-radius: 50px;
254
+ font-size: 1rem;
255
+ font-weight: 800;
256
+ color: var(--f-p);
257
+ }
258
+
259
+ .theme-dark .advice-tag {
260
+ background: rgba(129, 140, 248, 0.12);
261
+ border-color: rgba(129, 140, 248, 0.25);
262
+ color: var(--f-a);
263
+ }
264
+
265
+ .layout-container {
266
+ min-width: 0;
267
+ }
268
+
269
+ .canvas-wrapper {
270
+ background: var(--bg-muted);
271
+ padding: 24px 24px 14px 12px;
272
+ border-radius: 28px;
273
+ }
274
+
275
+ .scheme-area {
276
+ display: flex;
277
+ align-items: stretch;
278
+ gap: 10px;
279
+ }
280
+
281
+ .ruler {
282
+ width: 34px;
283
+ flex-shrink: 0;
284
+ position: relative;
285
+ }
286
+
287
+ :global(.ruler-mark) {
288
+ position: absolute;
289
+ left: 0;
290
+ right: 0;
291
+ display: flex;
292
+ align-items: flex-start;
293
+ transform: translateY(-50%);
294
+ }
295
+
296
+ :global(.ruler-mark::before) {
297
+ content: '';
298
+ width: 8px;
299
+ height: 1.5px;
300
+ background: var(--text-muted);
301
+ flex-shrink: 0;
302
+ margin-top: 0.42em;
303
+ margin-right: 4px;
304
+ }
305
+
306
+ :global(.ruler-mark span) {
307
+ font-size: 0.58rem;
308
+ font-weight: 700;
309
+ color: var(--text-muted);
310
+ white-space: nowrap;
311
+ }
312
+
313
+ .fabric-board {
314
+ flex: 1;
315
+ height: 300px;
316
+ background: var(--bg-surface);
317
+ border: 2.5px solid var(--f-p);
318
+ padding: 6px 6px 28px;
319
+ box-shadow: 0 16px 36px rgba(0, 0, 0, 0.09);
320
+ display: flex;
321
+ flex-direction: column;
322
+ gap: 4px;
323
+ position: relative;
324
+ overflow: hidden;
325
+ border-radius: 4px;
326
+ }
327
+
328
+ :global(.piece-row) {
329
+ display: flex;
330
+ flex-direction: row;
331
+ gap: 4px;
332
+ flex-shrink: 0;
333
+ align-items: stretch;
334
+ }
335
+
336
+ :global(.piece-block) {
337
+ border-radius: 4px;
338
+ border: 1.5px solid;
339
+ display: flex;
340
+ flex-direction: column;
341
+ align-items: flex-start;
342
+ justify-content: center;
343
+ padding: 4px 8px;
344
+ overflow: hidden;
345
+ min-width: 0;
346
+ transition: filter 0.15s;
347
+ }
348
+
349
+ :global(.piece-block:hover) {
350
+ filter: brightness(1.08);
351
+ }
352
+
353
+ :global(.piece-name) {
354
+ font-size: 0.62rem;
355
+ font-weight: 800;
356
+ color: var(--text-main);
357
+ line-height: 1.2;
358
+ white-space: nowrap;
359
+ overflow: hidden;
360
+ text-overflow: ellipsis;
361
+ width: 100%;
362
+ }
363
+
364
+ :global(.piece-fold) {
365
+ border-left: 3px dashed rgba(79, 70, 229, 0.65);
366
+ }
367
+
368
+ :global(.fold-indicator) {
369
+ font-size: 0.48rem;
370
+ font-weight: 800;
371
+ color: rgba(79, 70, 229, 0.75);
372
+ text-transform: uppercase;
373
+ letter-spacing: 0.04em;
374
+ margin-top: 2px;
375
+ }
376
+
377
+ :global(.board-empty-state) {
378
+ flex: 1;
379
+ display: flex;
380
+ align-items: center;
381
+ justify-content: center;
382
+ font-size: 0.8rem;
383
+ font-weight: 600;
384
+ color: var(--text-muted);
385
+ text-align: center;
386
+ padding: 2rem;
387
+ }
388
+
389
+ .scheme-info {
390
+ font-size: 0.68rem;
391
+ font-weight: 700;
392
+ color: var(--text-muted);
393
+ margin-top: 0.6rem;
394
+ text-align: right;
395
+ }
396
+
397
+ .merch-section {
398
+ min-width: 0;
399
+ }
400
+
401
+ .merch-header {
402
+ display: flex;
403
+ align-items: center;
404
+ justify-content: space-between;
405
+ margin-bottom: 1rem;
406
+ padding-bottom: 0.5rem;
407
+ border-bottom: 2px solid var(--border-color);
408
+ }
409
+
410
+ .merch-title {
411
+ font-size: 0.7rem;
412
+ font-weight: 900;
413
+ text-transform: uppercase;
414
+ letter-spacing: 0.18rem;
415
+ color: var(--f-p);
416
+ margin: 0;
417
+ }
418
+
419
+ .copy-list-btn {
420
+ font-size: 0.7rem;
421
+ font-weight: 800;
422
+ color: var(--f-p);
423
+ background: rgba(79, 70, 229, 0.08);
424
+ border: 1px solid rgba(79, 70, 229, 0.2);
425
+ border-radius: 8px;
426
+ padding: 0.35rem 0.85rem;
427
+ cursor: pointer;
428
+ transition: all 0.2s;
429
+ }
430
+
431
+ .copy-list-btn:hover {
432
+ background: rgba(79, 70, 229, 0.15);
433
+ }
434
+
435
+ .merceria-checklist {
436
+ list-style: none;
437
+ margin: 0;
438
+ padding: 0;
439
+ display: flex;
440
+ flex-direction: column;
441
+ gap: 0.6rem;
442
+ }
443
+
444
+ :global(.merch-item) {
445
+ display: flex;
446
+ align-items: center;
447
+ gap: 0.6rem;
448
+ font-size: 0.875rem;
449
+ font-weight: 600;
450
+ color: var(--text-main);
451
+ }
452
+
453
+ :global(.merch-dot) {
454
+ color: var(--f-p);
455
+ font-size: 0.5rem;
456
+ flex-shrink: 0;
457
+ opacity: 0.65;
458
+ }
459
+
460
+ .warning-banner {
461
+ display: none;
462
+ background: #fff7ed;
463
+ color: #c2410c;
464
+ border: 1.5px solid #fed7aa;
465
+ padding: 1rem 1.25rem;
466
+ border-radius: 16px;
467
+ font-size: 0.85rem;
468
+ font-weight: 600;
469
+ }
470
+
471
+ @media (max-width: 1100px) {
472
+ .fabric-calculator-card {
473
+ grid-template-columns: 1fr;
474
+ width: 100%;
475
+ border-radius: 1rem;
476
+ margin: 0;
477
+ }
478
+
479
+ .fabric-sidebar {
480
+ border-right: none;
481
+ border-bottom: 1px solid var(--border-color);
482
+ padding: 1.75rem 1.5rem;
483
+ }
484
+
485
+ .btn-actions {
486
+ margin-top: 1rem;
487
+ }
488
+
489
+ .fabric-main {
490
+ padding: 2rem 1.5rem;
491
+ gap: 2rem;
492
+ }
493
+
494
+ .magic-result-area .val {
495
+ font-size: 4.5rem;
496
+ letter-spacing: -3px;
497
+ }
498
+ }
499
+
500
+ @media (max-width: 600px) {
501
+ .fabric-sidebar {
502
+ padding: 1.25rem;
503
+ }
504
+
505
+ .fabric-main {
506
+ padding: 1.25rem;
507
+ gap: 1.5rem;
508
+ }
509
+
510
+ .magic-result-area {
511
+ padding: 1.5rem 1.25rem;
512
+ border-radius: 1rem;
513
+ }
514
+
515
+ .magic-result-area .val {
516
+ font-size: 3rem;
517
+ letter-spacing: -2px;
518
+ }
519
+
520
+ .magic-result-area .unit {
521
+ font-size: 1.2rem;
522
+ }
523
+
524
+ .advice-tag {
525
+ font-size: 0.875rem;
526
+ padding: 0.7rem 1.25rem;
527
+ }
528
+
529
+ .canvas-wrapper {
530
+ padding: 14px 14px 10px 8px;
531
+ border-radius: 16px;
532
+ }
533
+
534
+ .fabric-board {
535
+ height: 220px;
536
+ padding-bottom: 20px;
537
+ }
538
+ }
@@ -1,35 +1,5 @@
1
- import type { TextilesToolEntry, ToolLocaleContent, ToolDefinition } 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
- };
31
-
32
-
1
+ import { fabricProjectCalculator } from './entry';
2
+ export * from './entry';
33
3
  export const FABRIC_PROJECT_CALCULATOR_TOOL: ToolDefinition = {
34
4
  entry: fabricProjectCalculator,
35
5
  Component: () => import('./component.astro'),