@jjlmoya/utils-diy 1.9.0 → 1.10.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 (28) hide show
  1. package/package.json +5 -3
  2. package/scripts/postinstall.mjs +27 -0
  3. package/src/tool/balusterCalculator/baluster-calculator.css +320 -0
  4. package/src/tool/balusterCalculator/component.astro +0 -322
  5. package/src/tool/clayCalculator/clay-shrinkage-calculator.css +530 -0
  6. package/src/tool/clayCalculator/component.astro +0 -532
  7. package/src/tool/concreteCalculator/component.astro +0 -705
  8. package/src/tool/concreteCalculator/concrete-mortar-calculator.css +703 -0
  9. package/src/tool/cutOptimizer/component.astro +0 -477
  10. package/src/tool/cutOptimizer/cut-optimizer.css +475 -0
  11. package/src/tool/drillCalculator/component.astro +0 -815
  12. package/src/tool/drillCalculator/drill-rpm-calculator.css +813 -0
  13. package/src/tool/drillSharpener/component.astro +0 -393
  14. package/src/tool/drillSharpener/drill-sharpening-master.css +391 -0
  15. package/src/tool/epoxyCalculator/component.astro +0 -571
  16. package/src/tool/epoxyCalculator/epoxy-resin-calculator.css +569 -0
  17. package/src/tool/furnitureFit/component.astro +0 -345
  18. package/src/tool/furnitureFit/furniture-fit-calculator.css +343 -0
  19. package/src/tool/mortarCalculator/component.astro +0 -620
  20. package/src/tool/mortarCalculator/lime-mortar-calculator.css +618 -0
  21. package/src/tool/passepartoutCalculator/component.astro +0 -518
  22. package/src/tool/passepartoutCalculator/passepartout-calculator.css +516 -0
  23. package/src/tool/stairCalculator/component.astro +0 -480
  24. package/src/tool/stairCalculator/stair-calculator.css +478 -0
  25. package/src/tool/thermalExpansionCalculator/component.astro +0 -490
  26. package/src/tool/thermalExpansionCalculator/thermal-expansion-calculator.css +488 -0
  27. package/src/tool/voltageDropCalculator/component.astro +0 -729
  28. package/src/tool/voltageDropCalculator/voltage-drop-calculator.css +727 -0
@@ -205,348 +205,3 @@ const t = (ui ?? {}) as FurnitureFitUI;
205
205
  document.querySelectorAll('[data-ff-root]').forEach(ffInit);
206
206
  </script>
207
207
 
208
- <style>
209
- .ff-root {
210
- max-width: 1000px;
211
- margin: 0 auto;
212
- }
213
-
214
- .ff-grid {
215
- display: grid;
216
- grid-template-columns: 1fr 1fr;
217
- gap: 3rem;
218
- align-items: start;
219
- }
220
-
221
- .ff-col-left {
222
- display: flex;
223
- flex-direction: column;
224
- gap: 2rem;
225
- }
226
-
227
- .ff-col-right {
228
- display: flex;
229
- flex-direction: column;
230
- gap: 2rem;
231
- }
232
-
233
- .ff-card {
234
- background: #fff;
235
- border-radius: 1.5rem;
236
- padding: 2rem;
237
- box-shadow: 0 8px 24px rgba(0, 0, 0, 0.06);
238
- border: 1px solid #f1f5f9;
239
- }
240
-
241
- :global(.theme-dark) .ff-card {
242
- background: #0f172a;
243
- border-color: #1e293b;
244
- }
245
-
246
- .ff-card-title {
247
- font-size: 1.125rem;
248
- font-weight: 700;
249
- color: #1e293b;
250
- display: flex;
251
- align-items: center;
252
- gap: 0.5rem;
253
- margin: 0 0 1.5rem;
254
- }
255
-
256
- :global(.theme-dark) .ff-card-title {
257
- color: #fff;
258
- }
259
-
260
- .ff-card-title svg {
261
- width: 1.5rem;
262
- height: 1.5rem;
263
- }
264
-
265
- .ff-card-title svg:first-child {
266
- color: #6366f1;
267
- }
268
-
269
- .ff-inputs-grid {
270
- display: grid;
271
- grid-template-columns: repeat(3, 1fr);
272
- gap: 1rem;
273
- margin-bottom: 1rem;
274
- }
275
-
276
- .ff-input-group {
277
- display: flex;
278
- flex-direction: column;
279
- gap: 0.5rem;
280
- }
281
-
282
- .ff-label {
283
- font-size: 0.625rem;
284
- font-weight: 700;
285
- text-transform: uppercase;
286
- letter-spacing: 0.05em;
287
- color: #94a3b8;
288
- }
289
-
290
- .ff-input {
291
- width: 100%;
292
- background: #f8fafc;
293
- border: none;
294
- border-radius: 0.75rem;
295
- padding: 0.75rem 1rem;
296
- font-size: 1rem;
297
- font-weight: 700;
298
- color: #1e293b;
299
- outline: none;
300
- transition: box-shadow 0.15s ease;
301
- box-sizing: border-box;
302
- }
303
-
304
- .ff-input:focus {
305
- box-shadow: 0 0 0 2px #6366f1;
306
- }
307
-
308
- :global(.theme-dark) .ff-input {
309
- background: #1e293b;
310
- color: #fff;
311
- }
312
-
313
- .ff-input::-webkit-outer-spin-button,
314
- .ff-input::-webkit-inner-spin-button {
315
- appearance: none;
316
- }
317
-
318
- .ff-input[type="number"] {
319
- appearance: textfield;
320
- }
321
-
322
- .ff-hint {
323
- font-size: 0.625rem;
324
- color: #94a3b8;
325
- font-style: italic;
326
- margin: 0;
327
- }
328
-
329
- .ff-margin-row {
330
- display: flex;
331
- align-items: center;
332
- gap: 1rem;
333
- padding-top: 1rem;
334
- border-top: 1px solid #f1f5f9;
335
- margin-top: 0.5rem;
336
- }
337
-
338
- :global(.theme-dark) .ff-margin-row {
339
- border-color: #1e293b;
340
- }
341
-
342
- .ff-margin-left {
343
- flex: 1;
344
- display: flex;
345
- flex-direction: column;
346
- gap: 0.5rem;
347
- }
348
-
349
- .ff-slider {
350
- width: 100%;
351
- accent-color: #6366f1;
352
- cursor: pointer;
353
- }
354
-
355
- .ff-margin-display {
356
- font-size: 0.75rem;
357
- font-weight: 700;
358
- color: #64748b;
359
- min-width: 2.5rem;
360
- text-align: right;
361
- }
362
-
363
- .ff-visual-container {
364
- aspect-ratio: 1;
365
- background: #f8fafc;
366
- border-radius: 2.5rem;
367
- border: 1px solid #e2e8f0;
368
- position: relative;
369
- overflow: hidden;
370
- }
371
-
372
- :global(.theme-dark) .ff-visual-container {
373
- background: #020617;
374
- border-color: #1e293b;
375
- }
376
-
377
- .ff-perspective {
378
- position: absolute;
379
- inset: 0;
380
- display: flex;
381
- align-items: center;
382
- justify-content: center;
383
- padding: 3rem;
384
- perspective: 1000px;
385
- }
386
-
387
- .ff-visual {
388
- position: relative;
389
- width: 100%;
390
- height: 100%;
391
- transform-style: preserve-3d;
392
- transform: rotateX(12deg) rotateY(-12deg);
393
- transition: transform 0.3s ease;
394
- display: flex;
395
- align-items: center;
396
- justify-content: center;
397
- }
398
-
399
- .ff-space-box {
400
- position: absolute;
401
- top: 50%;
402
- left: 50%;
403
- transform: translateX(-50%) translateY(-50%);
404
- border: 2px dashed #cbd5e1;
405
- background: rgba(255, 255, 255, 0.05);
406
- border-radius: 0.5rem;
407
- transition:
408
- width 0.5s ease,
409
- height 0.5s ease;
410
- width: 200px;
411
- height: 200px;
412
- }
413
-
414
- :global(.theme-dark) .ff-space-box {
415
- border-color: #334155;
416
- }
417
-
418
- .ff-obj-box {
419
- position: absolute;
420
- top: 50%;
421
- left: 50%;
422
- transform: translateX(-50%) translateY(-50%);
423
- background: rgba(99, 102, 241, 0.5);
424
- border: 1px solid rgba(99, 102, 241, 0.8);
425
- border-radius: 0.5rem;
426
- display: flex;
427
- align-items: center;
428
- justify-content: center;
429
- font-size: 0.5625rem;
430
- font-weight: 900;
431
- color: rgba(255, 255, 255, 0.4);
432
- text-transform: uppercase;
433
- letter-spacing: 0.1em;
434
- overflow: hidden;
435
- transition:
436
- width 0.5s ease,
437
- height 0.5s ease,
438
- background 0.5s ease,
439
- border-color 0.5s ease;
440
- width: 160px;
441
- height: 80px;
442
- }
443
-
444
- .ff-viz-label {
445
- position: absolute;
446
- bottom: 1.5rem;
447
- left: 1.5rem;
448
- display: flex;
449
- align-items: center;
450
- gap: 0.5rem;
451
- font-size: 0.5625rem;
452
- font-weight: 900;
453
- text-transform: uppercase;
454
- letter-spacing: 0.1em;
455
- color: #94a3b8;
456
- }
457
-
458
- .ff-viz-label svg {
459
- width: 1.25rem;
460
- height: 1.25rem;
461
- }
462
-
463
- .ff-verdict {
464
- background: #f1f5f9;
465
- border-left: 8px solid #94a3b8;
466
- border-radius: 1.5rem;
467
- padding: 2rem;
468
- color: #1e293b;
469
- transition: all 0.5s ease;
470
- overflow: hidden;
471
- position: relative;
472
- box-shadow: 0 8px 24px rgba(0, 0, 0, 0.06);
473
- }
474
-
475
- :global(.theme-dark) .ff-verdict {
476
- background: #1e293b;
477
- border-color: #475569;
478
- color: #fff;
479
- }
480
-
481
- .ff-verdict[data-ff-fits="yes"] {
482
- background: #10b981;
483
- border-color: #059669;
484
- color: #fff;
485
- box-shadow: 0 8px 32px rgba(16, 185, 129, 0.3);
486
- }
487
-
488
- .ff-verdict[data-ff-fits="no"] {
489
- background: #f43f5e;
490
- border-color: #e11d48;
491
- color: #fff;
492
- box-shadow: 0 8px 32px rgba(244, 63, 94, 0.3);
493
- }
494
-
495
- .ff-verdict-inner {
496
- display: flex;
497
- align-items: flex-start;
498
- gap: 1rem;
499
- }
500
-
501
- .ff-verdict-icon-wrap {
502
- padding: 1rem;
503
- border-radius: 1rem;
504
- background: rgba(255, 255, 255, 0.2);
505
- flex-shrink: 0;
506
- }
507
-
508
- .ff-verdict-icon-wrap svg {
509
- width: 2.5rem;
510
- height: 2.5rem;
511
- }
512
-
513
- .ff-verdict-title {
514
- font-size: 1.5rem;
515
- font-weight: 900;
516
- margin: 0 0 0.25rem;
517
- line-height: 1.2;
518
- }
519
-
520
- .ff-verdict-reason {
521
- font-size: 0.875rem;
522
- opacity: 0.9;
523
- line-height: 1.5;
524
- margin: 0;
525
- }
526
-
527
- .ff-diag-info {
528
- display: flex;
529
- justify-content: space-between;
530
- align-items: center;
531
- font-size: 0.75rem;
532
- opacity: 0.7;
533
- margin-top: 1.5rem;
534
- padding-top: 1.5rem;
535
- border-top: 1px solid rgba(255, 255, 255, 0.15);
536
- }
537
-
538
- .ff-diag-val {
539
- font-weight: 700;
540
- }
541
-
542
- .ff-hidden {
543
- display: none;
544
- }
545
-
546
- @media (max-width: 768px) {
547
- .ff-grid {
548
- grid-template-columns: 1fr;
549
- gap: 2rem;
550
- }
551
- }
552
- </style>
@@ -0,0 +1,343 @@
1
+ .ff-root {
2
+ max-width: 1000px;
3
+ margin: 0 auto;
4
+ }
5
+
6
+ .ff-grid {
7
+ display: grid;
8
+ grid-template-columns: 1fr 1fr;
9
+ gap: 3rem;
10
+ align-items: start;
11
+ }
12
+
13
+ .ff-col-left {
14
+ display: flex;
15
+ flex-direction: column;
16
+ gap: 2rem;
17
+ }
18
+
19
+ .ff-col-right {
20
+ display: flex;
21
+ flex-direction: column;
22
+ gap: 2rem;
23
+ }
24
+
25
+ .ff-card {
26
+ background: #fff;
27
+ border-radius: 1.5rem;
28
+ padding: 2rem;
29
+ box-shadow: 0 8px 24px rgba(0, 0, 0, 0.06);
30
+ border: 1px solid #f1f5f9;
31
+ }
32
+
33
+ :global(.theme-dark) .ff-card {
34
+ background: #0f172a;
35
+ border-color: #1e293b;
36
+ }
37
+
38
+ .ff-card-title {
39
+ font-size: 1.125rem;
40
+ font-weight: 700;
41
+ color: #1e293b;
42
+ display: flex;
43
+ align-items: center;
44
+ gap: 0.5rem;
45
+ margin: 0 0 1.5rem;
46
+ }
47
+
48
+ :global(.theme-dark) .ff-card-title {
49
+ color: #fff;
50
+ }
51
+
52
+ .ff-card-title svg {
53
+ width: 1.5rem;
54
+ height: 1.5rem;
55
+ }
56
+
57
+ .ff-card-title svg:first-child {
58
+ color: #6366f1;
59
+ }
60
+
61
+ .ff-inputs-grid {
62
+ display: grid;
63
+ grid-template-columns: repeat(3, 1fr);
64
+ gap: 1rem;
65
+ margin-bottom: 1rem;
66
+ }
67
+
68
+ .ff-input-group {
69
+ display: flex;
70
+ flex-direction: column;
71
+ gap: 0.5rem;
72
+ }
73
+
74
+ .ff-label {
75
+ font-size: 0.625rem;
76
+ font-weight: 700;
77
+ text-transform: uppercase;
78
+ letter-spacing: 0.05em;
79
+ color: #94a3b8;
80
+ }
81
+
82
+ .ff-input {
83
+ width: 100%;
84
+ background: #f8fafc;
85
+ border: none;
86
+ border-radius: 0.75rem;
87
+ padding: 0.75rem 1rem;
88
+ font-size: 1rem;
89
+ font-weight: 700;
90
+ color: #1e293b;
91
+ outline: none;
92
+ transition: box-shadow 0.15s ease;
93
+ box-sizing: border-box;
94
+ }
95
+
96
+ .ff-input:focus {
97
+ box-shadow: 0 0 0 2px #6366f1;
98
+ }
99
+
100
+ :global(.theme-dark) .ff-input {
101
+ background: #1e293b;
102
+ color: #fff;
103
+ }
104
+
105
+ .ff-input::-webkit-outer-spin-button,
106
+ .ff-input::-webkit-inner-spin-button {
107
+ appearance: none;
108
+ }
109
+
110
+ .ff-input[type="number"] {
111
+ appearance: textfield;
112
+ }
113
+
114
+ .ff-hint {
115
+ font-size: 0.625rem;
116
+ color: #94a3b8;
117
+ font-style: italic;
118
+ margin: 0;
119
+ }
120
+
121
+ .ff-margin-row {
122
+ display: flex;
123
+ align-items: center;
124
+ gap: 1rem;
125
+ padding-top: 1rem;
126
+ border-top: 1px solid #f1f5f9;
127
+ margin-top: 0.5rem;
128
+ }
129
+
130
+ :global(.theme-dark) .ff-margin-row {
131
+ border-color: #1e293b;
132
+ }
133
+
134
+ .ff-margin-left {
135
+ flex: 1;
136
+ display: flex;
137
+ flex-direction: column;
138
+ gap: 0.5rem;
139
+ }
140
+
141
+ .ff-slider {
142
+ width: 100%;
143
+ accent-color: #6366f1;
144
+ cursor: pointer;
145
+ }
146
+
147
+ .ff-margin-display {
148
+ font-size: 0.75rem;
149
+ font-weight: 700;
150
+ color: #64748b;
151
+ min-width: 2.5rem;
152
+ text-align: right;
153
+ }
154
+
155
+ .ff-visual-container {
156
+ aspect-ratio: 1;
157
+ background: #f8fafc;
158
+ border-radius: 2.5rem;
159
+ border: 1px solid #e2e8f0;
160
+ position: relative;
161
+ overflow: hidden;
162
+ }
163
+
164
+ :global(.theme-dark) .ff-visual-container {
165
+ background: #020617;
166
+ border-color: #1e293b;
167
+ }
168
+
169
+ .ff-perspective {
170
+ position: absolute;
171
+ inset: 0;
172
+ display: flex;
173
+ align-items: center;
174
+ justify-content: center;
175
+ padding: 3rem;
176
+ perspective: 1000px;
177
+ }
178
+
179
+ .ff-visual {
180
+ position: relative;
181
+ width: 100%;
182
+ height: 100%;
183
+ transform-style: preserve-3d;
184
+ transform: rotateX(12deg) rotateY(-12deg);
185
+ transition: transform 0.3s ease;
186
+ display: flex;
187
+ align-items: center;
188
+ justify-content: center;
189
+ }
190
+
191
+ .ff-space-box {
192
+ position: absolute;
193
+ top: 50%;
194
+ left: 50%;
195
+ transform: translateX(-50%) translateY(-50%);
196
+ border: 2px dashed #cbd5e1;
197
+ background: rgba(255, 255, 255, 0.05);
198
+ border-radius: 0.5rem;
199
+ transition:
200
+ width 0.5s ease,
201
+ height 0.5s ease;
202
+ width: 200px;
203
+ height: 200px;
204
+ }
205
+
206
+ :global(.theme-dark) .ff-space-box {
207
+ border-color: #334155;
208
+ }
209
+
210
+ .ff-obj-box {
211
+ position: absolute;
212
+ top: 50%;
213
+ left: 50%;
214
+ transform: translateX(-50%) translateY(-50%);
215
+ background: rgba(99, 102, 241, 0.5);
216
+ border: 1px solid rgba(99, 102, 241, 0.8);
217
+ border-radius: 0.5rem;
218
+ display: flex;
219
+ align-items: center;
220
+ justify-content: center;
221
+ font-size: 0.5625rem;
222
+ font-weight: 900;
223
+ color: rgba(255, 255, 255, 0.4);
224
+ text-transform: uppercase;
225
+ letter-spacing: 0.1em;
226
+ overflow: hidden;
227
+ transition:
228
+ width 0.5s ease,
229
+ height 0.5s ease,
230
+ background 0.5s ease,
231
+ border-color 0.5s ease;
232
+ width: 160px;
233
+ height: 80px;
234
+ }
235
+
236
+ .ff-viz-label {
237
+ position: absolute;
238
+ bottom: 1.5rem;
239
+ left: 1.5rem;
240
+ display: flex;
241
+ align-items: center;
242
+ gap: 0.5rem;
243
+ font-size: 0.5625rem;
244
+ font-weight: 900;
245
+ text-transform: uppercase;
246
+ letter-spacing: 0.1em;
247
+ color: #94a3b8;
248
+ }
249
+
250
+ .ff-viz-label svg {
251
+ width: 1.25rem;
252
+ height: 1.25rem;
253
+ }
254
+
255
+ .ff-verdict {
256
+ background: #f1f5f9;
257
+ border-left: 8px solid #94a3b8;
258
+ border-radius: 1.5rem;
259
+ padding: 2rem;
260
+ color: #1e293b;
261
+ transition: all 0.5s ease;
262
+ overflow: hidden;
263
+ position: relative;
264
+ box-shadow: 0 8px 24px rgba(0, 0, 0, 0.06);
265
+ }
266
+
267
+ :global(.theme-dark) .ff-verdict {
268
+ background: #1e293b;
269
+ border-color: #475569;
270
+ color: #fff;
271
+ }
272
+
273
+ .ff-verdict[data-ff-fits="yes"] {
274
+ background: #10b981;
275
+ border-color: #059669;
276
+ color: #fff;
277
+ box-shadow: 0 8px 32px rgba(16, 185, 129, 0.3);
278
+ }
279
+
280
+ .ff-verdict[data-ff-fits="no"] {
281
+ background: #f43f5e;
282
+ border-color: #e11d48;
283
+ color: #fff;
284
+ box-shadow: 0 8px 32px rgba(244, 63, 94, 0.3);
285
+ }
286
+
287
+ .ff-verdict-inner {
288
+ display: flex;
289
+ align-items: flex-start;
290
+ gap: 1rem;
291
+ }
292
+
293
+ .ff-verdict-icon-wrap {
294
+ padding: 1rem;
295
+ border-radius: 1rem;
296
+ background: rgba(255, 255, 255, 0.2);
297
+ flex-shrink: 0;
298
+ }
299
+
300
+ .ff-verdict-icon-wrap svg {
301
+ width: 2.5rem;
302
+ height: 2.5rem;
303
+ }
304
+
305
+ .ff-verdict-title {
306
+ font-size: 1.5rem;
307
+ font-weight: 900;
308
+ margin: 0 0 0.25rem;
309
+ line-height: 1.2;
310
+ }
311
+
312
+ .ff-verdict-reason {
313
+ font-size: 0.875rem;
314
+ opacity: 0.9;
315
+ line-height: 1.5;
316
+ margin: 0;
317
+ }
318
+
319
+ .ff-diag-info {
320
+ display: flex;
321
+ justify-content: space-between;
322
+ align-items: center;
323
+ font-size: 0.75rem;
324
+ opacity: 0.7;
325
+ margin-top: 1.5rem;
326
+ padding-top: 1.5rem;
327
+ border-top: 1px solid rgba(255, 255, 255, 0.15);
328
+ }
329
+
330
+ .ff-diag-val {
331
+ font-weight: 700;
332
+ }
333
+
334
+ .ff-hidden {
335
+ display: none;
336
+ }
337
+
338
+ @media (max-width: 768px) {
339
+ .ff-grid {
340
+ grid-template-columns: 1fr;
341
+ gap: 2rem;
342
+ }
343
+ }