@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,426 @@
1
+ .fabric-truth-container {
2
+ width: 100%;
3
+ padding: 1rem;
4
+ }
5
+
6
+ .card-wrapper {
7
+ background: var(--bg-surface);
8
+ border: 1px solid var(--border-color);
9
+ border-radius: 1.5rem;
10
+ overflow: hidden;
11
+ box-shadow: 0 10px 25px rgba(0, 0, 0, 0.1);
12
+ }
13
+
14
+ .composition-section {
15
+ padding: 2rem;
16
+ border-bottom: 1px solid var(--border-color);
17
+ }
18
+
19
+ .section-title {
20
+ font-size: 1.5rem;
21
+ font-weight: bold;
22
+ margin: 0 0 0.5rem;
23
+ display: flex;
24
+ align-items: center;
25
+ gap: 0.5rem;
26
+ color: var(--text-main);
27
+ }
28
+
29
+ .title-icon {
30
+ width: 1.5rem;
31
+ height: 1.5rem;
32
+ color: #6366f1;
33
+ }
34
+
35
+ .section-description {
36
+ color: var(--text-muted);
37
+ margin: 0 0 1.5rem;
38
+ font-size: 0.95rem;
39
+ }
40
+
41
+ .rows-container {
42
+ display: flex;
43
+ flex-direction: column;
44
+ gap: 1rem;
45
+ margin-bottom: 1.5rem;
46
+ }
47
+
48
+ .fiber-row {
49
+ display: flex;
50
+ gap: 0.75rem;
51
+ align-items: center;
52
+ animation: slide-in 0.3s ease;
53
+ }
54
+
55
+ @keyframes slide-in {
56
+ from {
57
+ opacity: 0;
58
+ transform: translateX(-10px);
59
+ }
60
+ to {
61
+ opacity: 1;
62
+ transform: translateX(0);
63
+ }
64
+ }
65
+
66
+ .fiber-select {
67
+ flex: 1;
68
+ min-width: 150px;
69
+ background: var(--bg-page);
70
+ border: 1px solid var(--border-color);
71
+ border-radius: 0.75rem;
72
+ padding: 0.75rem;
73
+ color: var(--text-main);
74
+ font-weight: 500;
75
+ cursor: pointer;
76
+ }
77
+
78
+ .fiber-select:focus {
79
+ outline: none;
80
+ border-color: #6366f1;
81
+ box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.1);
82
+ }
83
+
84
+ .fiber-perc-wrapper {
85
+ position: relative;
86
+ width: 120px;
87
+ }
88
+
89
+ .fiber-perc {
90
+ width: 100%;
91
+ background: var(--bg-page);
92
+ border: 1px solid var(--border-color);
93
+ border-radius: 0.75rem;
94
+ padding: 0.75rem 2.5rem 0.75rem 0.75rem;
95
+ color: var(--text-main);
96
+ font-weight: 500;
97
+ }
98
+
99
+ .fiber-perc:focus {
100
+ outline: none;
101
+ border-color: #6366f1;
102
+ box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.1);
103
+ }
104
+
105
+ .perc-symbol {
106
+ position: absolute;
107
+ right: 0.75rem;
108
+ top: 50%;
109
+ transform: translateY(-50%);
110
+ color: var(--text-muted);
111
+ font-weight: bold;
112
+ pointer-events: none;
113
+ }
114
+
115
+ .remove-row-btn {
116
+ background: none;
117
+ border: none;
118
+ color: var(--text-muted);
119
+ cursor: pointer;
120
+ padding: 0.5rem;
121
+ display: flex;
122
+ align-items: center;
123
+ transition: color 0.2s;
124
+ }
125
+
126
+ .remove-row-btn:hover {
127
+ color: #ef4444;
128
+ }
129
+
130
+ .controls-footer {
131
+ display: flex;
132
+ justify-content: space-between;
133
+ align-items: center;
134
+ padding-top: 1rem;
135
+ border-top: 1px solid var(--border-color);
136
+ gap: 1rem;
137
+ flex-wrap: wrap;
138
+ }
139
+
140
+ .btn-add {
141
+ display: flex;
142
+ align-items: center;
143
+ gap: 0.5rem;
144
+ padding: 0.75rem 1.5rem;
145
+ background: var(--bg-page);
146
+ border: 1px solid var(--border-color);
147
+ border-radius: 0.75rem;
148
+ color: var(--text-main);
149
+ font-weight: 500;
150
+ cursor: pointer;
151
+ transition: all 0.2s;
152
+ }
153
+
154
+ .btn-add:hover {
155
+ background: var(--bg-surface);
156
+ border-color: #6366f1;
157
+ }
158
+
159
+ .btn-icon {
160
+ width: 1.25rem;
161
+ height: 1.25rem;
162
+ }
163
+
164
+ .total-badge {
165
+ padding: 0.75rem 1.5rem;
166
+ border-radius: 0.75rem;
167
+ font-weight: 600;
168
+ background: var(--bg-page);
169
+ color: var(--text-muted);
170
+ border: 1px solid var(--border-color);
171
+ transition: all 0.2s;
172
+ }
173
+
174
+ :global(.total-badge.total-complete) {
175
+ background: rgba(16, 185, 129, 0.1);
176
+ color: #10b981;
177
+ border-color: #10b981;
178
+ }
179
+
180
+ :global(.total-badge.total-error) {
181
+ background: rgba(239, 68, 68, 0.1);
182
+ color: #ef4444;
183
+ border-color: #ef4444;
184
+ animation: pulse 0.5s;
185
+ }
186
+
187
+ @keyframes pulse {
188
+ 0%, 100% { opacity: 1; }
189
+ 50% { opacity: 0.7; }
190
+ }
191
+
192
+ .results-section {
193
+ padding: 2rem;
194
+ background: var(--bg-page);
195
+ }
196
+
197
+ .empty-state {
198
+ text-align: center;
199
+ padding: 2rem;
200
+ }
201
+
202
+ .empty-icon {
203
+ width: 4rem;
204
+ height: 4rem;
205
+ margin: 0 auto 1rem;
206
+ color: var(--border-color);
207
+ }
208
+
209
+ .empty-state p {
210
+ margin: 0.5rem 0;
211
+ color: var(--text-muted);
212
+ font-size: 0.95rem;
213
+ }
214
+
215
+ .empty-helper {
216
+ font-size: 0.85rem;
217
+ font-style: italic;
218
+ color: var(--text-muted);
219
+ margin-top: 0.25rem;
220
+ }
221
+
222
+ .result-content {
223
+ display: flex;
224
+ flex-direction: column;
225
+ gap: 1.5rem;
226
+ animation: fade-in 0.5s ease;
227
+ }
228
+
229
+ :global(.result-content.hidden) {
230
+ display: none;
231
+ }
232
+
233
+ :global(.empty-state.hidden) {
234
+ display: none;
235
+ }
236
+
237
+ @keyframes fade-in {
238
+ from { opacity: 0; }
239
+ to { opacity: 1; }
240
+ }
241
+
242
+ .verdict-card {
243
+ padding: 1.5rem;
244
+ border-radius: 1rem;
245
+ border-left: 4px solid;
246
+ display: flex;
247
+ justify-content: space-between;
248
+ align-items: center;
249
+ transition: all 0.3s;
250
+ min-height: 100px;
251
+ }
252
+
253
+ :global(.verdict-card.color-red) {
254
+ background: rgba(239, 68, 68, 0.1);
255
+ color: #ef4444;
256
+ border-left-color: #dc2626;
257
+ }
258
+
259
+ :global(.verdict-card.color-amber) {
260
+ background: rgba(251, 146, 60, 0.1);
261
+ color: #f97316;
262
+ border-left-color: #ea580c;
263
+ }
264
+
265
+ :global(.verdict-card.color-yellow) {
266
+ background: rgba(234, 179, 8, 0.1);
267
+ color: #ca8a04;
268
+ border-left-color: #b45309;
269
+ }
270
+
271
+ :global(.verdict-card.color-emerald) {
272
+ background: rgba(16, 185, 129, 0.1);
273
+ color: #059669;
274
+ border-left-color: #047857;
275
+ }
276
+
277
+ :global(.verdict-card.color-blue) {
278
+ background: rgba(59, 130, 246, 0.1);
279
+ color: #2563eb;
280
+ border-left-color: #1d4ed8;
281
+ }
282
+
283
+ :global(.verdict-card.color-indigo) {
284
+ background: rgba(99, 102, 241, 0.1);
285
+ color: #4f46e5;
286
+ border-left-color: #4338ca;
287
+ }
288
+
289
+ :global(.verdict-card.color-gray) {
290
+ background: rgba(107, 114, 128, 0.1);
291
+ color: #6b7280;
292
+ border-left-color: #4b5563;
293
+ }
294
+
295
+ .verdict-content {
296
+ flex: 1;
297
+ }
298
+
299
+ .verdict-meta {
300
+ font-size: 0.75rem;
301
+ font-weight: 700;
302
+ text-transform: uppercase;
303
+ letter-spacing: 0.05em;
304
+ opacity: 0.7;
305
+ }
306
+
307
+ .verdict-label {
308
+ font-size: 1.75rem;
309
+ font-weight: 900;
310
+ margin: 0.5rem 0;
311
+ }
312
+
313
+ .verdict-desc {
314
+ font-size: 1rem;
315
+ margin: 0;
316
+ opacity: 0.9;
317
+ }
318
+
319
+ .verdict-icon {
320
+ width: 3rem;
321
+ height: 3rem;
322
+ display: flex;
323
+ align-items: center;
324
+ justify-content: center;
325
+ background: rgba(255, 255, 255, 0.2);
326
+ border-radius: 50%;
327
+ }
328
+
329
+ .stats-grid {
330
+ display: grid;
331
+ grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
332
+ gap: 1rem;
333
+ }
334
+
335
+ .stat-card {
336
+ background: var(--bg-surface);
337
+ padding: 1rem;
338
+ border-radius: 0.75rem;
339
+ border: 1px solid var(--border-color);
340
+ }
341
+
342
+ .stat-header {
343
+ display: flex;
344
+ align-items: center;
345
+ gap: 0.5rem;
346
+ margin-bottom: 0.75rem;
347
+ font-size: 0.75rem;
348
+ font-weight: 700;
349
+ text-transform: uppercase;
350
+ letter-spacing: 0.05em;
351
+ color: var(--text-muted);
352
+ }
353
+
354
+ .stat-bar {
355
+ width: 100%;
356
+ height: 6px;
357
+ background: var(--border-color);
358
+ border-radius: 99px;
359
+ overflow: hidden;
360
+ margin-bottom: 0.5rem;
361
+ }
362
+
363
+ .stat-fill {
364
+ height: 100%;
365
+ background: currentcolor;
366
+ transition: width 1s ease;
367
+ width: 0%;
368
+ }
369
+
370
+ .stat-card:nth-child(1) .stat-fill {
371
+ background: #10b981;
372
+ }
373
+
374
+ .stat-card:nth-child(2) .stat-fill {
375
+ background: #3b82f6;
376
+ }
377
+
378
+ .stat-card:nth-child(3) .stat-fill {
379
+ background: #f97316;
380
+ }
381
+
382
+ .stat-value {
383
+ font-size: 0.85rem;
384
+ font-weight: 600;
385
+ text-align: right;
386
+ color: var(--text-muted);
387
+ }
388
+
389
+ .care-warning {
390
+ background: rgba(251, 191, 36, 0.1);
391
+ border: 1px solid rgba(251, 146, 60, 0.3);
392
+ padding: 1rem;
393
+ border-radius: 0.75rem;
394
+ display: flex;
395
+ gap: 0.75rem;
396
+ color: #b45309;
397
+ }
398
+
399
+ .care-warning svg {
400
+ width: 1.5rem;
401
+ height: 1.5rem;
402
+ flex-shrink: 0;
403
+ margin-top: 0.1rem;
404
+ }
405
+
406
+ .care-warning h4 {
407
+ font-weight: 700;
408
+ font-size: 0.85rem;
409
+ margin: 0 0 0.25rem;
410
+ text-transform: uppercase;
411
+ letter-spacing: 0.05em;
412
+ }
413
+
414
+ .care-warning p {
415
+ font-size: 0.9rem;
416
+ margin: 0;
417
+ }
418
+
419
+ .disclaimer {
420
+ text-align: center;
421
+ font-size: 0.75rem;
422
+ text-transform: uppercase;
423
+ letter-spacing: 0.05em;
424
+ color: var(--text-muted);
425
+ margin: 0;
426
+ }
@@ -1,35 +1,5 @@
1
- import type { TextilesToolEntry, ToolLocaleContent, ToolDefinition } from '../../types';
2
-
3
- import type { FabricTruthUI } from './ui';
4
-
5
- export type FabricTruthLocaleContent = ToolLocaleContent<FabricTruthUI>;
6
-
7
- export const fabricTruth: TextilesToolEntry<FabricTruthUI> = {
8
- id: 'fabric-truth',
9
- icons: {
10
- bg: 'mdi:tag-text-outline',
11
- fg: 'mdi:microscope',
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 { fabricTruth } from './entry';
2
+ export * from './entry';
33
3
  export const FABRIC_TRUTH_TOOL: ToolDefinition = {
34
4
  entry: fabricTruth,
35
5
  Component: () => import('./component.astro'),