@jjlmoya/utils-diy 1.28.0 → 1.30.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.
- package/package.json +2 -2
- package/src/category/i18n/de.ts +12 -12
- package/src/category/i18n/en.ts +110 -110
- package/src/category/i18n/es.ts +110 -110
- package/src/category/i18n/fr.ts +101 -101
- package/src/category/i18n/id.ts +12 -12
- package/src/category/i18n/it.ts +12 -12
- package/src/category/i18n/ja.ts +12 -12
- package/src/category/i18n/ko.ts +12 -12
- package/src/category/i18n/nl.ts +12 -12
- package/src/category/i18n/pl.ts +12 -12
- package/src/category/i18n/pt.ts +12 -12
- package/src/category/i18n/ru.ts +12 -12
- package/src/category/i18n/sv.ts +12 -12
- package/src/category/i18n/tr.ts +12 -12
- package/src/category/i18n/zh.ts +12 -12
- package/src/category/index.ts +36 -36
- package/src/category/seo.astro +1 -1
- package/src/components/PreviewNavSidebar.astro +1 -1
- package/src/components/PreviewToolbar.astro +1 -1
- package/src/data.ts +1 -1
- package/src/entries.ts +37 -37
- package/src/env.d.ts +1 -1
- package/src/index.ts +50 -50
- package/src/layouts/PreviewLayout.astro +1 -1
- package/src/pages/index.astro +1 -1
- package/src/tests/category_seo_quality.test.ts +74 -0
- package/src/tests/faq_count.test.ts +1 -1
- package/src/tests/mocks/astro_mock.js +1 -1
- package/src/tests/no_h1_in_components.test.ts +1 -1
- package/src/tests/seo_length.test.ts +1 -1
- package/src/tests/seo_parity.test.ts +2 -2
- package/src/tests/seo_translation_completeness.test.ts +18 -12
- package/src/tests/tool_validation.test.ts +15 -15
- package/src/tool/balusterCalculator/bibliography.ts +16 -16
- package/src/tool/balusterCalculator/i18n/de.ts +251 -251
- package/src/tool/balusterCalculator/i18n/en.ts +251 -251
- package/src/tool/balusterCalculator/i18n/es.ts +251 -251
- package/src/tool/balusterCalculator/i18n/fr.ts +251 -251
- package/src/tool/balusterCalculator/i18n/id.ts +251 -251
- package/src/tool/balusterCalculator/i18n/it.ts +251 -251
- package/src/tool/balusterCalculator/i18n/ja.ts +251 -251
- package/src/tool/balusterCalculator/i18n/ko.ts +251 -251
- package/src/tool/balusterCalculator/i18n/nl.ts +251 -251
- package/src/tool/balusterCalculator/i18n/pl.ts +251 -251
- package/src/tool/balusterCalculator/i18n/pt.ts +251 -251
- package/src/tool/balusterCalculator/i18n/ru.ts +251 -251
- package/src/tool/balusterCalculator/i18n/sv.ts +251 -251
- package/src/tool/balusterCalculator/i18n/tr.ts +251 -251
- package/src/tool/balusterCalculator/i18n/zh.ts +251 -251
- package/src/tool/balusterCalculator/seo.astro +15 -15
- package/src/tool/clayCalculator/bibliography.ts +12 -12
- package/src/tool/clayCalculator/i18n/de.ts +174 -174
- package/src/tool/clayCalculator/i18n/en.ts +174 -174
- package/src/tool/clayCalculator/i18n/es.ts +174 -174
- package/src/tool/clayCalculator/i18n/fr.ts +174 -174
- package/src/tool/clayCalculator/i18n/id.ts +174 -174
- package/src/tool/clayCalculator/i18n/it.ts +174 -174
- package/src/tool/clayCalculator/i18n/ja.ts +173 -173
- package/src/tool/clayCalculator/i18n/ko.ts +174 -174
- package/src/tool/clayCalculator/i18n/nl.ts +174 -174
- package/src/tool/clayCalculator/i18n/pl.ts +174 -174
- package/src/tool/clayCalculator/i18n/pt.ts +174 -174
- package/src/tool/clayCalculator/i18n/ru.ts +174 -174
- package/src/tool/clayCalculator/i18n/sv.ts +174 -174
- package/src/tool/clayCalculator/i18n/tr.ts +174 -174
- package/src/tool/clayCalculator/i18n/zh.ts +174 -174
- package/src/tool/clayCalculator/seo.astro +15 -15
- package/src/tool/concreteCalculator/bibliography.ts +7 -7
- package/src/tool/concreteCalculator/i18n/de.ts +188 -188
- package/src/tool/concreteCalculator/i18n/en.ts +188 -188
- package/src/tool/concreteCalculator/i18n/es.ts +188 -188
- package/src/tool/concreteCalculator/i18n/fr.ts +188 -188
- package/src/tool/concreteCalculator/i18n/id.ts +188 -188
- package/src/tool/concreteCalculator/i18n/it.ts +188 -188
- package/src/tool/concreteCalculator/i18n/ja.ts +188 -188
- package/src/tool/concreteCalculator/i18n/ko.ts +188 -188
- package/src/tool/concreteCalculator/i18n/nl.ts +188 -188
- package/src/tool/concreteCalculator/i18n/pl.ts +188 -188
- package/src/tool/concreteCalculator/i18n/pt.ts +188 -188
- package/src/tool/concreteCalculator/i18n/ru.ts +188 -188
- package/src/tool/concreteCalculator/i18n/sv.ts +188 -188
- package/src/tool/concreteCalculator/i18n/tr.ts +188 -188
- package/src/tool/concreteCalculator/i18n/zh.ts +188 -188
- package/src/tool/concreteCalculator/seo.astro +15 -15
- package/src/tool/cutOptimizer/bibliography.ts +12 -12
- package/src/tool/cutOptimizer/i18n/de.ts +169 -169
- package/src/tool/cutOptimizer/i18n/en.ts +169 -169
- package/src/tool/cutOptimizer/i18n/es.ts +169 -169
- package/src/tool/cutOptimizer/i18n/fr.ts +169 -169
- package/src/tool/cutOptimizer/i18n/id.ts +169 -169
- package/src/tool/cutOptimizer/i18n/it.ts +169 -169
- package/src/tool/cutOptimizer/i18n/ja.ts +169 -169
- package/src/tool/cutOptimizer/i18n/ko.ts +169 -169
- package/src/tool/cutOptimizer/i18n/nl.ts +169 -169
- package/src/tool/cutOptimizer/i18n/pl.ts +169 -169
- package/src/tool/cutOptimizer/i18n/pt.ts +169 -169
- package/src/tool/cutOptimizer/i18n/ru.ts +169 -169
- package/src/tool/cutOptimizer/i18n/sv.ts +169 -169
- package/src/tool/cutOptimizer/i18n/tr.ts +169 -169
- package/src/tool/cutOptimizer/i18n/zh.ts +169 -169
- package/src/tool/cutOptimizer/seo.astro +15 -15
- package/src/tool/drillCalculator/bibliography.ts +12 -12
- package/src/tool/drillCalculator/i18n/de.ts +134 -134
- package/src/tool/drillCalculator/i18n/en.ts +134 -134
- package/src/tool/drillCalculator/i18n/es.ts +134 -134
- package/src/tool/drillCalculator/i18n/fr.ts +134 -134
- package/src/tool/drillCalculator/i18n/id.ts +134 -134
- package/src/tool/drillCalculator/i18n/it.ts +134 -134
- package/src/tool/drillCalculator/i18n/ja.ts +134 -134
- package/src/tool/drillCalculator/i18n/ko.ts +134 -134
- package/src/tool/drillCalculator/i18n/nl.ts +134 -134
- package/src/tool/drillCalculator/i18n/pl.ts +134 -134
- package/src/tool/drillCalculator/i18n/pt.ts +134 -134
- package/src/tool/drillCalculator/i18n/ru.ts +134 -134
- package/src/tool/drillCalculator/i18n/sv.ts +134 -134
- package/src/tool/drillCalculator/i18n/tr.ts +134 -134
- package/src/tool/drillCalculator/i18n/zh.ts +134 -134
- package/src/tool/drillCalculator/seo.astro +15 -15
- package/src/tool/drillSharpener/bibliography.ts +16 -16
- package/src/tool/drillSharpener/i18n/de.ts +117 -117
- package/src/tool/drillSharpener/i18n/en.ts +117 -117
- package/src/tool/drillSharpener/i18n/es.ts +117 -117
- package/src/tool/drillSharpener/i18n/fr.ts +117 -117
- package/src/tool/drillSharpener/i18n/id.ts +117 -117
- package/src/tool/drillSharpener/i18n/it.ts +117 -117
- package/src/tool/drillSharpener/i18n/ja.ts +117 -117
- package/src/tool/drillSharpener/i18n/ko.ts +117 -117
- package/src/tool/drillSharpener/i18n/nl.ts +117 -117
- package/src/tool/drillSharpener/i18n/pl.ts +117 -117
- package/src/tool/drillSharpener/i18n/pt.ts +117 -117
- package/src/tool/drillSharpener/i18n/ru.ts +117 -117
- package/src/tool/drillSharpener/i18n/sv.ts +117 -117
- package/src/tool/drillSharpener/i18n/tr.ts +117 -117
- package/src/tool/drillSharpener/i18n/zh.ts +117 -117
- package/src/tool/drillSharpener/seo.astro +15 -15
- package/src/tool/epoxyCalculator/bibliography.ts +20 -20
- package/src/tool/epoxyCalculator/i18n/de.ts +116 -116
- package/src/tool/epoxyCalculator/i18n/en.ts +178 -178
- package/src/tool/epoxyCalculator/i18n/es.ts +178 -178
- package/src/tool/epoxyCalculator/i18n/fr.ts +178 -178
- package/src/tool/epoxyCalculator/i18n/id.ts +116 -116
- package/src/tool/epoxyCalculator/i18n/it.ts +116 -116
- package/src/tool/epoxyCalculator/i18n/ja.ts +116 -116
- package/src/tool/epoxyCalculator/i18n/ko.ts +116 -116
- package/src/tool/epoxyCalculator/i18n/nl.ts +116 -116
- package/src/tool/epoxyCalculator/i18n/pl.ts +116 -116
- package/src/tool/epoxyCalculator/i18n/pt.ts +116 -116
- package/src/tool/epoxyCalculator/i18n/ru.ts +116 -116
- package/src/tool/epoxyCalculator/i18n/sv.ts +116 -116
- package/src/tool/epoxyCalculator/i18n/tr.ts +116 -116
- package/src/tool/epoxyCalculator/i18n/zh.ts +116 -116
- package/src/tool/epoxyCalculator/seo.astro +15 -15
- package/src/tool/furnitureFit/bibliography.ts +12 -12
- package/src/tool/furnitureFit/i18n/de.ts +111 -111
- package/src/tool/furnitureFit/i18n/en.ts +149 -149
- package/src/tool/furnitureFit/i18n/es.ts +149 -149
- package/src/tool/furnitureFit/i18n/fr.ts +149 -149
- package/src/tool/furnitureFit/i18n/id.ts +111 -111
- package/src/tool/furnitureFit/i18n/it.ts +111 -111
- package/src/tool/furnitureFit/i18n/ja.ts +111 -111
- package/src/tool/furnitureFit/i18n/ko.ts +111 -111
- package/src/tool/furnitureFit/i18n/nl.ts +111 -111
- package/src/tool/furnitureFit/i18n/pl.ts +111 -111
- package/src/tool/furnitureFit/i18n/pt.ts +111 -111
- package/src/tool/furnitureFit/i18n/ru.ts +111 -111
- package/src/tool/furnitureFit/i18n/sv.ts +111 -111
- package/src/tool/furnitureFit/i18n/tr.ts +111 -111
- package/src/tool/furnitureFit/i18n/zh.ts +111 -111
- package/src/tool/furnitureFit/seo.astro +15 -15
- package/src/tool/mortarCalculator/bibliography.ts +20 -20
- package/src/tool/mortarCalculator/i18n/de.ts +130 -130
- package/src/tool/mortarCalculator/i18n/en.ts +202 -202
- package/src/tool/mortarCalculator/i18n/es.ts +179 -179
- package/src/tool/mortarCalculator/i18n/fr.ts +203 -203
- package/src/tool/mortarCalculator/i18n/id.ts +130 -130
- package/src/tool/mortarCalculator/i18n/it.ts +130 -130
- package/src/tool/mortarCalculator/i18n/ja.ts +130 -130
- package/src/tool/mortarCalculator/i18n/ko.ts +130 -130
- package/src/tool/mortarCalculator/i18n/nl.ts +130 -130
- package/src/tool/mortarCalculator/i18n/pl.ts +130 -130
- package/src/tool/mortarCalculator/i18n/pt.ts +130 -130
- package/src/tool/mortarCalculator/i18n/ru.ts +130 -130
- package/src/tool/mortarCalculator/i18n/sv.ts +130 -130
- package/src/tool/mortarCalculator/i18n/tr.ts +130 -130
- package/src/tool/mortarCalculator/i18n/zh.ts +130 -130
- package/src/tool/mortarCalculator/seo.astro +15 -15
- package/src/tool/passepartoutCalculator/bibliography.ts +16 -16
- package/src/tool/passepartoutCalculator/i18n/de.ts +108 -108
- package/src/tool/passepartoutCalculator/i18n/en.ts +165 -165
- package/src/tool/passepartoutCalculator/i18n/es.ts +165 -165
- package/src/tool/passepartoutCalculator/i18n/fr.ts +165 -165
- package/src/tool/passepartoutCalculator/i18n/id.ts +108 -108
- package/src/tool/passepartoutCalculator/i18n/it.ts +108 -108
- package/src/tool/passepartoutCalculator/i18n/ja.ts +108 -108
- package/src/tool/passepartoutCalculator/i18n/ko.ts +108 -108
- package/src/tool/passepartoutCalculator/i18n/nl.ts +108 -108
- package/src/tool/passepartoutCalculator/i18n/pl.ts +108 -108
- package/src/tool/passepartoutCalculator/i18n/pt.ts +108 -108
- package/src/tool/passepartoutCalculator/i18n/ru.ts +108 -108
- package/src/tool/passepartoutCalculator/i18n/sv.ts +108 -108
- package/src/tool/passepartoutCalculator/i18n/tr.ts +108 -108
- package/src/tool/passepartoutCalculator/i18n/zh.ts +108 -108
- package/src/tool/passepartoutCalculator/seo.astro +15 -15
- package/src/tool/pythagoreanRightAngleCalculator/bibliography.ts +12 -12
- package/src/tool/pythagoreanRightAngleCalculator/i18n/de.ts +129 -129
- package/src/tool/pythagoreanRightAngleCalculator/i18n/en.ts +129 -129
- package/src/tool/pythagoreanRightAngleCalculator/i18n/es.ts +129 -129
- package/src/tool/pythagoreanRightAngleCalculator/i18n/fr.ts +129 -129
- package/src/tool/pythagoreanRightAngleCalculator/i18n/id.ts +129 -129
- package/src/tool/pythagoreanRightAngleCalculator/i18n/it.ts +129 -129
- package/src/tool/pythagoreanRightAngleCalculator/i18n/ja.ts +129 -129
- package/src/tool/pythagoreanRightAngleCalculator/i18n/ko.ts +129 -129
- package/src/tool/pythagoreanRightAngleCalculator/i18n/nl.ts +129 -129
- package/src/tool/pythagoreanRightAngleCalculator/i18n/pl.ts +129 -129
- package/src/tool/pythagoreanRightAngleCalculator/i18n/pt.ts +129 -129
- package/src/tool/pythagoreanRightAngleCalculator/i18n/ru.ts +129 -129
- package/src/tool/pythagoreanRightAngleCalculator/i18n/sv.ts +129 -129
- package/src/tool/pythagoreanRightAngleCalculator/i18n/tr.ts +129 -129
- package/src/tool/pythagoreanRightAngleCalculator/i18n/zh.ts +129 -129
- package/src/tool/stairCalculator/bibliography.ts +16 -16
- package/src/tool/stairCalculator/i18n/de.ts +143 -143
- package/src/tool/stairCalculator/i18n/en.ts +145 -145
- package/src/tool/stairCalculator/i18n/es.ts +145 -145
- package/src/tool/stairCalculator/i18n/fr.ts +145 -145
- package/src/tool/stairCalculator/i18n/id.ts +143 -143
- package/src/tool/stairCalculator/i18n/it.ts +143 -143
- package/src/tool/stairCalculator/i18n/ja.ts +143 -143
- package/src/tool/stairCalculator/i18n/ko.ts +143 -143
- package/src/tool/stairCalculator/i18n/nl.ts +143 -143
- package/src/tool/stairCalculator/i18n/pl.ts +143 -143
- package/src/tool/stairCalculator/i18n/pt.ts +143 -143
- package/src/tool/stairCalculator/i18n/ru.ts +143 -143
- package/src/tool/stairCalculator/i18n/sv.ts +143 -143
- package/src/tool/stairCalculator/i18n/tr.ts +143 -143
- package/src/tool/stairCalculator/i18n/zh.ts +143 -143
- package/src/tool/stairCalculator/seo.astro +15 -15
- package/src/tool/thermalExpansionCalculator/bibliography.ts +16 -16
- package/src/tool/thermalExpansionCalculator/i18n/de.ts +132 -132
- package/src/tool/thermalExpansionCalculator/i18n/en.ts +170 -170
- package/src/tool/thermalExpansionCalculator/i18n/es.ts +170 -170
- package/src/tool/thermalExpansionCalculator/i18n/fr.ts +170 -170
- package/src/tool/thermalExpansionCalculator/i18n/id.ts +132 -132
- package/src/tool/thermalExpansionCalculator/i18n/it.ts +132 -132
- package/src/tool/thermalExpansionCalculator/i18n/ja.ts +132 -132
- package/src/tool/thermalExpansionCalculator/i18n/ko.ts +132 -132
- package/src/tool/thermalExpansionCalculator/i18n/nl.ts +132 -132
- package/src/tool/thermalExpansionCalculator/i18n/pl.ts +132 -132
- package/src/tool/thermalExpansionCalculator/i18n/pt.ts +132 -132
- package/src/tool/thermalExpansionCalculator/i18n/ru.ts +132 -132
- package/src/tool/thermalExpansionCalculator/i18n/sv.ts +132 -132
- package/src/tool/thermalExpansionCalculator/i18n/tr.ts +132 -132
- package/src/tool/thermalExpansionCalculator/i18n/zh.ts +132 -132
- package/src/tool/thermalExpansionCalculator/seo.astro +15 -15
- package/src/tool/twoStrokeMixtureCalculator/bibliography.ts +12 -12
- package/src/tool/twoStrokeMixtureCalculator/i18n/de.ts +194 -194
- package/src/tool/twoStrokeMixtureCalculator/i18n/en.ts +194 -194
- package/src/tool/twoStrokeMixtureCalculator/i18n/es.ts +194 -194
- package/src/tool/twoStrokeMixtureCalculator/i18n/fr.ts +194 -194
- package/src/tool/twoStrokeMixtureCalculator/i18n/id.ts +194 -194
- package/src/tool/twoStrokeMixtureCalculator/i18n/it.ts +194 -194
- package/src/tool/twoStrokeMixtureCalculator/i18n/ja.ts +194 -194
- package/src/tool/twoStrokeMixtureCalculator/i18n/ko.ts +194 -194
- package/src/tool/twoStrokeMixtureCalculator/i18n/nl.ts +194 -194
- package/src/tool/twoStrokeMixtureCalculator/i18n/pl.ts +194 -194
- package/src/tool/twoStrokeMixtureCalculator/i18n/pt.ts +194 -194
- package/src/tool/twoStrokeMixtureCalculator/i18n/ru.ts +194 -194
- package/src/tool/twoStrokeMixtureCalculator/i18n/sv.ts +194 -194
- package/src/tool/twoStrokeMixtureCalculator/i18n/tr.ts +194 -194
- package/src/tool/twoStrokeMixtureCalculator/i18n/zh.ts +194 -194
- package/src/tool/voltageDropCalculator/bibliography.ts +16 -16
- package/src/tool/voltageDropCalculator/i18n/de.ts +113 -113
- package/src/tool/voltageDropCalculator/i18n/en.ts +151 -151
- package/src/tool/voltageDropCalculator/i18n/es.ts +151 -151
- package/src/tool/voltageDropCalculator/i18n/fr.ts +145 -145
- package/src/tool/voltageDropCalculator/i18n/id.ts +113 -113
- package/src/tool/voltageDropCalculator/i18n/it.ts +113 -113
- package/src/tool/voltageDropCalculator/i18n/ja.ts +113 -113
- package/src/tool/voltageDropCalculator/i18n/ko.ts +113 -113
- package/src/tool/voltageDropCalculator/i18n/nl.ts +113 -113
- package/src/tool/voltageDropCalculator/i18n/pl.ts +113 -113
- package/src/tool/voltageDropCalculator/i18n/pt.ts +113 -113
- package/src/tool/voltageDropCalculator/i18n/ru.ts +113 -113
- package/src/tool/voltageDropCalculator/i18n/sv.ts +113 -113
- package/src/tool/voltageDropCalculator/i18n/tr.ts +113 -113
- package/src/tool/voltageDropCalculator/i18n/zh.ts +113 -113
- package/src/tool/voltageDropCalculator/seo.astro +15 -15
- package/src/tool/workshopFractionConverter/bibliography.ts +12 -12
- package/src/tool/workshopFractionConverter/i18n/de.ts +147 -147
- package/src/tool/workshopFractionConverter/i18n/en.ts +147 -147
- package/src/tool/workshopFractionConverter/i18n/es.ts +147 -147
- package/src/tool/workshopFractionConverter/i18n/fr.ts +147 -147
- package/src/tool/workshopFractionConverter/i18n/id.ts +147 -147
- package/src/tool/workshopFractionConverter/i18n/it.ts +147 -147
- package/src/tool/workshopFractionConverter/i18n/ja.ts +147 -147
- package/src/tool/workshopFractionConverter/i18n/ko.ts +147 -147
- package/src/tool/workshopFractionConverter/i18n/nl.ts +147 -147
- package/src/tool/workshopFractionConverter/i18n/pl.ts +147 -147
- package/src/tool/workshopFractionConverter/i18n/pt.ts +147 -147
- package/src/tool/workshopFractionConverter/i18n/ru.ts +147 -147
- package/src/tool/workshopFractionConverter/i18n/sv.ts +147 -147
- package/src/tool/workshopFractionConverter/i18n/tr.ts +147 -147
- package/src/tool/workshopFractionConverter/i18n/zh.ts +147 -147
- package/src/tools.ts +20 -20
|
@@ -1,169 +1,169 @@
|
|
|
1
|
-
import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
|
|
2
|
-
import type { ToolLocaleContent } from '../../../types';
|
|
3
|
-
import type { CutOptimizerUI } from '../ui';
|
|
4
|
-
import { bibliography } from '../bibliography';
|
|
5
|
-
|
|
6
|
-
const slug = 'otimizador-corte';
|
|
7
|
-
const title = 'Otimizador de Cortes de Ripas e Painéis';
|
|
8
|
-
const description =
|
|
9
|
-
'Calculadora gratuita para otimizar cortes em madeira, metal ou tubagens. Minimize o desperdício com o algoritmo Bin Packing 1D e 2D. Ideal para carpintaria, serralharia e reformas.';
|
|
10
|
-
|
|
11
|
-
const faqData = [
|
|
12
|
-
{
|
|
13
|
-
question: 'O que é um otimizador de corte 1D?',
|
|
14
|
-
answer:
|
|
15
|
-
'É uma ferramenta que utiliza algoritmos matemáticos (como o Bin Packing Problem) para determinar como cortar peças mais pequenas de uma peça longa padrão (ripa, perfil, tubo) com o mínimo desperdício possível.',
|
|
16
|
-
},
|
|
17
|
-
{
|
|
18
|
-
question: 'Por que incluir a espessura do corte (Kerf)?',
|
|
19
|
-
answer:
|
|
20
|
-
'Cada vez que a serra corta o material, são consumidos alguns milímetros (normalmente entre 2mm e 4mm conforme o disco). Se não calcular este espaço, as últimas peças da sua lista ficarão mais curtas do que o planeado.',
|
|
21
|
-
},
|
|
22
|
-
{
|
|
23
|
-
question: 'Posso misturar peças de diferentes comprimentos?',
|
|
24
|
-
answer:
|
|
25
|
-
'Sim, a nossa calculadora aceita qualquer combinação de comprimentos e quantidades. O algoritmo avaliará todas as combinações possíveis e priorizará o aproveitamento máximo do material de stock.',
|
|
26
|
-
},
|
|
27
|
-
{
|
|
28
|
-
question: 'Como guardo o meu plano de corte?',
|
|
29
|
-
answer:
|
|
30
|
-
'Uma vez otimizado, pode imprimir a página ou fazer uma captura de ecrã do esquema visual. Isto servirá de guia físico na oficina para não confundir a ordem dos cortes.',
|
|
31
|
-
},
|
|
32
|
-
];
|
|
33
|
-
|
|
34
|
-
const howToData = [
|
|
35
|
-
{
|
|
36
|
-
name: 'Definir o material base (Stock)',
|
|
37
|
-
text: 'Introduza o comprimento total da ripa ou perfil disponível (ex. 2400mm ou 6000mm).',
|
|
38
|
-
},
|
|
39
|
-
{
|
|
40
|
-
name: 'Configurar a espessura do disco (Kerf)',
|
|
41
|
-
text: 'Ajuste os milímetros que a serra remove em cada passo para que o cálculo seja milimétrico.',
|
|
42
|
-
},
|
|
43
|
-
{
|
|
44
|
-
name: 'Listar as peças desejadas',
|
|
45
|
-
text: 'Escreva o comprimento e quantidade de cada peça de que necessita para o seu projeto.',
|
|
46
|
-
},
|
|
47
|
-
{
|
|
48
|
-
name: 'Executar a otimização',
|
|
49
|
-
text: 'Obtenha o esquema de corte mais eficiente e a percentagem exata de desperdício gerado.',
|
|
50
|
-
},
|
|
51
|
-
];
|
|
52
|
-
|
|
53
|
-
const faqSchema: WithContext<FAQPage> = {
|
|
54
|
-
'@context': 'https://schema.org',
|
|
55
|
-
'@type': 'FAQPage',
|
|
56
|
-
mainEntity: faqData.map((item) => ({
|
|
57
|
-
'@type': 'Question',
|
|
58
|
-
name: item.question,
|
|
59
|
-
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
60
|
-
})),
|
|
61
|
-
};
|
|
62
|
-
|
|
63
|
-
const howToSchema: WithContext<HowToThing> = {
|
|
64
|
-
'@context': 'https://schema.org',
|
|
65
|
-
'@type': 'HowTo',
|
|
66
|
-
name: title,
|
|
67
|
-
description,
|
|
68
|
-
step: howToData.map((step, i) => ({
|
|
69
|
-
'@type': 'HowToStep',
|
|
70
|
-
position: i + 1,
|
|
71
|
-
name: step.name,
|
|
72
|
-
text: step.text,
|
|
73
|
-
})),
|
|
74
|
-
};
|
|
75
|
-
|
|
76
|
-
const appSchema: WithContext<SoftwareApplication> = {
|
|
77
|
-
'@context': 'https://schema.org',
|
|
78
|
-
'@type': 'SoftwareApplication',
|
|
79
|
-
name: title,
|
|
80
|
-
description,
|
|
81
|
-
applicationCategory: 'UtilityApplication',
|
|
82
|
-
operatingSystem: 'All',
|
|
83
|
-
offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
|
|
84
|
-
inLanguage: 'pt',
|
|
85
|
-
};
|
|
86
|
-
|
|
87
|
-
export const content: ToolLocaleContent<CutOptimizerUI> = {
|
|
88
|
-
slug,
|
|
89
|
-
title,
|
|
90
|
-
description,
|
|
91
|
-
faqTitle: 'Perguntas Frequentes',
|
|
92
|
-
faq: faqData,
|
|
93
|
-
bibliography,
|
|
94
|
-
howTo: howToData,
|
|
95
|
-
schemas: [faqSchema, howToSchema, appSchema],
|
|
96
|
-
seo: [
|
|
97
|
-
{
|
|
98
|
-
type: 'title',
|
|
99
|
-
text: 'Guia Definitiva de Otimização de Corte',
|
|
100
|
-
level: 2,
|
|
101
|
-
},
|
|
102
|
-
{
|
|
103
|
-
type: 'paragraph',
|
|
104
|
-
html: 'La otimização de corte, conhecida tecnicamente como o <strong>Problema de Corte de Stock</strong>, é um dos desafios logísticos mais fascinantes na engenharia industrial. Para um projeto com 20 peças e 5 barras de stock, existem milhões de combinações possíveis. Um algoritmo computacional pode encontrar a solução ótima em milisegundos, reduzindo o desperdício habitual de 15% para menos de 5%.',
|
|
105
|
-
},
|
|
106
|
-
{
|
|
107
|
-
type: 'title',
|
|
108
|
-
text: 'Corte Linear 1D e Corte de Painel 2D',
|
|
109
|
-
level: 3,
|
|
110
|
-
},
|
|
111
|
-
{
|
|
112
|
-
type: 'card',
|
|
113
|
-
icon: 'mdi:arrow-expand-horizontal',
|
|
114
|
-
title: 'Corte Linear para Ripas e Perfis',
|
|
115
|
-
html: '<p>No <strong>corte linear (1D)</strong>, a otimização ocorre apenas numa dimensão: o comprimento. A largura do material é assumida constante. É ideal para madeira dimensional (ripas, vigas), perfis metálicos e de alumínio, tubagens de PVC ou cobre, e varões roscados.</p>',
|
|
116
|
-
},
|
|
117
|
-
{
|
|
118
|
-
type: 'card',
|
|
119
|
-
icon: 'mdi:view-grid',
|
|
120
|
-
title: 'Corte de Painel para Placas e Chapas',
|
|
121
|
-
html: '<p>No <strong>corte de painel (2D)</strong>, gerem-se duas dimensões: largura e comprimento. A ferramenta utiliza algoritmos tipo guilhotina, onde cada corte vai de borda a borda. Ideal para painéis derivados (MDF, aglomerado), contraplacado, vidro, metacrilato e chapas metálicas.</p>',
|
|
122
|
-
},
|
|
123
|
-
{
|
|
124
|
-
type: 'title',
|
|
125
|
-
text: 'O Factor Crítico: A Espessura do Corte (Kerf)',
|
|
126
|
-
level: 3,
|
|
127
|
-
},
|
|
128
|
-
{
|
|
129
|
-
type: 'paragraph',
|
|
130
|
-
html: 'O <strong>Kerf</strong> é o material que se remove em cada corte. Um disco de serra padrão de mesa consome entre 3,0mm e 3,2mm por corte. Uma serra circular de mão consome 1,5 a 2,5mm. Um corte laser em metacrilato apenas 0,1 a 0,3mm. Ignorar o kerf num projeto com 10 cortes em ripas de 2400mm pode fazer com que perca entre 30mm e 32mm de material útil.',
|
|
131
|
-
},
|
|
132
|
-
{
|
|
133
|
-
type: 'title',
|
|
134
|
-
text: 'O Algoritmo Best Fit Decreasing',
|
|
135
|
-
level: 3,
|
|
136
|
-
},
|
|
137
|
-
{
|
|
138
|
-
type: 'card',
|
|
139
|
-
icon: 'mdi:chip',
|
|
140
|
-
title: 'Como Funciona o Otimizador por Dentro',
|
|
141
|
-
html: '<p>O núcleo do otimizador usa a estratégia <strong>Best Fit Decreasing (BFD)</strong>: primeiro ordena todas as peças do maior ao menor comprimento (as grandes são mais difíceis de encaixar). Depois, para cada peça, procura a sobra existente onde caiba deixando o menor excedente possível. Só se não couber em nenhuma, abre uma nova barra virgem. Este processo reduz o desperdício numa ordem de magnitude em relação à seleção aleatória.</p>',
|
|
142
|
-
},
|
|
143
|
-
],
|
|
144
|
-
ui: {
|
|
145
|
-
modeLinearLabel: 'Linear (Barras)',
|
|
146
|
-
modePanelLabel: 'Painel (Placas)',
|
|
147
|
-
configTitle: 'Configuração Material',
|
|
148
|
-
labelStockLength: 'Comprimento do Material (mm)',
|
|
149
|
-
labelStockWidth: 'Largura do Material (mm)',
|
|
150
|
-
labelKerf: 'Espessura da Folha / Kerf (mm)',
|
|
151
|
-
cutsTitle: 'Lista de Cortes',
|
|
152
|
-
placeholderLength: 'Compr.',
|
|
153
|
-
placeholderWidth: 'Largura',
|
|
154
|
-
placeholderQty: 'Quant.',
|
|
155
|
-
btnRemoveTitle: 'Remover',
|
|
156
|
-
statStockUsed: 'Material Usado',
|
|
157
|
-
statTotalCuts: 'Cortes Totais',
|
|
158
|
-
statWaste: 'Desperdício Total',
|
|
159
|
-
statEfficiency: 'Eficiência',
|
|
160
|
-
vizTitle: 'Visualização de Corte',
|
|
161
|
-
emptyState: 'Adicione cortes e prima calcular para ver o plano de corte.',
|
|
162
|
-
noValidCuts: 'Não foi possível gerar cortes válidos. Verifique as medidas.',
|
|
163
|
-
noValidPanels: 'Não foi possível gerar painéis válidos. Verifique se as peças cabem na placa.',
|
|
164
|
-
stockLabel: 'Material',
|
|
165
|
-
panelLabel: 'Painel',
|
|
166
|
-
wasteLabel: 'Desperdício:',
|
|
167
|
-
effLabel: 'Efic:',
|
|
168
|
-
},
|
|
169
|
-
};
|
|
1
|
+
import type { WithContext, FAQPage, HowToThing, SoftwareApplication } from 'schema-dts';
|
|
2
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
3
|
+
import type { CutOptimizerUI } from '../ui';
|
|
4
|
+
import { bibliography } from '../bibliography';
|
|
5
|
+
|
|
6
|
+
const slug = 'otimizador-corte';
|
|
7
|
+
const title = 'Otimizador de Cortes de Ripas e Painéis';
|
|
8
|
+
const description =
|
|
9
|
+
'Calculadora gratuita para otimizar cortes em madeira, metal ou tubagens. Minimize o desperdício com o algoritmo Bin Packing 1D e 2D. Ideal para carpintaria, serralharia e reformas.';
|
|
10
|
+
|
|
11
|
+
const faqData = [
|
|
12
|
+
{
|
|
13
|
+
question: 'O que é um otimizador de corte 1D?',
|
|
14
|
+
answer:
|
|
15
|
+
'É uma ferramenta que utiliza algoritmos matemáticos (como o Bin Packing Problem) para determinar como cortar peças mais pequenas de uma peça longa padrão (ripa, perfil, tubo) com o mínimo desperdício possível.',
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
question: 'Por que incluir a espessura do corte (Kerf)?',
|
|
19
|
+
answer:
|
|
20
|
+
'Cada vez que a serra corta o material, são consumidos alguns milímetros (normalmente entre 2mm e 4mm conforme o disco). Se não calcular este espaço, as últimas peças da sua lista ficarão mais curtas do que o planeado.',
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
question: 'Posso misturar peças de diferentes comprimentos?',
|
|
24
|
+
answer:
|
|
25
|
+
'Sim, a nossa calculadora aceita qualquer combinação de comprimentos e quantidades. O algoritmo avaliará todas as combinações possíveis e priorizará o aproveitamento máximo do material de stock.',
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
question: 'Como guardo o meu plano de corte?',
|
|
29
|
+
answer:
|
|
30
|
+
'Uma vez otimizado, pode imprimir a página ou fazer uma captura de ecrã do esquema visual. Isto servirá de guia físico na oficina para não confundir a ordem dos cortes.',
|
|
31
|
+
},
|
|
32
|
+
];
|
|
33
|
+
|
|
34
|
+
const howToData = [
|
|
35
|
+
{
|
|
36
|
+
name: 'Definir o material base (Stock)',
|
|
37
|
+
text: 'Introduza o comprimento total da ripa ou perfil disponível (ex. 2400mm ou 6000mm).',
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
name: 'Configurar a espessura do disco (Kerf)',
|
|
41
|
+
text: 'Ajuste os milímetros que a serra remove em cada passo para que o cálculo seja milimétrico.',
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
name: 'Listar as peças desejadas',
|
|
45
|
+
text: 'Escreva o comprimento e quantidade de cada peça de que necessita para o seu projeto.',
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
name: 'Executar a otimização',
|
|
49
|
+
text: 'Obtenha o esquema de corte mais eficiente e a percentagem exata de desperdício gerado.',
|
|
50
|
+
},
|
|
51
|
+
];
|
|
52
|
+
|
|
53
|
+
const faqSchema: WithContext<FAQPage> = {
|
|
54
|
+
'@context': 'https://schema.org',
|
|
55
|
+
'@type': 'FAQPage',
|
|
56
|
+
mainEntity: faqData.map((item) => ({
|
|
57
|
+
'@type': 'Question',
|
|
58
|
+
name: item.question,
|
|
59
|
+
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
60
|
+
})),
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
const howToSchema: WithContext<HowToThing> = {
|
|
64
|
+
'@context': 'https://schema.org',
|
|
65
|
+
'@type': 'HowTo',
|
|
66
|
+
name: title,
|
|
67
|
+
description,
|
|
68
|
+
step: howToData.map((step, i) => ({
|
|
69
|
+
'@type': 'HowToStep',
|
|
70
|
+
position: i + 1,
|
|
71
|
+
name: step.name,
|
|
72
|
+
text: step.text,
|
|
73
|
+
})),
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
const appSchema: WithContext<SoftwareApplication> = {
|
|
77
|
+
'@context': 'https://schema.org',
|
|
78
|
+
'@type': 'SoftwareApplication',
|
|
79
|
+
name: title,
|
|
80
|
+
description,
|
|
81
|
+
applicationCategory: 'UtilityApplication',
|
|
82
|
+
operatingSystem: 'All',
|
|
83
|
+
offers: { '@type': 'Offer', price: '0', priceCurrency: 'EUR' },
|
|
84
|
+
inLanguage: 'pt',
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
export const content: ToolLocaleContent<CutOptimizerUI> = {
|
|
88
|
+
slug,
|
|
89
|
+
title,
|
|
90
|
+
description,
|
|
91
|
+
faqTitle: 'Perguntas Frequentes',
|
|
92
|
+
faq: faqData,
|
|
93
|
+
bibliography,
|
|
94
|
+
howTo: howToData,
|
|
95
|
+
schemas: [faqSchema, howToSchema, appSchema],
|
|
96
|
+
seo: [
|
|
97
|
+
{
|
|
98
|
+
type: 'title',
|
|
99
|
+
text: 'Guia Definitiva de Otimização de Corte',
|
|
100
|
+
level: 2,
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
type: 'paragraph',
|
|
104
|
+
html: 'La otimização de corte, conhecida tecnicamente como o <strong>Problema de Corte de Stock</strong>, é um dos desafios logísticos mais fascinantes na engenharia industrial. Para um projeto com 20 peças e 5 barras de stock, existem milhões de combinações possíveis. Um algoritmo computacional pode encontrar a solução ótima em milisegundos, reduzindo o desperdício habitual de 15% para menos de 5%.',
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
type: 'title',
|
|
108
|
+
text: 'Corte Linear 1D e Corte de Painel 2D',
|
|
109
|
+
level: 3,
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
type: 'card',
|
|
113
|
+
icon: 'mdi:arrow-expand-horizontal',
|
|
114
|
+
title: 'Corte Linear para Ripas e Perfis',
|
|
115
|
+
html: '<p>No <strong>corte linear (1D)</strong>, a otimização ocorre apenas numa dimensão: o comprimento. A largura do material é assumida constante. É ideal para madeira dimensional (ripas, vigas), perfis metálicos e de alumínio, tubagens de PVC ou cobre, e varões roscados.</p>',
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
type: 'card',
|
|
119
|
+
icon: 'mdi:view-grid',
|
|
120
|
+
title: 'Corte de Painel para Placas e Chapas',
|
|
121
|
+
html: '<p>No <strong>corte de painel (2D)</strong>, gerem-se duas dimensões: largura e comprimento. A ferramenta utiliza algoritmos tipo guilhotina, onde cada corte vai de borda a borda. Ideal para painéis derivados (MDF, aglomerado), contraplacado, vidro, metacrilato e chapas metálicas.</p>',
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
type: 'title',
|
|
125
|
+
text: 'O Factor Crítico: A Espessura do Corte (Kerf)',
|
|
126
|
+
level: 3,
|
|
127
|
+
},
|
|
128
|
+
{
|
|
129
|
+
type: 'paragraph',
|
|
130
|
+
html: 'O <strong>Kerf</strong> é o material que se remove em cada corte. Um disco de serra padrão de mesa consome entre 3,0mm e 3,2mm por corte. Uma serra circular de mão consome 1,5 a 2,5mm. Um corte laser em metacrilato apenas 0,1 a 0,3mm. Ignorar o kerf num projeto com 10 cortes em ripas de 2400mm pode fazer com que perca entre 30mm e 32mm de material útil.',
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
type: 'title',
|
|
134
|
+
text: 'O Algoritmo Best Fit Decreasing',
|
|
135
|
+
level: 3,
|
|
136
|
+
},
|
|
137
|
+
{
|
|
138
|
+
type: 'card',
|
|
139
|
+
icon: 'mdi:chip',
|
|
140
|
+
title: 'Como Funciona o Otimizador por Dentro',
|
|
141
|
+
html: '<p>O núcleo do otimizador usa a estratégia <strong>Best Fit Decreasing (BFD)</strong>: primeiro ordena todas as peças do maior ao menor comprimento (as grandes são mais difíceis de encaixar). Depois, para cada peça, procura a sobra existente onde caiba deixando o menor excedente possível. Só se não couber em nenhuma, abre uma nova barra virgem. Este processo reduz o desperdício numa ordem de magnitude em relação à seleção aleatória.</p>',
|
|
142
|
+
},
|
|
143
|
+
],
|
|
144
|
+
ui: {
|
|
145
|
+
modeLinearLabel: 'Linear (Barras)',
|
|
146
|
+
modePanelLabel: 'Painel (Placas)',
|
|
147
|
+
configTitle: 'Configuração Material',
|
|
148
|
+
labelStockLength: 'Comprimento do Material (mm)',
|
|
149
|
+
labelStockWidth: 'Largura do Material (mm)',
|
|
150
|
+
labelKerf: 'Espessura da Folha / Kerf (mm)',
|
|
151
|
+
cutsTitle: 'Lista de Cortes',
|
|
152
|
+
placeholderLength: 'Compr.',
|
|
153
|
+
placeholderWidth: 'Largura',
|
|
154
|
+
placeholderQty: 'Quant.',
|
|
155
|
+
btnRemoveTitle: 'Remover',
|
|
156
|
+
statStockUsed: 'Material Usado',
|
|
157
|
+
statTotalCuts: 'Cortes Totais',
|
|
158
|
+
statWaste: 'Desperdício Total',
|
|
159
|
+
statEfficiency: 'Eficiência',
|
|
160
|
+
vizTitle: 'Visualização de Corte',
|
|
161
|
+
emptyState: 'Adicione cortes e prima calcular para ver o plano de corte.',
|
|
162
|
+
noValidCuts: 'Não foi possível gerar cortes válidos. Verifique as medidas.',
|
|
163
|
+
noValidPanels: 'Não foi possível gerar painéis válidos. Verifique se as peças cabem na placa.',
|
|
164
|
+
stockLabel: 'Material',
|
|
165
|
+
panelLabel: 'Painel',
|
|
166
|
+
wasteLabel: 'Desperdício:',
|
|
167
|
+
effLabel: 'Efic:',
|
|
168
|
+
},
|
|
169
|
+
};
|