diff --git a/blocksystem/README.md b/blocksystem/README.md index 72cc7f8..1685cbf 100644 --- a/blocksystem/README.md +++ b/blocksystem/README.md @@ -1,4 +1,4 @@ -# BlockSystem +# render-mathproblems BlockSystem es una aplicación educativa interactiva construida con Vue 3, centrada en el componente **`Blocks.vue`**. Este componente permite a los usuarios colocar, arrastrar, agrupar y dividir bloques unitarios en una cuadrícula, fomentando la intuición matemática sobre agrupamiento y valor posicional (unidades y decenas). @@ -8,9 +8,52 @@ La aplicación incluye una interfaz completa con modos de demostración y ejerci Para detalles de la API y configuración de `Blocks.vue`, consulta `src/README.md`. +## Uso Como Paquete + +```sh +npm install render-mathproblems +``` + +Importa el componente y sus estilos: + +```vue + + + +``` + +También puedes importar el nombre interno del componente: + +```js +import { Blocks } from "render-mathproblems"; +``` + ## Requisitos Antes de ejecutar el proyecto, asegúrate de tener instalados: + - Node.js (versión recomendada: 18+) - npm o yarn @@ -39,4 +82,3 @@ Esto lanzará la aplicación en modo desarrollo utilizando Vite. ## Configuración Recomendada del IDE [VS Code](https://code.visualstudio.com/) + [Vue (Official)](https://marketplace.visualstudio.com/items?itemName=Vue.volar) (y desactiva Vetur). - diff --git a/blocksystem/package-lock.json b/blocksystem/package-lock.json index 09d000f..5ec29cb 100644 --- a/blocksystem/package-lock.json +++ b/blocksystem/package-lock.json @@ -1,15 +1,12 @@ { - "name": "blocksystem", - "version": "0.0.0", + "name": "render-mathproblems", + "version": "0.1.0", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "blocksystem", - "version": "0.0.0", - "dependencies": { - "vue": "^3.5.29" - }, + "name": "render-mathproblems", + "version": "0.1.0", "devDependencies": { "@tsconfig/node24": "^24.0.4", "@types/node": "^24.11.0", @@ -19,10 +16,14 @@ "typescript": "~5.9.3", "vite": "^7.3.1", "vite-plugin-vue-devtools": "^8.0.6", + "vue": "^3.5.29", "vue-tsc": "^3.2.5" }, "engines": { "node": "^20.19.0 || >=22.12.0" + }, + "peerDependencies": { + "vue": "^3.5.0" } }, "node_modules/@babel/code-frame": { @@ -56,7 +57,6 @@ "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@babel/code-frame": "^7.29.0", "@babel/generator": "^7.29.0", @@ -266,6 +266,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" @@ -275,6 +276,7 @@ "version": "7.28.5", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" @@ -308,6 +310,7 @@ "version": "7.29.0", "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.0.tgz", "integrity": "sha512-IyDgFV5GeDUVX4YdF/3CPULtVGSXXMLh1xVIgdCgxApktqnQV0r7/8Nqthg+8YLGaAtdyIlo2qIdZrbCv4+7ww==", + "dev": true, "license": "MIT", "dependencies": { "@babel/types": "^7.29.0" @@ -472,6 +475,7 @@ "version": "7.29.0", "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-string-parser": "^7.27.1", @@ -959,6 +963,7 @@ "version": "1.5.5", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { @@ -1356,7 +1361,6 @@ "integrity": "sha512-GYDxsZi3ChgmckRT9HPU0WEhKLP08ev/Yfcq2AstjrDASOYCSXeyjDsHg4v5t4jOj7cyDX3vmprafKlWIG9MXQ==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "undici-types": "~7.16.0" } @@ -1464,6 +1468,7 @@ "version": "3.5.30", "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.30.tgz", "integrity": "sha512-s3DfdZkcu/qExZ+td75015ljzHc6vE+30cFMGRPROYjqkroYI5NV2X1yAMX9UeyBNWB9MxCfPcsjpLS11nzkkw==", + "dev": true, "license": "MIT", "dependencies": { "@babel/parser": "^7.29.0", @@ -1477,6 +1482,7 @@ "version": "3.5.30", "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.30.tgz", "integrity": "sha512-eCFYESUEVYHhiMuK4SQTldO3RYxyMR/UQL4KdGD1Yrkfdx4m/HYuZ9jSfPdA+nWJY34VWndiYdW/wZXyiPEB9g==", + "dev": true, "license": "MIT", "dependencies": { "@vue/compiler-core": "3.5.30", @@ -1487,6 +1493,7 @@ "version": "3.5.30", "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.30.tgz", "integrity": "sha512-LqmFPDn89dtU9vI3wHJnwaV6GfTRD87AjWpTWpyrdVOObVtjIuSeZr181z5C4PmVx/V3j2p+0f7edFKGRMpQ5A==", + "dev": true, "license": "MIT", "dependencies": { "@babel/parser": "^7.29.0", @@ -1504,6 +1511,7 @@ "version": "3.5.30", "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.30.tgz", "integrity": "sha512-NsYK6OMTnx109PSL2IAyf62JP6EUdk4Dmj6AkWcJGBvN0dQoMYtVekAmdqgTtWQgEJo+Okstbf/1p7qZr5H+bA==", + "dev": true, "license": "MIT", "dependencies": { "@vue/compiler-dom": "3.5.30", @@ -1564,6 +1572,7 @@ "version": "3.5.30", "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.30.tgz", "integrity": "sha512-179YNgKATuwj9gB+66snskRDOitDiuOZqkYia7mHKJaidOMo/WJxHKF8DuGc4V4XbYTJANlfEKb0yxTQotnx4Q==", + "dev": true, "license": "MIT", "dependencies": { "@vue/shared": "3.5.30" @@ -1573,6 +1582,7 @@ "version": "3.5.30", "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.30.tgz", "integrity": "sha512-e0Z+8PQsUTdwV8TtEsLzUM7SzC7lQwYKePydb7K2ZnmS6jjND+WJXkmmfh/swYzRyfP1EY3fpdesyYoymCzYfg==", + "dev": true, "license": "MIT", "dependencies": { "@vue/reactivity": "3.5.30", @@ -1583,6 +1593,7 @@ "version": "3.5.30", "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.30.tgz", "integrity": "sha512-2UIGakjU4WSQ0T4iwDEW0W7vQj6n7AFn7taqZ9Cvm0Q/RA2FFOziLESrDL4GmtI1wV3jXg5nMoJSYO66egDUBw==", + "dev": true, "license": "MIT", "dependencies": { "@vue/reactivity": "3.5.30", @@ -1595,6 +1606,7 @@ "version": "3.5.30", "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.30.tgz", "integrity": "sha512-v+R34icapydRwbZRD0sXwtHqrQJv38JuMB4JxbOxd8NEpGLny7cncMp53W9UH/zo4j8eDHjQ1dEJXwzFQknjtQ==", + "dev": true, "license": "MIT", "dependencies": { "@vue/compiler-ssr": "3.5.30", @@ -1608,6 +1620,7 @@ "version": "3.5.30", "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.30.tgz", "integrity": "sha512-YXgQ7JjaO18NeK2K9VTbDHaFy62WrObMa6XERNfNOkAhD1F1oDSf3ZJ7K6GqabZ0BvSDHajp8qfS5Sa2I9n8uQ==", + "dev": true, "license": "MIT" }, "node_modules/@vue/tsconfig": { @@ -1702,7 +1715,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "baseline-browser-mapping": "^2.9.0", "caniuse-lite": "^1.0.30001759", @@ -1803,6 +1815,7 @@ "version": "3.2.3", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "dev": true, "license": "MIT" }, "node_modules/debug": { @@ -1877,6 +1890,7 @@ "version": "7.0.1", "resolved": "https://registry.npmjs.org/entities/-/entities-7.0.1.tgz", "integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==", + "dev": true, "license": "BSD-2-Clause", "engines": { "node": ">=0.12" @@ -1951,6 +1965,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true, "license": "MIT" }, "node_modules/fdir": { @@ -2128,6 +2143,7 @@ "version": "0.30.21", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "dev": true, "license": "MIT", "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" @@ -2170,6 +2186,7 @@ "version": "3.3.11", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "dev": true, "funding": [ { "type": "github", @@ -2289,6 +2306,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, "license": "ISC" }, "node_modules/picomatch": { @@ -2321,6 +2339,7 @@ "version": "8.5.12", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.12.tgz", "integrity": "sha512-W62t/Se6rA0Az3DfCL0AqJwXuKwBeYg6nOaIgzP+xZ7N5BFCI7DYi1qs6ygUYT6rvfi6t9k65UMLJC+PHZpDAA==", + "dev": true, "funding": [ { "type": "opencollective", @@ -2482,6 +2501,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" @@ -2518,9 +2538,8 @@ "version": "5.9.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", - "devOptional": true, + "dev": true, "license": "Apache-2.0", - "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -2590,7 +2609,6 @@ "integrity": "sha512-Bby3NOsna2jsjfLVOHKes8sGwgl4TT0E6vvpYgnAYDIF/tie7MRaFthmKuHx1NSXjiTueXH3do80FMQgvEktRg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "esbuild": "^0.27.0", "fdir": "^6.5.0", @@ -2775,8 +2793,8 @@ "version": "3.5.30", "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.30.tgz", "integrity": "sha512-hTHLc6VNZyzzEH/l7PFGjpcTvUgiaPK5mdLkbjrTeWSRcEfxFrv56g/XckIYlE9ckuobsdwqd5mk2g1sBkMewg==", + "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@vue/compiler-dom": "3.5.30", "@vue/compiler-sfc": "3.5.30", diff --git a/blocksystem/package.json b/blocksystem/package.json index 835ffb4..226eca6 100644 --- a/blocksystem/package.json +++ b/blocksystem/package.json @@ -1,17 +1,35 @@ { - "name": "blocksystem", - "version": "0.0.0", - "private": true, + "name": "render-mathproblems", + "version": "0.1.0", "type": "module", + "files": [ + "dist" + ], + "main": "./dist/render-mathproblems.umd.cjs", + "module": "./dist/render-mathproblems.js", + "types": "./dist/index.d.ts", + "style": "./dist/render-mathproblems.css", + "sideEffects": [ + "**/*.css" + ], + "exports": { + ".": { + "types": "./dist/index.d.ts", + "import": "./dist/render-mathproblems.js", + "require": "./dist/render-mathproblems.umd.cjs" + }, + "./style.css": "./dist/render-mathproblems.css" + }, "scripts": { "dev": "vite", - "build": "run-p type-check \"build-only {@}\" --", + "build": "run-s type-check build-only types-only", "preview": "vite preview", "build-only": "vite build", + "types-only": "vue-tsc -p tsconfig.lib.json --declaration --emitDeclarationOnly", "type-check": "vue-tsc --build" }, - "dependencies": { - "vue": "^3.5.29" + "peerDependencies": { + "vue": "^3.5.0" }, "devDependencies": { "@tsconfig/node24": "^24.0.4", @@ -22,6 +40,7 @@ "typescript": "~5.9.3", "vite": "^7.3.1", "vite-plugin-vue-devtools": "^8.0.6", + "vue": "^3.5.29", "vue-tsc": "^3.2.5" }, "engines": { diff --git a/blocksystem/pnpm-lock.yaml b/blocksystem/pnpm-lock.yaml index fb760b3..2f2b0d4 100644 --- a/blocksystem/pnpm-lock.yaml +++ b/blocksystem/pnpm-lock.yaml @@ -7,10 +7,6 @@ settings: importers: .: - dependencies: - vue: - specifier: ^3.5.29 - version: 3.5.34(typescript@5.9.3) devDependencies: '@tsconfig/node24': specifier: ^24.0.4 @@ -36,6 +32,9 @@ importers: vite-plugin-vue-devtools: specifier: ^8.0.6 version: 8.1.2(vite@7.3.3(@types/node@24.12.4))(vue@3.5.34(typescript@5.9.3)) + vue: + specifier: ^3.5.29 + version: 3.5.34(typescript@5.9.3) vue-tsc: specifier: ^3.2.5 version: 3.3.1(typescript@5.9.3) diff --git a/blocksystem/pnpm-workspace.yaml b/blocksystem/pnpm-workspace.yaml new file mode 100644 index 0000000..5ed0b5a --- /dev/null +++ b/blocksystem/pnpm-workspace.yaml @@ -0,0 +1,2 @@ +allowBuilds: + esbuild: true diff --git a/blocksystem/src/components/Blocks.vue b/blocksystem/src/components/Blocks.vue index 7632f42..aeb798b 100644 --- a/blocksystem/src/components/Blocks.vue +++ b/blocksystem/src/components/Blocks.vue @@ -8,10 +8,10 @@ const ErrorEl = { template: '
{ + const plugins: PluginOption[] = [vue()] + + if (command === 'serve') { + plugins.push(vueDevTools()) + } + + return { + plugins, + resolve: { + alias: { + '@': fileURLToPath(new URL('./src', import.meta.url)) + }, }, - }, + build: { + lib: { + entry: fileURLToPath(new URL('./src/index.ts', import.meta.url)), + name: 'RenderMathProblems', + fileName: 'render-mathproblems', + }, + rollupOptions: { + external: ['vue'], + output: { + exports: 'named', + globals: { + vue: 'Vue', + }, + }, + }, + }, + } })