@capacitor/barcode-scanner 2.2.1 → 2.2.2
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/CapacitorBarcodeScanner.podspec +1 -1
- package/Package.swift +2 -2
- package/README.md +2 -8
- package/android/build.gradle +19 -20
- package/dist/docs.json +3 -3
- package/dist/esm/definitions.d.ts +1 -8
- package/dist/esm/definitions.js +1 -1
- package/dist/esm/definitions.js.map +1 -1
- package/dist/esm/index.d.ts +2 -2
- package/dist/esm/index.js +10 -13
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/utils.js +12 -15
- package/dist/esm/utils.js.map +1 -1
- package/dist/esm/web.d.ts +2 -2
- package/dist/esm/web.js +35 -42
- package/dist/esm/web.js.map +1 -1
- package/dist/plugin.cjs.js +49 -62
- package/dist/plugin.cjs.js.map +1 -1
- package/dist/plugin.js +49 -62
- package/dist/plugin.js.map +1 -1
- package/ios/Sources/CapacitorBarcodeScannerPlugin/CapacitorBarcodeScannerPlugin.swift +4 -4
- package/ios/Tests/CapacitorBarcodeScannerPluginTests/OSBarcodeTests.swift +9 -0
- package/package.json +20 -21
package/dist/plugin.cjs.js
CHANGED
|
@@ -46,21 +46,18 @@ exports.CapacitorBarcodeScannerAndroidScanningLibrary = void 0;
|
|
|
46
46
|
* Each object in the array defines a CSS rule, with a selector and the CSS properties to apply.
|
|
47
47
|
*/
|
|
48
48
|
const barcodeScannerCss = [
|
|
49
|
-
{ selector:
|
|
49
|
+
{ selector: '.scanner-container-display', css: 'display: block;' },
|
|
50
50
|
{
|
|
51
|
-
selector:
|
|
52
|
-
css:
|
|
51
|
+
selector: '.scanner-dialog',
|
|
52
|
+
css: 'display: none; position: fixed; z-index: 999; left: 0; top: 0; width: 100%; height: 100%; overflow: auto; background-color: rgba(0,0,0,0.4);',
|
|
53
53
|
},
|
|
54
54
|
{
|
|
55
|
-
selector:
|
|
56
|
-
css:
|
|
55
|
+
selector: '.scanner-dialog-inner',
|
|
56
|
+
css: 'background-color: #fefefe; margin: 2% auto; padding: 20px; border: 1px solid #888; width: 96%;',
|
|
57
57
|
},
|
|
58
|
-
{
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
},
|
|
62
|
-
{ selector: ".close-button:hover", css: "color: #222;" },
|
|
63
|
-
{ selector: ".scanner-container-full-width", css: "width: 100%;" },
|
|
58
|
+
{ selector: '.close-button', css: 'color: #aaa; float: right; font-size: 28px; font-weight: bold; cursor: pointer;' },
|
|
59
|
+
{ selector: '.close-button:hover', css: 'color: #222;' },
|
|
60
|
+
{ selector: '.scanner-container-full-width', css: 'width: 100%;' },
|
|
64
61
|
];
|
|
65
62
|
/**
|
|
66
63
|
* Dynamically applies a set of CSS rules to the document.
|
|
@@ -71,12 +68,12 @@ const barcodeScannerCss = [
|
|
|
71
68
|
* @param {Array<{selector: string, css: string}>} cssRules - An array of objects containing CSS selectors and styles to apply.
|
|
72
69
|
*/
|
|
73
70
|
function applyCss(cssRules) {
|
|
74
|
-
const styleId =
|
|
71
|
+
const styleId = 'custom-style-os-cap-barcode'; // Unique identifier for the style element.
|
|
75
72
|
let styleElement = document.getElementById(styleId);
|
|
76
73
|
if (!styleElement) {
|
|
77
74
|
// Create and append a new style element if it does not exist.
|
|
78
|
-
styleElement = document.createElement(
|
|
79
|
-
styleElement.type =
|
|
75
|
+
styleElement = document.createElement('style');
|
|
76
|
+
styleElement.type = 'text/css';
|
|
80
77
|
styleElement.id = styleId;
|
|
81
78
|
document.head.appendChild(styleElement);
|
|
82
79
|
}
|
|
@@ -92,7 +89,7 @@ function applyCss(cssRules) {
|
|
|
92
89
|
}
|
|
93
90
|
else {
|
|
94
91
|
// Fallback for older browsers using textContent.
|
|
95
|
-
styleElement.textContent =
|
|
92
|
+
styleElement.textContent = '';
|
|
96
93
|
for (const { selector, css } of cssRules) {
|
|
97
94
|
styleElement.textContent += `${selector} { ${css} }`;
|
|
98
95
|
}
|
|
@@ -104,7 +101,7 @@ function applyCss(cssRules) {
|
|
|
104
101
|
* For web platforms, it applies necessary CSS for the barcode scanner and dynamically imports the web implementation.
|
|
105
102
|
* This allows for lazy loading of the web code only when needed, optimizing overall bundle size.
|
|
106
103
|
*/
|
|
107
|
-
const CapacitorBarcodeScannerImpl = core.registerPlugin(
|
|
104
|
+
const CapacitorBarcodeScannerImpl = core.registerPlugin('CapacitorBarcodeScanner', {
|
|
108
105
|
web: () => {
|
|
109
106
|
applyCss(barcodeScannerCss); // Apply the CSS styles necessary for the web implementation of the barcode scanner.
|
|
110
107
|
return Promise.resolve().then(function () { return web; }).then((m) => new m.CapacitorBarcodeScannerWeb()); // Dynamically import the web implementation and instantiate it.
|
|
@@ -112,19 +109,15 @@ const CapacitorBarcodeScannerImpl = core.registerPlugin("CapacitorBarcodeScanner
|
|
|
112
109
|
});
|
|
113
110
|
class CapacitorBarcodeScanner {
|
|
114
111
|
static async scanBarcode(options) {
|
|
115
|
-
options.scanInstructions = options.scanInstructions ||
|
|
112
|
+
options.scanInstructions = options.scanInstructions || ' '; // Ensure scanInstructions is at least a space.
|
|
116
113
|
options.scanButton = options.scanButton || false; // Set scanButton to false if not provided.
|
|
117
|
-
options.scanText = options.scanText ||
|
|
118
|
-
options.cameraDirection =
|
|
119
|
-
|
|
120
|
-
options.scanOrientation =
|
|
121
|
-
options.scanOrientation ||
|
|
122
|
-
exports.CapacitorBarcodeScannerScanOrientation.ADAPTIVE; // Set scanOrientation to 'ADAPTIVE' if not provided.
|
|
114
|
+
options.scanText = options.scanText || ' '; // Ensure scanText is at least a space.
|
|
115
|
+
options.cameraDirection = options.cameraDirection || exports.CapacitorBarcodeScannerCameraDirection.BACK; // Set cameraDirection to 'BACK' if not provided.
|
|
116
|
+
options.scanOrientation = options.scanOrientation || exports.CapacitorBarcodeScannerScanOrientation.ADAPTIVE; // Set scanOrientation to 'ADAPTIVE' if not provided.
|
|
123
117
|
return CapacitorBarcodeScannerImpl.scanBarcode(options);
|
|
124
118
|
}
|
|
125
119
|
}
|
|
126
120
|
|
|
127
|
-
/* eslint-env browser */
|
|
128
121
|
/**
|
|
129
122
|
* Implements OSBarcodePlugin to provide web functionality for barcode scanning.
|
|
130
123
|
*/
|
|
@@ -140,7 +133,8 @@ class CapacitorBarcodeScannerWeb extends core.WebPlugin {
|
|
|
140
133
|
await window.OSBarcodeWebScanner.stop();
|
|
141
134
|
window.OSBarcodeWebScanner = null;
|
|
142
135
|
}
|
|
143
|
-
|
|
136
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
137
|
+
document.getElementById('cap-os-barcode-scanner-container-dialog').style.display = 'none';
|
|
144
138
|
}
|
|
145
139
|
/**
|
|
146
140
|
* Builds the HTML elements necessary for the barcode scanner UI.
|
|
@@ -149,38 +143,34 @@ class CapacitorBarcodeScannerWeb extends core.WebPlugin {
|
|
|
149
143
|
* @private
|
|
150
144
|
*/
|
|
151
145
|
buildScannerElement() {
|
|
152
|
-
if (document.getElementById(
|
|
153
|
-
|
|
154
|
-
|
|
146
|
+
if (document.getElementById('cap-os-barcode-scanner-container')) {
|
|
147
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
148
|
+
document.getElementById('cap-os-barcode-scanner-container').className = 'scanner-container-display';
|
|
155
149
|
return;
|
|
156
150
|
}
|
|
157
151
|
// Create and configure scanner container elements
|
|
158
|
-
const caposbarcodescannercontainer = document.body.appendChild(document.createElement(
|
|
159
|
-
caposbarcodescannercontainer.id =
|
|
160
|
-
const caposbarcodescannercontainerdialog = document.createElement(
|
|
161
|
-
caposbarcodescannercontainerdialog.id =
|
|
162
|
-
|
|
163
|
-
caposbarcodescannercontainerdialog.className = "scanner-dialog";
|
|
152
|
+
const caposbarcodescannercontainer = document.body.appendChild(document.createElement('div'));
|
|
153
|
+
caposbarcodescannercontainer.id = 'cap-os-barcode-scanner-container';
|
|
154
|
+
const caposbarcodescannercontainerdialog = document.createElement('div');
|
|
155
|
+
caposbarcodescannercontainerdialog.id = 'cap-os-barcode-scanner-container-dialog';
|
|
156
|
+
caposbarcodescannercontainerdialog.className = 'scanner-dialog';
|
|
164
157
|
// Inner dialog elements including the close button and scanner view
|
|
165
|
-
const caposbarcodescannercontainerdialoginner = document.createElement(
|
|
166
|
-
caposbarcodescannercontainerdialoginner.className =
|
|
167
|
-
const caposbarcodescannercontainerdialoginnerclose = document.createElement(
|
|
168
|
-
caposbarcodescannercontainerdialoginnerclose.className =
|
|
169
|
-
caposbarcodescannercontainerdialoginnerclose.innerHTML =
|
|
158
|
+
const caposbarcodescannercontainerdialoginner = document.createElement('div');
|
|
159
|
+
caposbarcodescannercontainerdialoginner.className = 'scanner-dialog-inner';
|
|
160
|
+
const caposbarcodescannercontainerdialoginnerclose = document.createElement('span');
|
|
161
|
+
caposbarcodescannercontainerdialoginnerclose.className = 'close-button';
|
|
162
|
+
caposbarcodescannercontainerdialoginnerclose.innerHTML = '×';
|
|
170
163
|
caposbarcodescannercontainerdialoginner.appendChild(caposbarcodescannercontainerdialoginnerclose);
|
|
171
|
-
const caposbarcodescannercontainerdialoginnercontainerp = document.createElement(
|
|
172
|
-
caposbarcodescannercontainerdialoginnercontainerp.innerHTML =
|
|
164
|
+
const caposbarcodescannercontainerdialoginnercontainerp = document.createElement('p');
|
|
165
|
+
caposbarcodescannercontainerdialoginnercontainerp.innerHTML = ' ';
|
|
173
166
|
caposbarcodescannercontainerdialoginner.appendChild(caposbarcodescannercontainerdialoginnercontainerp);
|
|
174
|
-
const caposbarcodescannercontainerdialoginnercontainer = document.createElement(
|
|
175
|
-
caposbarcodescannercontainerdialoginnercontainer.className =
|
|
176
|
-
|
|
177
|
-
caposbarcodescannercontainerdialoginnercontainer.id =
|
|
178
|
-
"cap-os-barcode-scanner-container-scanner";
|
|
167
|
+
const caposbarcodescannercontainerdialoginnercontainer = document.createElement('div');
|
|
168
|
+
caposbarcodescannercontainerdialoginnercontainer.className = 'scanner-container-full-width';
|
|
169
|
+
caposbarcodescannercontainerdialoginnercontainer.id = 'cap-os-barcode-scanner-container-scanner';
|
|
179
170
|
caposbarcodescannercontainerdialoginner.appendChild(caposbarcodescannercontainerdialoginnercontainer);
|
|
180
171
|
caposbarcodescannercontainerdialog.appendChild(caposbarcodescannercontainerdialoginner);
|
|
181
172
|
caposbarcodescannercontainer.appendChild(caposbarcodescannercontainerdialog);
|
|
182
|
-
caposbarcodescannercontainerdialoginnerclose.onclick =
|
|
183
|
-
this.stopAndHideScanner;
|
|
173
|
+
caposbarcodescannercontainerdialoginnerclose.onclick = this.stopAndHideScanner;
|
|
184
174
|
}
|
|
185
175
|
/**
|
|
186
176
|
* Initiates a barcode scan using the user's camera and HTML5 QR code scanner.
|
|
@@ -190,28 +180,25 @@ class CapacitorBarcodeScannerWeb extends core.WebPlugin {
|
|
|
190
180
|
*/
|
|
191
181
|
async scanBarcode(options) {
|
|
192
182
|
this.buildScannerElement();
|
|
193
|
-
|
|
183
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
184
|
+
document.getElementById('cap-os-barcode-scanner-container-dialog').style.display = 'block';
|
|
194
185
|
return new Promise((resolve, reject) => {
|
|
195
186
|
var _a, _b;
|
|
196
187
|
const param = {
|
|
197
|
-
facingMode: options.cameraDirection === 1 ?
|
|
188
|
+
facingMode: options.cameraDirection === 1 ? 'environment' : 'user',
|
|
198
189
|
scanButton: options.scanButton === undefined ? false : options.scanButton,
|
|
199
|
-
scanInstructions: options.scanInstructions
|
|
200
|
-
? options.scanInstructions
|
|
201
|
-
: "",
|
|
190
|
+
scanInstructions: options.scanInstructions ? options.scanInstructions : '',
|
|
202
191
|
orientation: options.scanOrientation
|
|
203
192
|
? options.scanOrientation
|
|
204
193
|
: exports.CapacitorBarcodeScannerScanOrientation.PORTRAIT,
|
|
205
|
-
showCameraSelection: ((_a = options.web) === null || _a === void 0 ? void 0 : _a.showCameraSelection)
|
|
206
|
-
? options.web.showCameraSelection
|
|
207
|
-
: false,
|
|
194
|
+
showCameraSelection: ((_a = options.web) === null || _a === void 0 ? void 0 : _a.showCameraSelection) ? options.web.showCameraSelection : false,
|
|
208
195
|
typeHint: options.hint === 17 ? undefined : options.hint,
|
|
209
196
|
scannerFPS: ((_b = options.web) === null || _b === void 0 ? void 0 : _b.scannerFPS) ? options.web.scannerFPS : 50,
|
|
210
197
|
};
|
|
211
198
|
// Set up and start the scanner
|
|
212
|
-
const scannerElement = document.getElementById(
|
|
199
|
+
const scannerElement = document.getElementById('cap-os-barcode-scanner-container-scanner');
|
|
213
200
|
if (!scannerElement) {
|
|
214
|
-
throw new Error(
|
|
201
|
+
throw new Error('Scanner Element is required for web');
|
|
215
202
|
}
|
|
216
203
|
window.OSBarcodeWebScanner = new html5Qrcode.Html5Qrcode(scannerElement.id, {
|
|
217
204
|
formatsToSupport: param.typeHint !== undefined ? [param.typeHint] : undefined,
|
|
@@ -222,7 +209,7 @@ class CapacitorBarcodeScannerWeb extends core.WebPlugin {
|
|
|
222
209
|
qrbox: scannerElement.getBoundingClientRect().width * (9 / 16) - 10,
|
|
223
210
|
aspectRatio: 16 / 9,
|
|
224
211
|
videoConstraints: {
|
|
225
|
-
focusMode:
|
|
212
|
+
focusMode: 'continuous',
|
|
226
213
|
height: { min: 576, ideal: 1920 },
|
|
227
214
|
deviceId: undefined,
|
|
228
215
|
facingMode: param.facingMode,
|
|
@@ -239,9 +226,9 @@ class CapacitorBarcodeScannerWeb extends core.WebPlugin {
|
|
|
239
226
|
};
|
|
240
227
|
const OSBarcodeWebScannerErrorCallback = (error) => {
|
|
241
228
|
const allowedErrors = [
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
229
|
+
'NotFoundException',
|
|
230
|
+
'No barcode or QR code detected',
|
|
231
|
+
'No MultiFormat Readers were able to detect the code',
|
|
245
232
|
];
|
|
246
233
|
if (!allowedErrors.find((e) => error.indexOf(e) !== -1)) {
|
|
247
234
|
this.stopAndHideScanner();
|
package/dist/plugin.cjs.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.cjs.js","sources":["esm/definitions.js","esm/utils.js","esm/index.js","esm/web.js"],"sourcesContent":["import { Html5QrcodeSupportedFormats } from \"html5-qrcode\";\n/**\n * Enum representing the direction of the camera to be used for barcode scanning.\n */\nexport var CapacitorBarcodeScannerCameraDirection;\n(function (CapacitorBarcodeScannerCameraDirection) {\n CapacitorBarcodeScannerCameraDirection[CapacitorBarcodeScannerCameraDirection[\"BACK\"] = 1] = \"BACK\";\n CapacitorBarcodeScannerCameraDirection[CapacitorBarcodeScannerCameraDirection[\"FRONT\"] = 2] = \"FRONT\";\n})(CapacitorBarcodeScannerCameraDirection || (CapacitorBarcodeScannerCameraDirection = {}));\n/**\n * Enum representing the orientation of the scanner during barcode scanning.\n */\nexport var CapacitorBarcodeScannerScanOrientation;\n(function (CapacitorBarcodeScannerScanOrientation) {\n CapacitorBarcodeScannerScanOrientation[CapacitorBarcodeScannerScanOrientation[\"PORTRAIT\"] = 1] = \"PORTRAIT\";\n CapacitorBarcodeScannerScanOrientation[CapacitorBarcodeScannerScanOrientation[\"LANDSCAPE\"] = 2] = \"LANDSCAPE\";\n CapacitorBarcodeScannerScanOrientation[CapacitorBarcodeScannerScanOrientation[\"ADAPTIVE\"] = 3] = \"ADAPTIVE\";\n})(CapacitorBarcodeScannerScanOrientation || (CapacitorBarcodeScannerScanOrientation = {}));\n/**\n * Enum representing a special option to indicate that all barcode types are supported.\n */\nexport var CapacitorBarcodeScannerTypeHintALLOption;\n(function (CapacitorBarcodeScannerTypeHintALLOption) {\n CapacitorBarcodeScannerTypeHintALLOption[CapacitorBarcodeScannerTypeHintALLOption[\"ALL\"] = 17] = \"ALL\";\n})(CapacitorBarcodeScannerTypeHintALLOption || (CapacitorBarcodeScannerTypeHintALLOption = {}));\n/**\n * Extends supported formats from Html5Qrcode with a special 'ALL' option,\n * indicating support for all barcode types.\n */\nexport const CapacitorBarcodeScannerTypeHint = Object.assign(Object.assign({}, Html5QrcodeSupportedFormats), CapacitorBarcodeScannerTypeHintALLOption);\n/**\n * Enum representing the library to be used for barcode scanning on Android devices.\n */\nexport var CapacitorBarcodeScannerAndroidScanningLibrary;\n(function (CapacitorBarcodeScannerAndroidScanningLibrary) {\n CapacitorBarcodeScannerAndroidScanningLibrary[\"ZXING\"] = \"zxing\";\n CapacitorBarcodeScannerAndroidScanningLibrary[\"MLKIT\"] = \"mlkit\";\n})(CapacitorBarcodeScannerAndroidScanningLibrary || (CapacitorBarcodeScannerAndroidScanningLibrary = {}));\n//# sourceMappingURL=definitions.js.map","/**\n * Predefined CSS rules for styling barcode scanner components.\n * Each object in the array defines a CSS rule, with a selector and the CSS properties to apply.\n */\nexport const barcodeScannerCss = [\n { selector: \".scanner-container-display\", css: \"display: block;\" },\n {\n selector: \".scanner-dialog\",\n css: \"display: none; position: fixed; z-index: 999; left: 0; top: 0; width: 100%; height: 100%; overflow: auto; background-color: rgba(0,0,0,0.4);\",\n },\n {\n selector: \".scanner-dialog-inner\",\n css: \"background-color: #fefefe; margin: 2% auto; padding: 20px; border: 1px solid #888; width: 96%;\",\n },\n {\n selector: \".close-button\",\n css: \"color: #aaa; float: right; font-size: 28px; font-weight: bold; cursor: pointer;\",\n },\n { selector: \".close-button:hover\", css: \"color: #222;\" },\n { selector: \".scanner-container-full-width\", css: \"width: 100%;\" },\n];\n/**\n * Dynamically applies a set of CSS rules to the document.\n * If a custom style element with a specific ID does not exist, it is created and appended to the document's head.\n * Existing rules in the style element are cleared before new ones are applied.\n * This function supports both modern and older browsers by using `CSSStyleSheet.insertRule` and `textContent` respectively.\n *\n * @param {Array<{selector: string, css: string}>} cssRules - An array of objects containing CSS selectors and styles to apply.\n */\nexport function applyCss(cssRules) {\n const styleId = \"custom-style-os-cap-barcode\"; // Unique identifier for the style element.\n let styleElement = document.getElementById(styleId);\n if (!styleElement) {\n // Create and append a new style element if it does not exist.\n styleElement = document.createElement(\"style\");\n styleElement.type = \"text/css\";\n styleElement.id = styleId;\n document.head.appendChild(styleElement);\n }\n if (styleElement.sheet) {\n // Clear existing CSS rules.\n while (styleElement.sheet.cssRules.length) {\n styleElement.sheet.deleteRule(0);\n }\n // Insert new CSS rules.\n for (const { selector, css } of cssRules) {\n styleElement.sheet.insertRule(`${selector} { ${css} }`);\n }\n }\n else {\n // Fallback for older browsers using textContent.\n styleElement.textContent = \"\";\n for (const { selector, css } of cssRules) {\n styleElement.textContent += `${selector} { ${css} }`;\n }\n }\n}\n//# sourceMappingURL=utils.js.map","import { registerPlugin } from \"@capacitor/core\";\nimport { CapacitorBarcodeScannerCameraDirection, CapacitorBarcodeScannerScanOrientation, } from \"./definitions\"; // Importing the interface for type checking.\nimport { applyCss, barcodeScannerCss } from \"./utils\"; // Import utilities for applying CSS.\n/**\n * Registers the `OSBarcode` plugin with Capacitor.\n * For web platforms, it applies necessary CSS for the barcode scanner and dynamically imports the web implementation.\n * This allows for lazy loading of the web code only when needed, optimizing overall bundle size.\n */\nconst CapacitorBarcodeScannerImpl = registerPlugin(\"CapacitorBarcodeScanner\", {\n web: () => {\n applyCss(barcodeScannerCss); // Apply the CSS styles necessary for the web implementation of the barcode scanner.\n return import(\"./web\").then((m) => new m.CapacitorBarcodeScannerWeb()); // Dynamically import the web implementation and instantiate it.\n },\n});\nclass CapacitorBarcodeScanner {\n static async scanBarcode(options) {\n options.scanInstructions = options.scanInstructions || \" \"; // Ensure scanInstructions is at least a space.\n options.scanButton = options.scanButton || false; // Set scanButton to false if not provided.\n options.scanText = options.scanText || \" \"; // Ensure scanText is at least a space.\n options.cameraDirection =\n options.cameraDirection || CapacitorBarcodeScannerCameraDirection.BACK; // Set cameraDirection to 'BACK' if not provided.\n options.scanOrientation =\n options.scanOrientation ||\n CapacitorBarcodeScannerScanOrientation.ADAPTIVE; // Set scanOrientation to 'ADAPTIVE' if not provided.\n return CapacitorBarcodeScannerImpl.scanBarcode(options);\n }\n}\nexport { CapacitorBarcodeScanner }; // Export the `CapacitorBarcodeScanner` class.\nexport * from \"./definitions\"; // Re-export all exports from the definitions file.\n//# sourceMappingURL=index.js.map","/* eslint-env browser */\nimport { WebPlugin } from \"@capacitor/core\";\nimport { Html5Qrcode } from \"html5-qrcode\";\nimport { CapacitorBarcodeScannerScanOrientation, CapacitorBarcodeScannerTypeHint, } from \"./definitions\";\n/**\n * Implements OSBarcodePlugin to provide web functionality for barcode scanning.\n */\nexport class CapacitorBarcodeScannerWeb extends WebPlugin {\n /**\n * Stops the barcode scanner and hides its UI.\n * @private\n * @returns {Promise<void>} A promise that resolves when the scanner has stopped and its UI is hidden.\n */\n async stopAndHideScanner() {\n console.log(window.OSBarcodeWebScanner);\n if (window.OSBarcodeWebScanner) {\n await window.OSBarcodeWebScanner.stop();\n window.OSBarcodeWebScanner = null;\n }\n document.getElementById(\"cap-os-barcode-scanner-container-dialog\").style.display = \"none\";\n }\n /**\n * Builds the HTML elements necessary for the barcode scanner UI.\n * This method checks if the scanner container exists before creating it to avoid duplicates.\n * It also sets up the close button to stop and hide the scanner on click.\n * @private\n */\n buildScannerElement() {\n if (document.getElementById(\"cap-os-barcode-scanner-container\")) {\n document.getElementById(\"cap-os-barcode-scanner-container\").className =\n \"scanner-container-display\";\n return;\n }\n // Create and configure scanner container elements\n const caposbarcodescannercontainer = document.body.appendChild(document.createElement(\"div\"));\n caposbarcodescannercontainer.id = \"cap-os-barcode-scanner-container\";\n const caposbarcodescannercontainerdialog = document.createElement(\"div\");\n caposbarcodescannercontainerdialog.id =\n \"cap-os-barcode-scanner-container-dialog\";\n caposbarcodescannercontainerdialog.className = \"scanner-dialog\";\n // Inner dialog elements including the close button and scanner view\n const caposbarcodescannercontainerdialoginner = document.createElement(\"div\");\n caposbarcodescannercontainerdialoginner.className = \"scanner-dialog-inner\";\n const caposbarcodescannercontainerdialoginnerclose = document.createElement(\"span\");\n caposbarcodescannercontainerdialoginnerclose.className = \"close-button\";\n caposbarcodescannercontainerdialoginnerclose.innerHTML = \"×\";\n caposbarcodescannercontainerdialoginner.appendChild(caposbarcodescannercontainerdialoginnerclose);\n const caposbarcodescannercontainerdialoginnercontainerp = document.createElement(\"p\");\n caposbarcodescannercontainerdialoginnercontainerp.innerHTML = \" \";\n caposbarcodescannercontainerdialoginner.appendChild(caposbarcodescannercontainerdialoginnercontainerp);\n const caposbarcodescannercontainerdialoginnercontainer = document.createElement(\"div\");\n caposbarcodescannercontainerdialoginnercontainer.className =\n \"scanner-container-full-width\";\n caposbarcodescannercontainerdialoginnercontainer.id =\n \"cap-os-barcode-scanner-container-scanner\";\n caposbarcodescannercontainerdialoginner.appendChild(caposbarcodescannercontainerdialoginnercontainer);\n caposbarcodescannercontainerdialog.appendChild(caposbarcodescannercontainerdialoginner);\n caposbarcodescannercontainer.appendChild(caposbarcodescannercontainerdialog);\n caposbarcodescannercontainerdialoginnerclose.onclick =\n this.stopAndHideScanner;\n }\n /**\n * Initiates a barcode scan using the user's camera and HTML5 QR code scanner.\n * Displays the scanner UI and waits for a scan to complete or fail.\n * @param {OSBarcodeScanOptions} options Configuration options for the scan, including camera direction and UI preferences.\n * @returns {Promise<OSBarcodeScanResult>} A promise that resolves with the scan result or rejects with an error.\n */\n async scanBarcode(options) {\n this.buildScannerElement();\n document.getElementById(\"cap-os-barcode-scanner-container-dialog\").style.display = \"block\";\n return new Promise((resolve, reject) => {\n var _a, _b;\n const param = {\n facingMode: options.cameraDirection === 1 ? \"environment\" : \"user\",\n hasScannerButton: false,\n scanButton: options.scanButton === undefined ? false : options.scanButton,\n showScanLine: false,\n scanInstructions: options.scanInstructions\n ? options.scanInstructions\n : \"\",\n orientation: options.scanOrientation\n ? options.scanOrientation\n : CapacitorBarcodeScannerScanOrientation.PORTRAIT,\n showCameraSelection: ((_a = options.web) === null || _a === void 0 ? void 0 : _a.showCameraSelection)\n ? options.web.showCameraSelection\n : false,\n typeHint: options.hint === 17 ? undefined : options.hint,\n scannerFPS: ((_b = options.web) === null || _b === void 0 ? void 0 : _b.scannerFPS) ? options.web.scannerFPS : 50,\n };\n // Set up and start the scanner\n const scannerElement = document.getElementById(\"cap-os-barcode-scanner-container-scanner\");\n if (!scannerElement) {\n throw new Error(\"Scanner Element is required for web\");\n }\n window.OSBarcodeWebScanner = new Html5Qrcode(scannerElement.id, {\n formatsToSupport: param.typeHint !== undefined ? [param.typeHint] : undefined,\n verbose: undefined,\n });\n const Html5QrcodeConfig = {\n fps: param.scannerFPS,\n qrbox: scannerElement.getBoundingClientRect().width * (9 / 16) - 10,\n aspectRatio: 16 / 9,\n videoConstraints: {\n focusMode: \"continuous\",\n height: { min: 576, ideal: 1920 },\n deviceId: undefined,\n facingMode: param.facingMode,\n },\n };\n // Success and error callbacks for the scanner\n const OSBarcodeWebScannerSuccessCallback = (decodedText, decodedResult) => {\n var _a, _b;\n this.stopAndHideScanner();\n resolve({\n ScanResult: decodedText,\n format: (_b = (_a = decodedResult.result.format) === null || _a === void 0 ? void 0 : _a.format) !== null && _b !== void 0 ? _b : CapacitorBarcodeScannerTypeHint.ALL,\n });\n };\n const OSBarcodeWebScannerErrorCallback = (error) => {\n const allowedErrors = [\n \"NotFoundException\",\n \"No barcode or QR code detected\",\n \"No MultiFormat Readers were able to detect the code\",\n ];\n if (!allowedErrors.find((e) => error.indexOf(e) !== -1)) {\n this.stopAndHideScanner();\n console.error(`[Scanner Web Error] ${error}`);\n reject(error);\n }\n };\n window.OSBarcodeWebScanner.start({ facingMode: param.facingMode }, Html5QrcodeConfig, OSBarcodeWebScannerSuccessCallback, OSBarcodeWebScannerErrorCallback);\n });\n }\n}\n//# sourceMappingURL=web.js.map"],"names":["CapacitorBarcodeScannerCameraDirection","CapacitorBarcodeScannerScanOrientation","CapacitorBarcodeScannerTypeHintALLOption","Html5QrcodeSupportedFormats","CapacitorBarcodeScannerAndroidScanningLibrary","registerPlugin","WebPlugin","Html5Qrcode"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"plugin.cjs.js","sources":["esm/definitions.js","esm/utils.js","esm/index.js","esm/web.js"],"sourcesContent":["import { Html5QrcodeSupportedFormats } from 'html5-qrcode';\n/**\n * Enum representing the direction of the camera to be used for barcode scanning.\n */\nexport var CapacitorBarcodeScannerCameraDirection;\n(function (CapacitorBarcodeScannerCameraDirection) {\n CapacitorBarcodeScannerCameraDirection[CapacitorBarcodeScannerCameraDirection[\"BACK\"] = 1] = \"BACK\";\n CapacitorBarcodeScannerCameraDirection[CapacitorBarcodeScannerCameraDirection[\"FRONT\"] = 2] = \"FRONT\";\n})(CapacitorBarcodeScannerCameraDirection || (CapacitorBarcodeScannerCameraDirection = {}));\n/**\n * Enum representing the orientation of the scanner during barcode scanning.\n */\nexport var CapacitorBarcodeScannerScanOrientation;\n(function (CapacitorBarcodeScannerScanOrientation) {\n CapacitorBarcodeScannerScanOrientation[CapacitorBarcodeScannerScanOrientation[\"PORTRAIT\"] = 1] = \"PORTRAIT\";\n CapacitorBarcodeScannerScanOrientation[CapacitorBarcodeScannerScanOrientation[\"LANDSCAPE\"] = 2] = \"LANDSCAPE\";\n CapacitorBarcodeScannerScanOrientation[CapacitorBarcodeScannerScanOrientation[\"ADAPTIVE\"] = 3] = \"ADAPTIVE\";\n})(CapacitorBarcodeScannerScanOrientation || (CapacitorBarcodeScannerScanOrientation = {}));\n/**\n * Enum representing a special option to indicate that all barcode types are supported.\n */\nexport var CapacitorBarcodeScannerTypeHintALLOption;\n(function (CapacitorBarcodeScannerTypeHintALLOption) {\n CapacitorBarcodeScannerTypeHintALLOption[CapacitorBarcodeScannerTypeHintALLOption[\"ALL\"] = 17] = \"ALL\";\n})(CapacitorBarcodeScannerTypeHintALLOption || (CapacitorBarcodeScannerTypeHintALLOption = {}));\n/**\n * Extends supported formats from Html5Qrcode with a special 'ALL' option,\n * indicating support for all barcode types.\n */\nexport const CapacitorBarcodeScannerTypeHint = Object.assign(Object.assign({}, Html5QrcodeSupportedFormats), CapacitorBarcodeScannerTypeHintALLOption);\n/**\n * Enum representing the library to be used for barcode scanning on Android devices.\n */\nexport var CapacitorBarcodeScannerAndroidScanningLibrary;\n(function (CapacitorBarcodeScannerAndroidScanningLibrary) {\n CapacitorBarcodeScannerAndroidScanningLibrary[\"ZXING\"] = \"zxing\";\n CapacitorBarcodeScannerAndroidScanningLibrary[\"MLKIT\"] = \"mlkit\";\n})(CapacitorBarcodeScannerAndroidScanningLibrary || (CapacitorBarcodeScannerAndroidScanningLibrary = {}));\n//# sourceMappingURL=definitions.js.map","/**\n * Predefined CSS rules for styling barcode scanner components.\n * Each object in the array defines a CSS rule, with a selector and the CSS properties to apply.\n */\nexport const barcodeScannerCss = [\n { selector: '.scanner-container-display', css: 'display: block;' },\n {\n selector: '.scanner-dialog',\n css: 'display: none; position: fixed; z-index: 999; left: 0; top: 0; width: 100%; height: 100%; overflow: auto; background-color: rgba(0,0,0,0.4);',\n },\n {\n selector: '.scanner-dialog-inner',\n css: 'background-color: #fefefe; margin: 2% auto; padding: 20px; border: 1px solid #888; width: 96%;',\n },\n { selector: '.close-button', css: 'color: #aaa; float: right; font-size: 28px; font-weight: bold; cursor: pointer;' },\n { selector: '.close-button:hover', css: 'color: #222;' },\n { selector: '.scanner-container-full-width', css: 'width: 100%;' },\n];\n/**\n * Dynamically applies a set of CSS rules to the document.\n * If a custom style element with a specific ID does not exist, it is created and appended to the document's head.\n * Existing rules in the style element are cleared before new ones are applied.\n * This function supports both modern and older browsers by using `CSSStyleSheet.insertRule` and `textContent` respectively.\n *\n * @param {Array<{selector: string, css: string}>} cssRules - An array of objects containing CSS selectors and styles to apply.\n */\nexport function applyCss(cssRules) {\n const styleId = 'custom-style-os-cap-barcode'; // Unique identifier for the style element.\n let styleElement = document.getElementById(styleId);\n if (!styleElement) {\n // Create and append a new style element if it does not exist.\n styleElement = document.createElement('style');\n styleElement.type = 'text/css';\n styleElement.id = styleId;\n document.head.appendChild(styleElement);\n }\n if (styleElement.sheet) {\n // Clear existing CSS rules.\n while (styleElement.sheet.cssRules.length) {\n styleElement.sheet.deleteRule(0);\n }\n // Insert new CSS rules.\n for (const { selector, css } of cssRules) {\n styleElement.sheet.insertRule(`${selector} { ${css} }`);\n }\n }\n else {\n // Fallback for older browsers using textContent.\n styleElement.textContent = '';\n for (const { selector, css } of cssRules) {\n styleElement.textContent += `${selector} { ${css} }`;\n }\n }\n}\n//# sourceMappingURL=utils.js.map","import { registerPlugin } from '@capacitor/core';\nimport { CapacitorBarcodeScannerCameraDirection, CapacitorBarcodeScannerScanOrientation, } from './definitions'; // Importing the interface for type checking.\nimport { applyCss, barcodeScannerCss } from './utils'; // Import utilities for applying CSS.\n/**\n * Registers the `OSBarcode` plugin with Capacitor.\n * For web platforms, it applies necessary CSS for the barcode scanner and dynamically imports the web implementation.\n * This allows for lazy loading of the web code only when needed, optimizing overall bundle size.\n */\nconst CapacitorBarcodeScannerImpl = registerPlugin('CapacitorBarcodeScanner', {\n web: () => {\n applyCss(barcodeScannerCss); // Apply the CSS styles necessary for the web implementation of the barcode scanner.\n return import('./web').then((m) => new m.CapacitorBarcodeScannerWeb()); // Dynamically import the web implementation and instantiate it.\n },\n});\nclass CapacitorBarcodeScanner {\n static async scanBarcode(options) {\n options.scanInstructions = options.scanInstructions || ' '; // Ensure scanInstructions is at least a space.\n options.scanButton = options.scanButton || false; // Set scanButton to false if not provided.\n options.scanText = options.scanText || ' '; // Ensure scanText is at least a space.\n options.cameraDirection = options.cameraDirection || CapacitorBarcodeScannerCameraDirection.BACK; // Set cameraDirection to 'BACK' if not provided.\n options.scanOrientation = options.scanOrientation || CapacitorBarcodeScannerScanOrientation.ADAPTIVE; // Set scanOrientation to 'ADAPTIVE' if not provided.\n return CapacitorBarcodeScannerImpl.scanBarcode(options);\n }\n}\nexport { CapacitorBarcodeScanner }; // Export the `CapacitorBarcodeScanner` class.\nexport * from './definitions'; // Re-export all exports from the definitions file.\n//# sourceMappingURL=index.js.map","import { WebPlugin } from '@capacitor/core';\nimport { Html5Qrcode } from 'html5-qrcode';\nimport { CapacitorBarcodeScannerScanOrientation, CapacitorBarcodeScannerTypeHint } from './definitions';\n/**\n * Implements OSBarcodePlugin to provide web functionality for barcode scanning.\n */\nexport class CapacitorBarcodeScannerWeb extends WebPlugin {\n /**\n * Stops the barcode scanner and hides its UI.\n * @private\n * @returns {Promise<void>} A promise that resolves when the scanner has stopped and its UI is hidden.\n */\n async stopAndHideScanner() {\n console.log(window.OSBarcodeWebScanner);\n if (window.OSBarcodeWebScanner) {\n await window.OSBarcodeWebScanner.stop();\n window.OSBarcodeWebScanner = null;\n }\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n document.getElementById('cap-os-barcode-scanner-container-dialog').style.display = 'none';\n }\n /**\n * Builds the HTML elements necessary for the barcode scanner UI.\n * This method checks if the scanner container exists before creating it to avoid duplicates.\n * It also sets up the close button to stop and hide the scanner on click.\n * @private\n */\n buildScannerElement() {\n if (document.getElementById('cap-os-barcode-scanner-container')) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n document.getElementById('cap-os-barcode-scanner-container').className = 'scanner-container-display';\n return;\n }\n // Create and configure scanner container elements\n const caposbarcodescannercontainer = document.body.appendChild(document.createElement('div'));\n caposbarcodescannercontainer.id = 'cap-os-barcode-scanner-container';\n const caposbarcodescannercontainerdialog = document.createElement('div');\n caposbarcodescannercontainerdialog.id = 'cap-os-barcode-scanner-container-dialog';\n caposbarcodescannercontainerdialog.className = 'scanner-dialog';\n // Inner dialog elements including the close button and scanner view\n const caposbarcodescannercontainerdialoginner = document.createElement('div');\n caposbarcodescannercontainerdialoginner.className = 'scanner-dialog-inner';\n const caposbarcodescannercontainerdialoginnerclose = document.createElement('span');\n caposbarcodescannercontainerdialoginnerclose.className = 'close-button';\n caposbarcodescannercontainerdialoginnerclose.innerHTML = '×';\n caposbarcodescannercontainerdialoginner.appendChild(caposbarcodescannercontainerdialoginnerclose);\n const caposbarcodescannercontainerdialoginnercontainerp = document.createElement('p');\n caposbarcodescannercontainerdialoginnercontainerp.innerHTML = ' ';\n caposbarcodescannercontainerdialoginner.appendChild(caposbarcodescannercontainerdialoginnercontainerp);\n const caposbarcodescannercontainerdialoginnercontainer = document.createElement('div');\n caposbarcodescannercontainerdialoginnercontainer.className = 'scanner-container-full-width';\n caposbarcodescannercontainerdialoginnercontainer.id = 'cap-os-barcode-scanner-container-scanner';\n caposbarcodescannercontainerdialoginner.appendChild(caposbarcodescannercontainerdialoginnercontainer);\n caposbarcodescannercontainerdialog.appendChild(caposbarcodescannercontainerdialoginner);\n caposbarcodescannercontainer.appendChild(caposbarcodescannercontainerdialog);\n caposbarcodescannercontainerdialoginnerclose.onclick = this.stopAndHideScanner;\n }\n /**\n * Initiates a barcode scan using the user's camera and HTML5 QR code scanner.\n * Displays the scanner UI and waits for a scan to complete or fail.\n * @param {OSBarcodeScanOptions} options Configuration options for the scan, including camera direction and UI preferences.\n * @returns {Promise<OSBarcodeScanResult>} A promise that resolves with the scan result or rejects with an error.\n */\n async scanBarcode(options) {\n this.buildScannerElement();\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n document.getElementById('cap-os-barcode-scanner-container-dialog').style.display = 'block';\n return new Promise((resolve, reject) => {\n var _a, _b;\n const param = {\n facingMode: options.cameraDirection === 1 ? 'environment' : 'user',\n hasScannerButton: false,\n scanButton: options.scanButton === undefined ? false : options.scanButton,\n showScanLine: false,\n scanInstructions: options.scanInstructions ? options.scanInstructions : '',\n orientation: options.scanOrientation\n ? options.scanOrientation\n : CapacitorBarcodeScannerScanOrientation.PORTRAIT,\n showCameraSelection: ((_a = options.web) === null || _a === void 0 ? void 0 : _a.showCameraSelection) ? options.web.showCameraSelection : false,\n typeHint: options.hint === 17 ? undefined : options.hint,\n scannerFPS: ((_b = options.web) === null || _b === void 0 ? void 0 : _b.scannerFPS) ? options.web.scannerFPS : 50,\n };\n // Set up and start the scanner\n const scannerElement = document.getElementById('cap-os-barcode-scanner-container-scanner');\n if (!scannerElement) {\n throw new Error('Scanner Element is required for web');\n }\n window.OSBarcodeWebScanner = new Html5Qrcode(scannerElement.id, {\n formatsToSupport: param.typeHint !== undefined ? [param.typeHint] : undefined,\n verbose: undefined,\n });\n const Html5QrcodeConfig = {\n fps: param.scannerFPS,\n qrbox: scannerElement.getBoundingClientRect().width * (9 / 16) - 10,\n aspectRatio: 16 / 9,\n videoConstraints: {\n focusMode: 'continuous',\n height: { min: 576, ideal: 1920 },\n deviceId: undefined,\n facingMode: param.facingMode,\n },\n };\n // Success and error callbacks for the scanner\n const OSBarcodeWebScannerSuccessCallback = (decodedText, decodedResult) => {\n var _a, _b;\n this.stopAndHideScanner();\n resolve({\n ScanResult: decodedText,\n format: (_b = (_a = decodedResult.result.format) === null || _a === void 0 ? void 0 : _a.format) !== null && _b !== void 0 ? _b : CapacitorBarcodeScannerTypeHint.ALL,\n });\n };\n const OSBarcodeWebScannerErrorCallback = (error) => {\n const allowedErrors = [\n 'NotFoundException',\n 'No barcode or QR code detected',\n 'No MultiFormat Readers were able to detect the code',\n ];\n if (!allowedErrors.find((e) => error.indexOf(e) !== -1)) {\n this.stopAndHideScanner();\n console.error(`[Scanner Web Error] ${error}`);\n reject(error);\n }\n };\n window.OSBarcodeWebScanner.start({ facingMode: param.facingMode }, Html5QrcodeConfig, OSBarcodeWebScannerSuccessCallback, OSBarcodeWebScannerErrorCallback);\n });\n }\n}\n//# sourceMappingURL=web.js.map"],"names":["CapacitorBarcodeScannerCameraDirection","CapacitorBarcodeScannerScanOrientation","CapacitorBarcodeScannerTypeHintALLOption","Html5QrcodeSupportedFormats","CapacitorBarcodeScannerAndroidScanningLibrary","registerPlugin","WebPlugin","Html5Qrcode"],"mappings":"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"}
|
package/dist/plugin.js
CHANGED
|
@@ -44,21 +44,18 @@ var capacitorOSBarcode = (function (exports, core, html5Qrcode) {
|
|
|
44
44
|
* Each object in the array defines a CSS rule, with a selector and the CSS properties to apply.
|
|
45
45
|
*/
|
|
46
46
|
const barcodeScannerCss = [
|
|
47
|
-
{ selector:
|
|
47
|
+
{ selector: '.scanner-container-display', css: 'display: block;' },
|
|
48
48
|
{
|
|
49
|
-
selector:
|
|
50
|
-
css:
|
|
49
|
+
selector: '.scanner-dialog',
|
|
50
|
+
css: 'display: none; position: fixed; z-index: 999; left: 0; top: 0; width: 100%; height: 100%; overflow: auto; background-color: rgba(0,0,0,0.4);',
|
|
51
51
|
},
|
|
52
52
|
{
|
|
53
|
-
selector:
|
|
54
|
-
css:
|
|
53
|
+
selector: '.scanner-dialog-inner',
|
|
54
|
+
css: 'background-color: #fefefe; margin: 2% auto; padding: 20px; border: 1px solid #888; width: 96%;',
|
|
55
55
|
},
|
|
56
|
-
{
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
},
|
|
60
|
-
{ selector: ".close-button:hover", css: "color: #222;" },
|
|
61
|
-
{ selector: ".scanner-container-full-width", css: "width: 100%;" },
|
|
56
|
+
{ selector: '.close-button', css: 'color: #aaa; float: right; font-size: 28px; font-weight: bold; cursor: pointer;' },
|
|
57
|
+
{ selector: '.close-button:hover', css: 'color: #222;' },
|
|
58
|
+
{ selector: '.scanner-container-full-width', css: 'width: 100%;' },
|
|
62
59
|
];
|
|
63
60
|
/**
|
|
64
61
|
* Dynamically applies a set of CSS rules to the document.
|
|
@@ -69,12 +66,12 @@ var capacitorOSBarcode = (function (exports, core, html5Qrcode) {
|
|
|
69
66
|
* @param {Array<{selector: string, css: string}>} cssRules - An array of objects containing CSS selectors and styles to apply.
|
|
70
67
|
*/
|
|
71
68
|
function applyCss(cssRules) {
|
|
72
|
-
const styleId =
|
|
69
|
+
const styleId = 'custom-style-os-cap-barcode'; // Unique identifier for the style element.
|
|
73
70
|
let styleElement = document.getElementById(styleId);
|
|
74
71
|
if (!styleElement) {
|
|
75
72
|
// Create and append a new style element if it does not exist.
|
|
76
|
-
styleElement = document.createElement(
|
|
77
|
-
styleElement.type =
|
|
73
|
+
styleElement = document.createElement('style');
|
|
74
|
+
styleElement.type = 'text/css';
|
|
78
75
|
styleElement.id = styleId;
|
|
79
76
|
document.head.appendChild(styleElement);
|
|
80
77
|
}
|
|
@@ -90,7 +87,7 @@ var capacitorOSBarcode = (function (exports, core, html5Qrcode) {
|
|
|
90
87
|
}
|
|
91
88
|
else {
|
|
92
89
|
// Fallback for older browsers using textContent.
|
|
93
|
-
styleElement.textContent =
|
|
90
|
+
styleElement.textContent = '';
|
|
94
91
|
for (const { selector, css } of cssRules) {
|
|
95
92
|
styleElement.textContent += `${selector} { ${css} }`;
|
|
96
93
|
}
|
|
@@ -102,7 +99,7 @@ var capacitorOSBarcode = (function (exports, core, html5Qrcode) {
|
|
|
102
99
|
* For web platforms, it applies necessary CSS for the barcode scanner and dynamically imports the web implementation.
|
|
103
100
|
* This allows for lazy loading of the web code only when needed, optimizing overall bundle size.
|
|
104
101
|
*/
|
|
105
|
-
const CapacitorBarcodeScannerImpl = core.registerPlugin(
|
|
102
|
+
const CapacitorBarcodeScannerImpl = core.registerPlugin('CapacitorBarcodeScanner', {
|
|
106
103
|
web: () => {
|
|
107
104
|
applyCss(barcodeScannerCss); // Apply the CSS styles necessary for the web implementation of the barcode scanner.
|
|
108
105
|
return Promise.resolve().then(function () { return web; }).then((m) => new m.CapacitorBarcodeScannerWeb()); // Dynamically import the web implementation and instantiate it.
|
|
@@ -110,19 +107,15 @@ var capacitorOSBarcode = (function (exports, core, html5Qrcode) {
|
|
|
110
107
|
});
|
|
111
108
|
class CapacitorBarcodeScanner {
|
|
112
109
|
static async scanBarcode(options) {
|
|
113
|
-
options.scanInstructions = options.scanInstructions ||
|
|
110
|
+
options.scanInstructions = options.scanInstructions || ' '; // Ensure scanInstructions is at least a space.
|
|
114
111
|
options.scanButton = options.scanButton || false; // Set scanButton to false if not provided.
|
|
115
|
-
options.scanText = options.scanText ||
|
|
116
|
-
options.cameraDirection =
|
|
117
|
-
|
|
118
|
-
options.scanOrientation =
|
|
119
|
-
options.scanOrientation ||
|
|
120
|
-
exports.CapacitorBarcodeScannerScanOrientation.ADAPTIVE; // Set scanOrientation to 'ADAPTIVE' if not provided.
|
|
112
|
+
options.scanText = options.scanText || ' '; // Ensure scanText is at least a space.
|
|
113
|
+
options.cameraDirection = options.cameraDirection || exports.CapacitorBarcodeScannerCameraDirection.BACK; // Set cameraDirection to 'BACK' if not provided.
|
|
114
|
+
options.scanOrientation = options.scanOrientation || exports.CapacitorBarcodeScannerScanOrientation.ADAPTIVE; // Set scanOrientation to 'ADAPTIVE' if not provided.
|
|
121
115
|
return CapacitorBarcodeScannerImpl.scanBarcode(options);
|
|
122
116
|
}
|
|
123
117
|
}
|
|
124
118
|
|
|
125
|
-
/* eslint-env browser */
|
|
126
119
|
/**
|
|
127
120
|
* Implements OSBarcodePlugin to provide web functionality for barcode scanning.
|
|
128
121
|
*/
|
|
@@ -138,7 +131,8 @@ var capacitorOSBarcode = (function (exports, core, html5Qrcode) {
|
|
|
138
131
|
await window.OSBarcodeWebScanner.stop();
|
|
139
132
|
window.OSBarcodeWebScanner = null;
|
|
140
133
|
}
|
|
141
|
-
|
|
134
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
135
|
+
document.getElementById('cap-os-barcode-scanner-container-dialog').style.display = 'none';
|
|
142
136
|
}
|
|
143
137
|
/**
|
|
144
138
|
* Builds the HTML elements necessary for the barcode scanner UI.
|
|
@@ -147,38 +141,34 @@ var capacitorOSBarcode = (function (exports, core, html5Qrcode) {
|
|
|
147
141
|
* @private
|
|
148
142
|
*/
|
|
149
143
|
buildScannerElement() {
|
|
150
|
-
if (document.getElementById(
|
|
151
|
-
|
|
152
|
-
|
|
144
|
+
if (document.getElementById('cap-os-barcode-scanner-container')) {
|
|
145
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
146
|
+
document.getElementById('cap-os-barcode-scanner-container').className = 'scanner-container-display';
|
|
153
147
|
return;
|
|
154
148
|
}
|
|
155
149
|
// Create and configure scanner container elements
|
|
156
|
-
const caposbarcodescannercontainer = document.body.appendChild(document.createElement(
|
|
157
|
-
caposbarcodescannercontainer.id =
|
|
158
|
-
const caposbarcodescannercontainerdialog = document.createElement(
|
|
159
|
-
caposbarcodescannercontainerdialog.id =
|
|
160
|
-
|
|
161
|
-
caposbarcodescannercontainerdialog.className = "scanner-dialog";
|
|
150
|
+
const caposbarcodescannercontainer = document.body.appendChild(document.createElement('div'));
|
|
151
|
+
caposbarcodescannercontainer.id = 'cap-os-barcode-scanner-container';
|
|
152
|
+
const caposbarcodescannercontainerdialog = document.createElement('div');
|
|
153
|
+
caposbarcodescannercontainerdialog.id = 'cap-os-barcode-scanner-container-dialog';
|
|
154
|
+
caposbarcodescannercontainerdialog.className = 'scanner-dialog';
|
|
162
155
|
// Inner dialog elements including the close button and scanner view
|
|
163
|
-
const caposbarcodescannercontainerdialoginner = document.createElement(
|
|
164
|
-
caposbarcodescannercontainerdialoginner.className =
|
|
165
|
-
const caposbarcodescannercontainerdialoginnerclose = document.createElement(
|
|
166
|
-
caposbarcodescannercontainerdialoginnerclose.className =
|
|
167
|
-
caposbarcodescannercontainerdialoginnerclose.innerHTML =
|
|
156
|
+
const caposbarcodescannercontainerdialoginner = document.createElement('div');
|
|
157
|
+
caposbarcodescannercontainerdialoginner.className = 'scanner-dialog-inner';
|
|
158
|
+
const caposbarcodescannercontainerdialoginnerclose = document.createElement('span');
|
|
159
|
+
caposbarcodescannercontainerdialoginnerclose.className = 'close-button';
|
|
160
|
+
caposbarcodescannercontainerdialoginnerclose.innerHTML = '×';
|
|
168
161
|
caposbarcodescannercontainerdialoginner.appendChild(caposbarcodescannercontainerdialoginnerclose);
|
|
169
|
-
const caposbarcodescannercontainerdialoginnercontainerp = document.createElement(
|
|
170
|
-
caposbarcodescannercontainerdialoginnercontainerp.innerHTML =
|
|
162
|
+
const caposbarcodescannercontainerdialoginnercontainerp = document.createElement('p');
|
|
163
|
+
caposbarcodescannercontainerdialoginnercontainerp.innerHTML = ' ';
|
|
171
164
|
caposbarcodescannercontainerdialoginner.appendChild(caposbarcodescannercontainerdialoginnercontainerp);
|
|
172
|
-
const caposbarcodescannercontainerdialoginnercontainer = document.createElement(
|
|
173
|
-
caposbarcodescannercontainerdialoginnercontainer.className =
|
|
174
|
-
|
|
175
|
-
caposbarcodescannercontainerdialoginnercontainer.id =
|
|
176
|
-
"cap-os-barcode-scanner-container-scanner";
|
|
165
|
+
const caposbarcodescannercontainerdialoginnercontainer = document.createElement('div');
|
|
166
|
+
caposbarcodescannercontainerdialoginnercontainer.className = 'scanner-container-full-width';
|
|
167
|
+
caposbarcodescannercontainerdialoginnercontainer.id = 'cap-os-barcode-scanner-container-scanner';
|
|
177
168
|
caposbarcodescannercontainerdialoginner.appendChild(caposbarcodescannercontainerdialoginnercontainer);
|
|
178
169
|
caposbarcodescannercontainerdialog.appendChild(caposbarcodescannercontainerdialoginner);
|
|
179
170
|
caposbarcodescannercontainer.appendChild(caposbarcodescannercontainerdialog);
|
|
180
|
-
caposbarcodescannercontainerdialoginnerclose.onclick =
|
|
181
|
-
this.stopAndHideScanner;
|
|
171
|
+
caposbarcodescannercontainerdialoginnerclose.onclick = this.stopAndHideScanner;
|
|
182
172
|
}
|
|
183
173
|
/**
|
|
184
174
|
* Initiates a barcode scan using the user's camera and HTML5 QR code scanner.
|
|
@@ -188,28 +178,25 @@ var capacitorOSBarcode = (function (exports, core, html5Qrcode) {
|
|
|
188
178
|
*/
|
|
189
179
|
async scanBarcode(options) {
|
|
190
180
|
this.buildScannerElement();
|
|
191
|
-
|
|
181
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
182
|
+
document.getElementById('cap-os-barcode-scanner-container-dialog').style.display = 'block';
|
|
192
183
|
return new Promise((resolve, reject) => {
|
|
193
184
|
var _a, _b;
|
|
194
185
|
const param = {
|
|
195
|
-
facingMode: options.cameraDirection === 1 ?
|
|
186
|
+
facingMode: options.cameraDirection === 1 ? 'environment' : 'user',
|
|
196
187
|
scanButton: options.scanButton === undefined ? false : options.scanButton,
|
|
197
|
-
scanInstructions: options.scanInstructions
|
|
198
|
-
? options.scanInstructions
|
|
199
|
-
: "",
|
|
188
|
+
scanInstructions: options.scanInstructions ? options.scanInstructions : '',
|
|
200
189
|
orientation: options.scanOrientation
|
|
201
190
|
? options.scanOrientation
|
|
202
191
|
: exports.CapacitorBarcodeScannerScanOrientation.PORTRAIT,
|
|
203
|
-
showCameraSelection: ((_a = options.web) === null || _a === void 0 ? void 0 : _a.showCameraSelection)
|
|
204
|
-
? options.web.showCameraSelection
|
|
205
|
-
: false,
|
|
192
|
+
showCameraSelection: ((_a = options.web) === null || _a === void 0 ? void 0 : _a.showCameraSelection) ? options.web.showCameraSelection : false,
|
|
206
193
|
typeHint: options.hint === 17 ? undefined : options.hint,
|
|
207
194
|
scannerFPS: ((_b = options.web) === null || _b === void 0 ? void 0 : _b.scannerFPS) ? options.web.scannerFPS : 50,
|
|
208
195
|
};
|
|
209
196
|
// Set up and start the scanner
|
|
210
|
-
const scannerElement = document.getElementById(
|
|
197
|
+
const scannerElement = document.getElementById('cap-os-barcode-scanner-container-scanner');
|
|
211
198
|
if (!scannerElement) {
|
|
212
|
-
throw new Error(
|
|
199
|
+
throw new Error('Scanner Element is required for web');
|
|
213
200
|
}
|
|
214
201
|
window.OSBarcodeWebScanner = new html5Qrcode.Html5Qrcode(scannerElement.id, {
|
|
215
202
|
formatsToSupport: param.typeHint !== undefined ? [param.typeHint] : undefined,
|
|
@@ -220,7 +207,7 @@ var capacitorOSBarcode = (function (exports, core, html5Qrcode) {
|
|
|
220
207
|
qrbox: scannerElement.getBoundingClientRect().width * (9 / 16) - 10,
|
|
221
208
|
aspectRatio: 16 / 9,
|
|
222
209
|
videoConstraints: {
|
|
223
|
-
focusMode:
|
|
210
|
+
focusMode: 'continuous',
|
|
224
211
|
height: { min: 576, ideal: 1920 },
|
|
225
212
|
deviceId: undefined,
|
|
226
213
|
facingMode: param.facingMode,
|
|
@@ -237,9 +224,9 @@ var capacitorOSBarcode = (function (exports, core, html5Qrcode) {
|
|
|
237
224
|
};
|
|
238
225
|
const OSBarcodeWebScannerErrorCallback = (error) => {
|
|
239
226
|
const allowedErrors = [
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
227
|
+
'NotFoundException',
|
|
228
|
+
'No barcode or QR code detected',
|
|
229
|
+
'No MultiFormat Readers were able to detect the code',
|
|
243
230
|
];
|
|
244
231
|
if (!allowedErrors.find((e) => error.indexOf(e) !== -1)) {
|
|
245
232
|
this.stopAndHideScanner();
|