mirror of
https://github.com/Part-DB/Part-DB-server.git
synced 2026-08-04 07:31:40 +00:00
Adds a "Print to Niimbot" panel to the label generator dialog that sends the generated label straight to a Niimbot thermal printer (e.g. B1) over Web Bluetooth, without a PDF print dialog or printer driver. The existing server-side DomPDF label is reused as-is: a new Stimulus controller rasterizes the PDF preview page-by-page with pdf.js at the printer's native resolution, converts it to a 1-bit bitmap and prints it via the niimbluelib library. No changes to the PHP label pipeline are required. The feature is disabled by default and gated behind the NIIMBOT_ENABLED environment variable, since it is only useful for users who own such a printer. - Add @mmote/niimbluelib and pdfjs-dist dependencies - New assets/controllers/pages/niimbot_print_controller.js - Print options (copies, density, label type, rotation, B/W threshold) in the label dialog, gracefully disabled when Web Bluetooth is unavailable - NIIMBOT_ENABLED env flag (off by default), wired through parameters.yaml and a Twig global, documented in .env - English translations and documentation Requires a Chromium-based browser and a secure context (HTTPS or localhost).
83 lines
2.9 KiB
JSON
83 lines
2.9 KiB
JSON
{
|
|
"devDependencies": {
|
|
"@babel/core": "^7.19.6",
|
|
"@babel/preset-env": "^7.19.4",
|
|
"@fortawesome/fontawesome-free": "^7.0.0",
|
|
"@hotwired/stimulus": "^3.0.0",
|
|
"@hotwired/turbo": "^8.0.1",
|
|
"@popperjs/core": "^2.10.2",
|
|
"@symfony/stimulus-bridge": "^4.0.0",
|
|
"@symfony/ux-translator": "file:vendor/symfony/ux-translator/assets",
|
|
"@symfony/ux-turbo": "file:vendor/symfony/ux-turbo/assets",
|
|
"@symfony/webpack-encore": "^6.0.0",
|
|
"bootstrap": "^5.1.3",
|
|
"core-js": "^3.38.0",
|
|
"intl-messageformat": "^10.5.11",
|
|
"jquery": "^4.0.0",
|
|
"popper.js": "^1.14.7",
|
|
"regenerator-runtime": "^0.14.1",
|
|
"webpack": "^5.74.0",
|
|
"webpack-bundle-analyzer": "^5.1.1",
|
|
"webpack-cli": "^6.0.0",
|
|
"webpack-notifier": "^1.15.0"
|
|
},
|
|
"license": "AGPL-3.0-or-later",
|
|
"private": true,
|
|
"scripts": {
|
|
"dev-server": "encore dev-server",
|
|
"dev": "encore dev",
|
|
"watch": "encore dev --watch",
|
|
"build": "encore production --progress"
|
|
},
|
|
"engines": {
|
|
"node": ">=22.0.0"
|
|
},
|
|
"dependencies": {
|
|
"@algolia/autocomplete-js": "^1.17.0",
|
|
"@algolia/autocomplete-plugin-recent-searches": "^1.17.0",
|
|
"@algolia/autocomplete-theme-classic": "^1.17.0",
|
|
"@jbtronics/bs-treeview": "^1.0.1",
|
|
"@mmote/niimbluelib": "0.0.1-alpha.41",
|
|
"@part-db/html5-qrcode": "^4.0.0",
|
|
"@zxcvbn-ts/core": "^4.1.2",
|
|
"@zxcvbn-ts/language-common": "^4.1.2",
|
|
"@zxcvbn-ts/language-de": "^4.1.1",
|
|
"@zxcvbn-ts/language-en": "^4.1.1",
|
|
"@zxcvbn-ts/language-fr": "^4.1.1",
|
|
"@zxcvbn-ts/language-it": "^4.1.1",
|
|
"@zxcvbn-ts/language-ja": "^4.1.1",
|
|
"@zxcvbn-ts/language-pl": "^4.1.1",
|
|
"attr-accept": "^2.2.5",
|
|
"barcode-detector": "^3.0.5",
|
|
"bootswatch": "^5.1.3",
|
|
"bs-custom-file-input": "^1.3.4",
|
|
"ckeditor5": "^48.0.0",
|
|
"clipboard": "^2.0.4",
|
|
"compression-webpack-plugin": "^12.0.0",
|
|
"datatables.net": "^2.0.0",
|
|
"datatables.net-bs5": "^2.0.0",
|
|
"datatables.net-buttons-bs5": "^3.0.0",
|
|
"datatables.net-colreorder-bs5": "^2.0.0",
|
|
"datatables.net-fixedheader-bs5": "^4.0.0",
|
|
"datatables.net-responsive-bs5": "^3.0.0",
|
|
"datatables.net-select-bs5": "^3.0.1",
|
|
"dompurify": "^3.0.3",
|
|
"exports-loader": "^5.0.0",
|
|
"json-formatter-js": "^2.3.4",
|
|
"jszip": "^3.2.0",
|
|
"katex": "^0.17.0",
|
|
"marked": "^18.0.0",
|
|
"marked-gfm-heading-id": "^4.1.1",
|
|
"marked-mangle": "^1.0.1",
|
|
"pdfjs-dist": "^6.1.200",
|
|
"pdfmake": "^0.3.7",
|
|
"stimulus-use": "^0.52.0",
|
|
"sweetalert2": "^11.26.25",
|
|
"tom-select": "^2.1.0",
|
|
"ts-loader": "^9.2.6",
|
|
"typescript": "^6.0.2"
|
|
},
|
|
"resolutions": {
|
|
"jquery": "^4.0.0"
|
|
}
|
|
}
|