@virtualdisplay.io/client 4.0.0-alpha.1 → 4.0.0-alpha.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. package/CHANGELOG.md +68 -0
  2. package/README.md +105 -157
  3. package/dist/browser-CDLfpTNV.cjs +8 -0
  4. package/dist/browser-DxtIwHNu.js +1227 -0
  5. package/dist/chunk-BcutgqC9.cjs +1 -0
  6. package/dist/chunk-C_CI6nMA.js +13 -0
  7. package/dist/src/annotations/annotations.d.ts +20 -0
  8. package/dist/src/annotations/annotations.d.ts.map +1 -0
  9. package/dist/src/annotations/index.d.ts +2 -0
  10. package/dist/src/annotations/index.d.ts.map +1 -0
  11. package/dist/src/attributes/attribute.d.ts +38 -0
  12. package/dist/src/attributes/attribute.d.ts.map +1 -0
  13. package/dist/src/attributes/attributes.d.ts +43 -0
  14. package/dist/src/attributes/attributes.d.ts.map +1 -0
  15. package/dist/src/attributes/selections.d.ts +16 -0
  16. package/dist/src/attributes/selections.d.ts.map +1 -0
  17. package/dist/src/attributes/value.d.ts +13 -0
  18. package/dist/src/attributes/value.d.ts.map +1 -0
  19. package/dist/src/camera/camera.d.ts +40 -0
  20. package/dist/src/camera/camera.d.ts.map +1 -0
  21. package/dist/src/camera/index.d.ts +4 -0
  22. package/dist/src/camera/index.d.ts.map +1 -0
  23. package/dist/src/camera/position.d.ts +56 -0
  24. package/dist/src/camera/position.d.ts.map +1 -0
  25. package/dist/src/client/client.d.ts +51 -0
  26. package/dist/src/client/client.d.ts.map +1 -0
  27. package/dist/src/client/error.d.ts +26 -0
  28. package/dist/src/client/error.d.ts.map +1 -0
  29. package/dist/src/client/iframe-builder.d.ts +27 -0
  30. package/dist/src/client/iframe-builder.d.ts.map +1 -0
  31. package/dist/src/client/options.d.ts +19 -0
  32. package/dist/src/client/options.d.ts.map +1 -0
  33. package/dist/src/client/ready-state-tracker.d.ts +13 -0
  34. package/dist/src/client/ready-state-tracker.d.ts.map +1 -0
  35. package/dist/src/client/types.d.ts +19 -0
  36. package/dist/src/client/types.d.ts.map +1 -0
  37. package/dist/src/index.d.ts +12 -0
  38. package/dist/src/index.d.ts.map +1 -0
  39. package/dist/src/snapshot/index.d.ts +3 -0
  40. package/dist/src/snapshot/index.d.ts.map +1 -0
  41. package/dist/src/snapshot/photo.d.ts +47 -0
  42. package/dist/src/snapshot/photo.d.ts.map +1 -0
  43. package/dist/src/snapshot/snapshot.d.ts +30 -0
  44. package/dist/src/snapshot/snapshot.d.ts.map +1 -0
  45. package/dist/src/ui/action-bar.d.ts +18 -0
  46. package/dist/src/ui/action-bar.d.ts.map +1 -0
  47. package/dist/src/ui/camera-controls.d.ts +8 -0
  48. package/dist/src/ui/camera-controls.d.ts.map +1 -0
  49. package/dist/src/ui/controls/attribute-group.d.ts +6 -0
  50. package/dist/src/ui/controls/attribute-group.d.ts.map +1 -0
  51. package/dist/src/ui/event-bus.d.ts +12 -0
  52. package/dist/src/ui/event-bus.d.ts.map +1 -0
  53. package/dist/src/ui/loading.d.ts +43 -0
  54. package/dist/src/ui/loading.d.ts.map +1 -0
  55. package/dist/src/ui/standard-interface.d.ts +42 -0
  56. package/dist/src/ui/standard-interface.d.ts.map +1 -0
  57. package/dist/src/ui/styles.d.ts +3 -0
  58. package/dist/src/ui/styles.d.ts.map +1 -0
  59. package/dist/src/utils/logger.d.ts +11 -0
  60. package/dist/src/utils/logger.d.ts.map +1 -0
  61. package/dist/virtualdisplay.client.cjs.js +311 -2
  62. package/dist/virtualdisplay.client.es.js +2226 -2
  63. package/dist/virtualdisplay.client.umd.js +318 -2
  64. package/package.json +3 -3
  65. package/dist/index.d.ts +0 -415
  66. package/dist/virtualdisplay.client.cjs.js.map +0 -1
  67. package/dist/virtualdisplay.client.es.js.map +0 -1
  68. package/dist/virtualdisplay.client.umd.js.map +0 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,73 @@
1
1
  # Changelog
2
2
 
3
+ ## 4.0.0-alpha.10
4
+
5
+ ### Patch Changes
6
+
7
+ Fix AR button on mobile to launch native AR (Quick Look on iOS, Scene Viewer on Android) instead of the QR modal. Fix fullscreen button on iPhone Safari.
8
+
9
+ ## 4.0.0-alpha.9
10
+
11
+ ### Patch Changes
12
+
13
+ Fix state mix-up when multiple `VirtualdisplayClient` instances are mounted on the same page. Each client now correctly receives only its own server replies, so loading state, mapping, and mutation results no longer cross between viewers.
14
+
15
+ ## 4.0.0-alpha.8
16
+
17
+ ### Minor Changes
18
+
19
+ Add `viewerSettings` option to `ClientOptions`. Pass a partial `ViewerSettings` to override fields like `ar`, `fullscreen`, `cameraControls`, `attributeControls`, or `annotations` without changing the model's metadata.
20
+
21
+ Add annotations API: `client.annotations.setEnabled(enabled)` toggles annotation markers, and `startPlacing()` / `stopPlacing()` / `onPlaced(callback)` enable click-to-place flows for custom annotation editors. New `AnnotationPosition` type is exported.
22
+
23
+ Add `attributeControls` field to `ViewerSettings`. Set to `false` to hide the built-in attribute selector while keeping `client.select()` and `client.onChange()` available.
24
+
25
+ Fix toolbar buttons appearing briefly before the loading indicator clears.
26
+
27
+ Fix annotation markers ignoring `annotations: false` when set via the `viewerSettings` override.
28
+
29
+ Fix loading indicator hanging when model metadata is unavailable.
30
+
31
+ Internal code quality improvements.
32
+
33
+ ## 4.0.0-alpha.7
34
+
35
+ ### Patch Changes
36
+
37
+ Restructure standard interface layout to use corner slots. Camera controls and screenshot button now share a single card when both are enabled.
38
+
39
+ ## 4.0.0-alpha.6
40
+
41
+ ### Patch Changes
42
+
43
+ Fix camera control buttons accumulating clicks correctly.
44
+
45
+ ## 4.0.0-alpha.5
46
+
47
+ ### Patch Changes
48
+
49
+ Internal code quality improvements.
50
+
51
+ Ship complete TypeScript type definitions for all exports.
52
+
53
+ ## 4.0.0-alpha.4
54
+
55
+ ### Minor Changes
56
+
57
+ Add `language` option to `ClientOptions`. Pass a BCP 47 language tag (e.g. `"nl"`, `"de"`) to override the viewer language at initialisation time. Useful when embedding the same model on multiple pages with different languages.
58
+
59
+ Add built-in standard interface: loading indicator, toolbar (screenshot, AR, fullscreen), camera controls, and attribute controls are now rendered automatically inside the viewer container. UI is driven by `viewerSettings` received from the server and requires no manual setup.
60
+
61
+ ### Patch Changes
62
+
63
+ Fix build target: use ESNext in tsconfig to resolve rolldown bundling issues with ES2022 class fields.
64
+
65
+ ## 4.0.0-alpha.2
66
+
67
+ ### Patch Changes
68
+
69
+ Build optimisations.
70
+
3
71
  ## 4.0.0-alpha.1
4
72
 
5
73
  ### Major Changes
package/README.md CHANGED
@@ -3,6 +3,7 @@
3
3
  TypeScript library for embedding interactive 3D product models in web
4
4
  applications.
5
5
 
6
+ - Built-in viewer UI with loading indicator, product controls, and action bar
6
7
  - Simple attribute-based API for product configurators
7
8
  - Server-driven configuration, no client-side mapping needed
8
9
  - Fire-and-forget messaging with automatic state synchronisation
@@ -60,43 +61,19 @@ The 3D server hosts the viewer in an iframe, keeping WebGL complexity isolated
60
61
  from your application. The client library handles all communication via
61
62
  postMessage.
62
63
 
63
- ```mermaid
64
- graph LR
65
- A[Your application] -->|API calls| B[VirtualdisplayClient]
66
- B -->|postMessage| C[3D server iframe]
67
- C -->|Events| B
68
- B -->|State updates| A
69
- ```
64
+ ![Architecture overview](docs/arch.png)
70
65
 
71
- On startup, the server tells the client what is available (attributes, values,
72
- defaults). After that, the client sends commands and the server responds with
73
- results.
74
-
75
- ```mermaid
76
- sequenceDiagram
77
- participant UI as Your UI
78
- participant Client as VirtualdisplayClient
79
- participant Server as 3D server
80
-
81
- UI ->> Client: new VirtualdisplayClient(options)
82
- Client ->> Client: Create iframe
83
- Note right of Client: Outgoing messages queued
84
- Server ->> Client: READY
85
- Note right of Client: Queue flushed
86
- opt UI or camera options configured
87
- Client ->> Server: CONFIG
88
- end
89
- Server ->> Client: MAPPING (attributes + values + defaults)
90
- Client ->> Client: Store attribute definitions
91
- Server ->> Client: MUTATION result (defaults, isInitial: true)
92
- Client ->> UI: onReady + onChange callbacks fire
93
- ```
66
+ On startup, the server sends the client its configuration (viewer settings,
67
+ camera limits) and available product attributes. The loading indicator shows
68
+ progress while the model downloads.
69
+
70
+ ![Startup sequence](docs/startup-sequence.png)
94
71
 
95
72
  1. Client creates iframe; outgoing messages are queued until the server is ready.
96
- 2. Server sends `READY` when its message listener is active; client flushes queue.
97
- 3. `CONFIG` is only sent if UI or camera options were provided in the constructor.
98
- 4. Server sends `MAPPING` with attribute definitions, loads the 3D model, applies defaults.
99
- 5. `onReady` fires after the first initial mutation result arrives.
73
+ 2. Server sends `HANDSHAKE` when its message listener is active; client flushes queue.
74
+ 3. Server sends progress updates while the model downloads. The client displays these in the loading indicator.
75
+ 4. Server sends `CONFIG` with viewer settings and camera limits from model metadata.
76
+ 5. Server sends `MAPPING` with attribute definitions, values, and defaults. `onReady` fires.
100
77
 
101
78
  ## Product configuration
102
79
 
@@ -104,23 +81,7 @@ Configure product options by selecting attribute values. The server defines
104
81
  which attributes exist (e.g. "Color", "Size") and which values each has
105
82
  (e.g. "red", "blue"). You select values; the 3D model updates automatically.
106
83
 
107
- ```mermaid
108
- sequenceDiagram
109
- participant UI as Your UI
110
- participant Client as VirtualdisplayClient
111
- participant Server as 3D server
112
-
113
- UI ->> Client: client.select('Color', 'blue')
114
- Client ->> Server: MUTATION
115
- Note right of Client: Fire-and-forget
116
- Server ->> Server: Apply 3D changes
117
- Server ->> Client: MUTATION result
118
- alt All succeeded
119
- Client ->> UI: onChange callbacks fire
120
- else Some failed
121
- Client ->> UI: onMutationFailed callbacks fire
122
- end
123
- ```
84
+ ![Product configuration sequence](docs/mutation.png)
124
85
 
125
86
  - `select()` returns immediately; the result arrives asynchronously.
126
87
  - Each attribute in the result has its own `success` flag and optional `error`.
@@ -134,8 +95,8 @@ client.select('Color', 'blue');
134
95
  client.select('Size', 'large');
135
96
  ```
136
97
 
137
- Can be called before the server is ready. Mutations are buffered and sent when
138
- the mapping arrives.
98
+ Can be called immediately after construction. Selections are buffered until the
99
+ server handshake completes.
139
100
 
140
101
  ### Tracking changes
141
102
 
@@ -192,22 +153,7 @@ client.onMutationFailed(({ attribute, value }) => {
192
153
  Capture the current 3D view as an image. Useful for product shots, social
193
154
  sharing, or saving configurations.
194
155
 
195
- ```mermaid
196
- sequenceDiagram
197
- participant UI as Your UI
198
- participant Client as VirtualdisplayClient
199
- participant Server as 3D server
200
-
201
- UI ->> Client: client.snapshot.take('photo.png')
202
- Client ->> Server: SNAPSHOT request
203
- alt Success
204
- Server ->> Client: SNAPSHOT data (base64)
205
- Client ->> UI: onDeveloped callback fires
206
- else Failure (e.g. no canvas)
207
- Server ->> Client: SNAPSHOT error
208
- Client ->> UI: onError callback fires
209
- end
210
- ```
156
+ ![Snapshot sequence](docs/snapshot.png)
211
157
 
212
158
  - Filename is validated client-side (extension, no path traversal).
213
159
  - Server always responds, either with image data or an error reason.
@@ -236,21 +182,11 @@ Filename must end with `.png`. The server always returns PNG data.
236
182
 
237
183
  ## Camera
238
184
 
239
- Control the 3D viewer's camera position programmatically. Useful for guided
240
- product tours, preset views, or syncing camera state with your UI.
185
+ The standard interface includes built-in camera controls when they are
186
+ enabled in the Virtualdisplay portal. The camera can also be controlled
187
+ programmatically.
241
188
 
242
- ```mermaid
243
- sequenceDiagram
244
- participant UI as Your UI
245
- participant Client as VirtualdisplayClient
246
- participant Server as 3D server
247
-
248
- UI ->> Client: client.camera.rotate(45).tilt(30).set()
249
- Client ->> Server: CAMERA commands
250
- Server ->> Client: CAMERA position
251
- Client ->> UI: camera.onChange callbacks fire
252
- Note right of Server: Position updates also fire on user<br/>interaction with the 3D viewport
253
- ```
189
+ ![Camera sequence](docs/camera.png)
254
190
 
255
191
  - Commands accumulate via chaining; `.set()` sends them all at once.
256
192
  - `.reset()` sends immediately without chaining.
@@ -263,7 +199,7 @@ sequenceDiagram
263
199
  client.camera.rotate(45).set();
264
200
  client.camera.rotate(90).tilt(45).zoom(150).set();
265
201
 
266
- // Reset to base position (sends immediately)
202
+ // Reset to the default position configured in the portal (sends immediately)
267
203
  client.camera.reset();
268
204
  ```
269
205
 
@@ -283,49 +219,99 @@ console.log(client.cameraPosition.tilt);
283
219
  console.log(client.cameraPosition.zoom);
284
220
  ```
285
221
 
286
- ## UI controls
222
+ ## Annotations
287
223
 
288
- Toggle built-in viewer elements like AR, fullscreen, and the loading indicator.
289
- All are visible by default.
224
+ Annotations are interactive markers placed on the 3D model. They are
225
+ configured and saved in the Virtualdisplay portal. The client library
226
+ exposes APIs to toggle their visibility and to build custom annotation
227
+ editors.
290
228
 
291
- ### Via constructor
229
+ ### Toggling annotations
292
230
 
293
231
  ```typescript
294
- const client = new VirtualdisplayClient({
295
- parent: '#viewer',
296
- license: 'your-license',
297
- model: 'product',
298
- ui: {
299
- arEnabled: false,
300
- loadingIndicatorEnabled: false,
301
- },
232
+ client.annotations.setEnabled(false); // Hide all markers
233
+ client.annotations.setEnabled(true); // Show them again
234
+ ```
235
+
236
+ Visibility can also be controlled via `viewerSettings.annotations` (see below).
237
+
238
+ ### Placing annotations
239
+
240
+ For building a custom annotation editor, the client supports click-to-place
241
+ mode. Enter the mode, listen for the placed position, then exit.
242
+
243
+ ```typescript
244
+ client.annotations.onPlaced((position) => {
245
+ // position has x, y, z coordinates on the model surface
246
+ console.log(position);
302
247
  });
248
+
249
+ // Enter placement mode. The next click on the model fires onPlaced.
250
+ client.annotations.startPlacing();
251
+
252
+ // Cancel placement mode without recording a click.
253
+ client.annotations.stopPlacing();
303
254
  ```
304
255
 
305
- ### At runtime
256
+ The position type is `AnnotationPosition`, exported from the package.
257
+
258
+ ## Standard interface
259
+
260
+ The client renders a complete viewer UI automatically: loading indicator,
261
+ attribute controls, camera controls, and an action bar with AR, fullscreen,
262
+ and screenshot buttons. Each element is shown or hidden based on viewer
263
+ settings configured in the Virtualdisplay portal.
264
+
265
+ ### Available settings
266
+
267
+ | Field | Type | Effect when `false` |
268
+ | ------------------- | --------- | ---------------------------------------------------------------------------------------------- |
269
+ | `ar` | `boolean` | Hides the AR button |
270
+ | `fullscreen` | `boolean` | Hides the fullscreen button |
271
+ | `screenshot` | `boolean` | Hides the screenshot button |
272
+ | `cameraControls` | `boolean` | Hides the camera control buttons |
273
+ | `attributeControls` | `boolean` | Hides the built-in attribute selector. `client.select()` and `client.onChange()` keep working. |
274
+ | `annotations` | `boolean` | Hides all annotation markers |
275
+ | `language` | `string` | Sets the viewer UI language (BCP 47, e.g. `'nl'`, `'en'`, `'de'`) |
276
+
277
+ ### Overriding settings
278
+
279
+ The portal is the recommended place to change these settings: one source of
280
+ truth, and the viewer behaves the same wherever it is embedded.
281
+
282
+ We know there are situations where the portal alone cannot cover the case at
283
+ hand. For those, `ClientOptions.viewerSettings` accepts a partial override of
284
+ the same fields. Use it sparingly: every override is one more place where
285
+ the embedded viewer disagrees with the portal. Omitted fields fall back to
286
+ the metadata value.
287
+
288
+ Any override that differs from the metadata is logged with `console.warn`.
289
+ The warning is always emitted, so the deviation stays traceable when
290
+ something needs explaining.
306
291
 
307
292
  ```typescript
308
- client.viewer.setArEnabled(false);
309
- client.viewer.setFullscreenEnabled(true);
310
- client.viewer.setLoadingIndicatorEnabled(false);
311
-
312
- // Bulk operations
313
- client.viewer.hideAllUI();
314
- client.viewer.showAllUI();
315
- client.viewer.updateUIConfig({ arEnabled: false, fullscreenEnabled: true });
293
+ const client = new VirtualdisplayClient({
294
+ parent: '#product-container',
295
+ license: 'your-license-key',
296
+ model: 'sneaker',
297
+ viewerSettings: {
298
+ cameraControls: false,
299
+ },
300
+ });
316
301
  ```
317
302
 
318
303
  ## Lifecycle
319
304
 
320
305
  ### Ready state
321
306
 
322
- Use `onReady` to know when the 3D model has loaded. For example, to hide
323
- your own loading spinner. It is **not** required before calling `select()` or
324
- `onChange()`.
307
+ Use `onReady` to know when the model and attribute definitions are available.
308
+ Not required before calling `select()` or `onChange()`, those are buffered
309
+ automatically.
325
310
 
326
311
  ```typescript
327
312
  client.onReady(() => {
328
- document.getElementById('loading-spinner').hidden = true;
313
+ const values = client.getValues('Color');
314
+ console.log('Available colours:', values.map(v => v.value));
329
315
  });
330
316
  ```
331
317
 
@@ -338,30 +324,15 @@ client.destroy();
338
324
  ## Constructor options
339
325
 
340
326
  ```typescript
327
+ import type { ViewerSettings } from '@virtualdisplay.io/client';
328
+
341
329
  interface ClientOptions {
342
- parent: string | HTMLElement; // Where to embed the 3D viewer
343
- license: string; // License key from your Virtualdisplay account
344
- model: string; // Which 3D model to load
345
- debug?: boolean; // Shows console logs for troubleshooting
346
- language?: string; // UI language: 'nl', 'en', or 'de' (default: 'nl')
347
-
348
- // UI elements (all visible by default)
349
- ui?: {
350
- arEnabled?: boolean;
351
- fullscreenEnabled?: boolean;
352
- loadingIndicatorEnabled?: boolean;
353
- };
354
-
355
- // Camera behaviour
356
- camera?: {
357
- initialRotate?: number; // Starting view angle (-180 to 180, 0 = front)
358
- initialTilt?: number; // Starting elevation (0 = top view, 90 = side view)
359
- initialZoom?: number; // Starting distance (100 = default, may need adjustment)
360
- minZoom?: number; // Minimum zoom level constraint
361
- maxZoom?: number; // Maximum zoom level constraint
362
- minTilt?: number; // Minimum tilt angle constraint
363
- maxTilt?: number; // Maximum tilt angle constraint
364
- };
330
+ parent: string | HTMLElement; // Where to embed the 3D viewer
331
+ license: string; // License key from your Virtualdisplay account
332
+ model: string; // Which 3D model to load
333
+ debug?: boolean; // Shows console logs for troubleshooting
334
+ language?: string; // Viewer language: 'nl', 'en', or 'de'
335
+ viewerSettings?: Partial<ViewerSettings>; // Override fields from model metadata (see Standard interface)
365
336
  }
366
337
  ```
367
338
 
@@ -370,37 +341,14 @@ interface ClientOptions {
370
341
  The client throws `VirtualdisplayError` for known error conditions:
371
342
 
372
343
  | Code | Meaning |
373
- |-----------------------|--------------------------------------------------|
344
+ | --------------------- | ------------------------------------------------ |
345
+ | `NO_MAPPING` | Attribute data not yet available from the server |
374
346
  | `ATTRIBUTE_NOT_FOUND` | Requested attribute doesn't exist in the mapping |
375
347
  | `VALUE_NOT_FOUND` | Requested value doesn't exist for attribute |
376
348
  | `PARENT_NOT_FOUND` | Parent element for iframe not found |
377
349
  | `INVALID_PARAMETER` | Invalid parameter (e.g. snapshot filename) |
378
350
  | `SNAPSHOT_FAILED` | Server could not capture the snapshot |
379
351
 
380
- ## Real-world example
381
-
382
- ```typescript
383
- const client = new VirtualdisplayClient({
384
- parent: '#product-viewer',
385
- license: 'your-license',
386
- model: 'dining-table',
387
- });
388
-
389
- // Wire up your product option buttons. Selections are buffered until ready.
390
- document.querySelectorAll('.color-option').forEach((button) => {
391
- button.addEventListener('click', () => {
392
- client.select('topMaterial', button.dataset.value);
393
- });
394
- });
395
-
396
- // Keep buttons in sync with 3D state
397
- client.onChange('topMaterial', (selectedValue) => {
398
- document.querySelectorAll('.color-option').forEach((btn) => {
399
- btn.classList.toggle('active', btn.dataset.value === selectedValue.value);
400
- });
401
- });
402
- ```
403
-
404
352
  ## Troubleshooting
405
353
 
406
354
  **Iframe not loading:**
@@ -0,0 +1,8 @@
1
+ const e=require(`./chunk-BcutgqC9.cjs`);var t=e.t(((e,t)=>{t.exports=function(){return typeof Promise==`function`&&Promise.prototype&&Promise.prototype.then}})),n=e.t((e=>{var t,n=[0,26,44,70,100,134,172,196,242,292,346,404,466,532,581,655,733,815,901,991,1085,1156,1258,1364,1474,1588,1706,1828,1921,2051,2185,2323,2465,2611,2761,2876,3034,3196,3362,3532,3706];e.getSymbolSize=function(e){if(!e)throw Error(`"version" cannot be null or undefined`);if(e<1||e>40)throw Error(`"version" should be in range from 1 to 40`);return e*4+17},e.getSymbolTotalCodewords=function(e){return n[e]},e.getBCHDigit=function(e){let t=0;for(;e!==0;)t++,e>>>=1;return t},e.setToSJISFunction=function(e){if(typeof e!=`function`)throw Error(`"toSJISFunc" is not a valid function.`);t=e},e.isKanjiModeEnabled=function(){return t!==void 0},e.toSJIS=function(e){return t(e)}})),r=e.t((e=>{e.L={bit:1},e.M={bit:0},e.Q={bit:3},e.H={bit:2};function t(t){if(typeof t!=`string`)throw Error(`Param is not a string`);switch(t.toLowerCase()){case`l`:case`low`:return e.L;case`m`:case`medium`:return e.M;case`q`:case`quartile`:return e.Q;case`h`:case`high`:return e.H;default:throw Error(`Unknown EC Level: `+t)}}e.isValid=function(e){return e&&e.bit!==void 0&&e.bit>=0&&e.bit<4},e.from=function(n,r){if(e.isValid(n))return n;try{return t(n)}catch{return r}}})),i=e.t(((e,t)=>{function n(){this.buffer=[],this.length=0}n.prototype={get:function(e){let t=Math.floor(e/8);return(this.buffer[t]>>>7-e%8&1)==1},put:function(e,t){for(let n=0;n<t;n++)this.putBit((e>>>t-n-1&1)==1)},getLengthInBits:function(){return this.length},putBit:function(e){let t=Math.floor(this.length/8);this.buffer.length<=t&&this.buffer.push(0),e&&(this.buffer[t]|=128>>>this.length%8),this.length++}},t.exports=n})),a=e.t(((e,t)=>{function n(e){if(!e||e<1)throw Error(`BitMatrix size must be defined and greater than 0`);this.size=e,this.data=new Uint8Array(e*e),this.reservedBit=new Uint8Array(e*e)}n.prototype.set=function(e,t,n,r){let i=e*this.size+t;this.data[i]=n,r&&(this.reservedBit[i]=!0)},n.prototype.get=function(e,t){return this.data[e*this.size+t]},n.prototype.xor=function(e,t,n){this.data[e*this.size+t]^=n},n.prototype.isReserved=function(e,t){return this.reservedBit[e*this.size+t]},t.exports=n})),o=e.t((e=>{var t=n().getSymbolSize;e.getRowColCoords=function(e){if(e===1)return[];let n=Math.floor(e/7)+2,r=t(e),i=r===145?26:Math.ceil((r-13)/(2*n-2))*2,a=[r-7];for(let e=1;e<n-1;e++)a[e]=a[e-1]-i;return a.push(6),a.reverse()},e.getPositions=function(t){let n=[],r=e.getRowColCoords(t),i=r.length;for(let e=0;e<i;e++)for(let t=0;t<i;t++)e===0&&t===0||e===0&&t===i-1||e===i-1&&t===0||n.push([r[e],r[t]]);return n}})),s=e.t((e=>{var t=n().getSymbolSize,r=7;e.getPositions=function(e){let n=t(e);return[[0,0],[n-r,0],[0,n-r]]}})),c=e.t((e=>{e.Patterns={PATTERN000:0,PATTERN001:1,PATTERN010:2,PATTERN011:3,PATTERN100:4,PATTERN101:5,PATTERN110:6,PATTERN111:7};var t={N1:3,N2:3,N3:40,N4:10};e.isValid=function(e){return e!=null&&e!==``&&!isNaN(e)&&e>=0&&e<=7},e.from=function(t){return e.isValid(t)?parseInt(t,10):void 0},e.getPenaltyN1=function(e){let n=e.size,r=0,i=0,a=0,o=null,s=null;for(let c=0;c<n;c++){i=a=0,o=s=null;for(let l=0;l<n;l++){let n=e.get(c,l);n===o?i++:(i>=5&&(r+=t.N1+(i-5)),o=n,i=1),n=e.get(l,c),n===s?a++:(a>=5&&(r+=t.N1+(a-5)),s=n,a=1)}i>=5&&(r+=t.N1+(i-5)),a>=5&&(r+=t.N1+(a-5))}return r},e.getPenaltyN2=function(e){let n=e.size,r=0;for(let t=0;t<n-1;t++)for(let i=0;i<n-1;i++){let n=e.get(t,i)+e.get(t,i+1)+e.get(t+1,i)+e.get(t+1,i+1);(n===4||n===0)&&r++}return r*t.N2},e.getPenaltyN3=function(e){let n=e.size,r=0,i=0,a=0;for(let t=0;t<n;t++){i=a=0;for(let o=0;o<n;o++)i=i<<1&2047|e.get(t,o),o>=10&&(i===1488||i===93)&&r++,a=a<<1&2047|e.get(o,t),o>=10&&(a===1488||a===93)&&r++}return r*t.N3},e.getPenaltyN4=function(e){let n=0,r=e.data.length;for(let t=0;t<r;t++)n+=e.data[t];return Math.abs(Math.ceil(n*100/r/5)-10)*t.N4};function n(t,n,r){switch(t){case e.Patterns.PATTERN000:return(n+r)%2==0;case e.Patterns.PATTERN001:return n%2==0;case e.Patterns.PATTERN010:return r%3==0;case e.Patterns.PATTERN011:return(n+r)%3==0;case e.Patterns.PATTERN100:return(Math.floor(n/2)+Math.floor(r/3))%2==0;case e.Patterns.PATTERN101:return n*r%2+n*r%3==0;case e.Patterns.PATTERN110:return(n*r%2+n*r%3)%2==0;case e.Patterns.PATTERN111:return(n*r%3+(n+r)%2)%2==0;default:throw Error(`bad maskPattern:`+t)}}e.applyMask=function(e,t){let r=t.size;for(let i=0;i<r;i++)for(let a=0;a<r;a++)t.isReserved(a,i)||t.xor(a,i,n(e,a,i))},e.getBestMask=function(t,n){let r=Object.keys(e.Patterns).length,i=0,a=1/0;for(let o=0;o<r;o++){n(o),e.applyMask(o,t);let r=e.getPenaltyN1(t)+e.getPenaltyN2(t)+e.getPenaltyN3(t)+e.getPenaltyN4(t);e.applyMask(o,t),r<a&&(a=r,i=o)}return i}})),l=e.t((e=>{var t=r(),n=[1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,4,1,2,4,4,2,4,4,4,2,4,6,5,2,4,6,6,2,5,8,8,4,5,8,8,4,5,8,11,4,8,10,11,4,9,12,16,4,9,16,16,6,10,12,18,6,10,17,16,6,11,16,19,6,13,18,21,7,14,21,25,8,16,20,25,8,17,23,25,9,17,23,34,9,18,25,30,10,20,27,32,12,21,29,35,12,23,34,37,12,25,34,40,13,26,35,42,14,28,38,45,15,29,40,48,16,31,43,51,17,33,45,54,18,35,48,57,19,37,51,60,19,38,53,63,20,40,56,66,21,43,59,70,22,45,62,74,24,47,65,77,25,49,68,81],i=[7,10,13,17,10,16,22,28,15,26,36,44,20,36,52,64,26,48,72,88,36,64,96,112,40,72,108,130,48,88,132,156,60,110,160,192,72,130,192,224,80,150,224,264,96,176,260,308,104,198,288,352,120,216,320,384,132,240,360,432,144,280,408,480,168,308,448,532,180,338,504,588,196,364,546,650,224,416,600,700,224,442,644,750,252,476,690,816,270,504,750,900,300,560,810,960,312,588,870,1050,336,644,952,1110,360,700,1020,1200,390,728,1050,1260,420,784,1140,1350,450,812,1200,1440,480,868,1290,1530,510,924,1350,1620,540,980,1440,1710,570,1036,1530,1800,570,1064,1590,1890,600,1120,1680,1980,630,1204,1770,2100,660,1260,1860,2220,720,1316,1950,2310,750,1372,2040,2430];e.getBlocksCount=function(e,r){switch(r){case t.L:return n[(e-1)*4+0];case t.M:return n[(e-1)*4+1];case t.Q:return n[(e-1)*4+2];case t.H:return n[(e-1)*4+3];default:return}},e.getTotalCodewordsCount=function(e,n){switch(n){case t.L:return i[(e-1)*4+0];case t.M:return i[(e-1)*4+1];case t.Q:return i[(e-1)*4+2];case t.H:return i[(e-1)*4+3];default:return}}})),u=e.t((e=>{var t=new Uint8Array(512),n=new Uint8Array(256);(function(){let e=1;for(let r=0;r<255;r++)t[r]=e,n[e]=r,e<<=1,e&256&&(e^=285);for(let e=255;e<512;e++)t[e]=t[e-255]})(),e.log=function(e){if(e<1)throw Error(`log(`+e+`)`);return n[e]},e.exp=function(e){return t[e]},e.mul=function(e,r){return e===0||r===0?0:t[n[e]+n[r]]}})),d=e.t((e=>{var t=u();e.mul=function(e,n){let r=new Uint8Array(e.length+n.length-1);for(let i=0;i<e.length;i++)for(let a=0;a<n.length;a++)r[i+a]^=t.mul(e[i],n[a]);return r},e.mod=function(e,n){let r=new Uint8Array(e);for(;r.length-n.length>=0;){let e=r[0];for(let i=0;i<n.length;i++)r[i]^=t.mul(n[i],e);let i=0;for(;i<r.length&&r[i]===0;)i++;r=r.slice(i)}return r},e.generateECPolynomial=function(n){let r=new Uint8Array([1]);for(let i=0;i<n;i++)r=e.mul(r,new Uint8Array([1,t.exp(i)]));return r}})),f=e.t(((e,t)=>{var n=d();function r(e){this.genPoly=void 0,this.degree=e,this.degree&&this.initialize(this.degree)}r.prototype.initialize=function(e){this.degree=e,this.genPoly=n.generateECPolynomial(this.degree)},r.prototype.encode=function(e){if(!this.genPoly)throw Error(`Encoder not initialized`);let t=new Uint8Array(e.length+this.degree);t.set(e);let r=n.mod(t,this.genPoly),i=this.degree-r.length;if(i>0){let e=new Uint8Array(this.degree);return e.set(r,i),e}return r},t.exports=r})),p=e.t((e=>{e.isValid=function(e){return!isNaN(e)&&e>=1&&e<=40}})),m=e.t((e=>{var t=`[0-9]+`,n=`[A-Z $%*+\\-./:]+`,r=`(?:[u3000-u303F]|[u3040-u309F]|[u30A0-u30FF]|[uFF00-uFFEF]|[u4E00-u9FAF]|[u2605-u2606]|[u2190-u2195]|u203B|[u2010u2015u2018u2019u2025u2026u201Cu201Du2225u2260]|[u0391-u0451]|[u00A7u00A8u00B1u00B4u00D7u00F7])+`;r=r.replace(/u/g,`\\u`);var i=`(?:(?![A-Z0-9 $%*+\\-./:]|`+r+`)(?:.|[\r
2
+ ]))+`;e.KANJI=new RegExp(r,`g`),e.BYTE_KANJI=RegExp(`[^A-Z0-9 $%*+\\-./:]+`,`g`),e.BYTE=new RegExp(i,`g`),e.NUMERIC=new RegExp(t,`g`),e.ALPHANUMERIC=new RegExp(n,`g`);var a=RegExp(`^`+r+`$`),o=RegExp(`^`+t+`$`),s=RegExp(`^[A-Z0-9 $%*+\\-./:]+$`);e.testKanji=function(e){return a.test(e)},e.testNumeric=function(e){return o.test(e)},e.testAlphanumeric=function(e){return s.test(e)}})),h=e.t((e=>{var t=p(),n=m();e.NUMERIC={id:`Numeric`,bit:1,ccBits:[10,12,14]},e.ALPHANUMERIC={id:`Alphanumeric`,bit:2,ccBits:[9,11,13]},e.BYTE={id:`Byte`,bit:4,ccBits:[8,16,16]},e.KANJI={id:`Kanji`,bit:8,ccBits:[8,10,12]},e.MIXED={bit:-1},e.getCharCountIndicator=function(e,n){if(!e.ccBits)throw Error(`Invalid mode: `+e);if(!t.isValid(n))throw Error(`Invalid version: `+n);return n>=1&&n<10?e.ccBits[0]:n<27?e.ccBits[1]:e.ccBits[2]},e.getBestModeForData=function(t){return n.testNumeric(t)?e.NUMERIC:n.testAlphanumeric(t)?e.ALPHANUMERIC:n.testKanji(t)?e.KANJI:e.BYTE},e.toString=function(e){if(e&&e.id)return e.id;throw Error(`Invalid mode`)},e.isValid=function(e){return e&&e.bit&&e.ccBits};function r(t){if(typeof t!=`string`)throw Error(`Param is not a string`);switch(t.toLowerCase()){case`numeric`:return e.NUMERIC;case`alphanumeric`:return e.ALPHANUMERIC;case`kanji`:return e.KANJI;case`byte`:return e.BYTE;default:throw Error(`Unknown mode: `+t)}}e.from=function(t,n){if(e.isValid(t))return t;try{return r(t)}catch{return n}}})),g=e.t((e=>{var t=n(),i=l(),a=r(),o=h(),s=p(),c=7973,u=t.getBCHDigit(c);function d(t,n,r){for(let i=1;i<=40;i++)if(n<=e.getCapacity(i,r,t))return i}function f(e,t){return o.getCharCountIndicator(e,t)+4}function m(e,t){let n=0;return e.forEach(function(e){let r=f(e.mode,t);n+=r+e.getBitsLength()}),n}function g(t,n){for(let r=1;r<=40;r++)if(m(t,r)<=e.getCapacity(r,n,o.MIXED))return r}e.from=function(e,t){return s.isValid(e)?parseInt(e,10):t},e.getCapacity=function(e,n,r){if(!s.isValid(e))throw Error(`Invalid QR Code version`);r===void 0&&(r=o.BYTE);let a=(t.getSymbolTotalCodewords(e)-i.getTotalCodewordsCount(e,n))*8;if(r===o.MIXED)return a;let c=a-f(r,e);switch(r){case o.NUMERIC:return Math.floor(c/10*3);case o.ALPHANUMERIC:return Math.floor(c/11*2);case o.KANJI:return Math.floor(c/13);case o.BYTE:default:return Math.floor(c/8)}},e.getBestVersionForData=function(e,t){let n,r=a.from(t,a.M);if(Array.isArray(e)){if(e.length>1)return g(e,r);if(e.length===0)return 1;n=e[0]}else n=e;return d(n.mode,n.getLength(),r)},e.getEncodedBits=function(e){if(!s.isValid(e)||e<7)throw Error(`Invalid QR Code version`);let n=e<<12;for(;t.getBCHDigit(n)-u>=0;)n^=c<<t.getBCHDigit(n)-u;return e<<12|n}})),_=e.t((e=>{var t=n(),r=1335,i=21522,a=t.getBCHDigit(r);e.getEncodedBits=function(e,n){let o=e.bit<<3|n,s=o<<10;for(;t.getBCHDigit(s)-a>=0;)s^=r<<t.getBCHDigit(s)-a;return(o<<10|s)^i}})),v=e.t(((e,t)=>{var n=h();function r(e){this.mode=n.NUMERIC,this.data=e.toString()}r.getBitsLength=function(e){return 10*Math.floor(e/3)+(e%3?e%3*3+1:0)},r.prototype.getLength=function(){return this.data.length},r.prototype.getBitsLength=function(){return r.getBitsLength(this.data.length)},r.prototype.write=function(e){let t,n,r;for(t=0;t+3<=this.data.length;t+=3)n=this.data.substr(t,3),r=parseInt(n,10),e.put(r,10);let i=this.data.length-t;i>0&&(n=this.data.substr(t),r=parseInt(n,10),e.put(r,i*3+1))},t.exports=r})),y=e.t(((e,t)=>{var n=h(),r=`0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:`.split(``);function i(e){this.mode=n.ALPHANUMERIC,this.data=e}i.getBitsLength=function(e){return 11*Math.floor(e/2)+e%2*6},i.prototype.getLength=function(){return this.data.length},i.prototype.getBitsLength=function(){return i.getBitsLength(this.data.length)},i.prototype.write=function(e){let t;for(t=0;t+2<=this.data.length;t+=2){let n=r.indexOf(this.data[t])*45;n+=r.indexOf(this.data[t+1]),e.put(n,11)}this.data.length%2&&e.put(r.indexOf(this.data[t]),6)},t.exports=i})),b=e.t(((e,t)=>{var n=h();function r(e){this.mode=n.BYTE,typeof e==`string`?this.data=new TextEncoder().encode(e):this.data=new Uint8Array(e)}r.getBitsLength=function(e){return e*8},r.prototype.getLength=function(){return this.data.length},r.prototype.getBitsLength=function(){return r.getBitsLength(this.data.length)},r.prototype.write=function(e){for(let t=0,n=this.data.length;t<n;t++)e.put(this.data[t],8)},t.exports=r})),x=e.t(((e,t)=>{var r=h(),i=n();function a(e){this.mode=r.KANJI,this.data=e}a.getBitsLength=function(e){return e*13},a.prototype.getLength=function(){return this.data.length},a.prototype.getBitsLength=function(){return a.getBitsLength(this.data.length)},a.prototype.write=function(e){let t;for(t=0;t<this.data.length;t++){let n=i.toSJIS(this.data[t]);if(n>=33088&&n<=40956)n-=33088;else if(n>=57408&&n<=60351)n-=49472;else throw Error(`Invalid SJIS character: `+this.data[t]+`
3
+ Make sure your charset is UTF-8`);n=(n>>>8&255)*192+(n&255),e.put(n,13)}},t.exports=a})),S=e.t(((e,t)=>{var n={single_source_shortest_paths:function(e,t,r){var i={},a={};a[t]=0;var o=n.PriorityQueue.make();o.push(t,0);for(var s,c,l,u,d,f,p,m,h;!o.empty();)for(l in s=o.pop(),c=s.value,u=s.cost,d=e[c]||{},d)d.hasOwnProperty(l)&&(f=d[l],p=u+f,m=a[l],h=a[l]===void 0,(h||m>p)&&(a[l]=p,o.push(l,p),i[l]=c));if(r!==void 0&&a[r]===void 0){var g=[`Could not find a path from `,t,` to `,r,`.`].join(``);throw Error(g)}return i},extract_shortest_path_from_predecessor_list:function(e,t){for(var n=[],r=t;r;)n.push(r),e[r],r=e[r];return n.reverse(),n},find_path:function(e,t,r){var i=n.single_source_shortest_paths(e,t,r);return n.extract_shortest_path_from_predecessor_list(i,r)},PriorityQueue:{make:function(e){var t=n.PriorityQueue,r={},i;for(i in e||={},t)t.hasOwnProperty(i)&&(r[i]=t[i]);return r.queue=[],r.sorter=e.sorter||t.default_sorter,r},default_sorter:function(e,t){return e.cost-t.cost},push:function(e,t){var n={value:e,cost:t};this.queue.push(n),this.queue.sort(this.sorter)},pop:function(){return this.queue.shift()},empty:function(){return this.queue.length===0}}};t!==void 0&&(t.exports=n)})),C=e.t((e=>{var t=h(),r=v(),i=y(),a=b(),o=x(),s=m(),c=n(),l=S();function u(e){return unescape(encodeURIComponent(e)).length}function d(e,t,n){let r=[],i;for(;(i=e.exec(n))!==null;)r.push({data:i[0],index:i.index,mode:t,length:i[0].length});return r}function f(e){let n=d(s.NUMERIC,t.NUMERIC,e),r=d(s.ALPHANUMERIC,t.ALPHANUMERIC,e),i,a;return c.isKanjiModeEnabled()?(i=d(s.BYTE,t.BYTE,e),a=d(s.KANJI,t.KANJI,e)):(i=d(s.BYTE_KANJI,t.BYTE,e),a=[]),n.concat(r,i,a).sort(function(e,t){return e.index-t.index}).map(function(e){return{data:e.data,mode:e.mode,length:e.length}})}function p(e,n){switch(n){case t.NUMERIC:return r.getBitsLength(e);case t.ALPHANUMERIC:return i.getBitsLength(e);case t.KANJI:return o.getBitsLength(e);case t.BYTE:return a.getBitsLength(e)}}function g(e){return e.reduce(function(e,t){let n=e.length-1>=0?e[e.length-1]:null;return n&&n.mode===t.mode?(e[e.length-1].data+=t.data,e):(e.push(t),e)},[])}function _(e){let n=[];for(let r=0;r<e.length;r++){let i=e[r];switch(i.mode){case t.NUMERIC:n.push([i,{data:i.data,mode:t.ALPHANUMERIC,length:i.length},{data:i.data,mode:t.BYTE,length:i.length}]);break;case t.ALPHANUMERIC:n.push([i,{data:i.data,mode:t.BYTE,length:i.length}]);break;case t.KANJI:n.push([i,{data:i.data,mode:t.BYTE,length:u(i.data)}]);break;case t.BYTE:n.push([{data:i.data,mode:t.BYTE,length:u(i.data)}])}}return n}function C(e,n){let r={},i={start:{}},a=[`start`];for(let o=0;o<e.length;o++){let s=e[o],c=[];for(let e=0;e<s.length;e++){let l=s[e],u=``+o+e;c.push(u),r[u]={node:l,lastCount:0},i[u]={};for(let e=0;e<a.length;e++){let o=a[e];r[o]&&r[o].node.mode===l.mode?(i[o][u]=p(r[o].lastCount+l.length,l.mode)-p(r[o].lastCount,l.mode),r[o].lastCount+=l.length):(r[o]&&(r[o].lastCount=l.length),i[o][u]=p(l.length,l.mode)+4+t.getCharCountIndicator(l.mode,n))}}a=c}for(let e=0;e<a.length;e++)i[a[e]].end=0;return{map:i,table:r}}function w(e,n){let s,l=t.getBestModeForData(e);if(s=t.from(n,l),s!==t.BYTE&&s.bit<l.bit)throw Error(`"`+e+`" cannot be encoded with mode `+t.toString(s)+`.
4
+ Suggested mode is: `+t.toString(l));switch(s===t.KANJI&&!c.isKanjiModeEnabled()&&(s=t.BYTE),s){case t.NUMERIC:return new r(e);case t.ALPHANUMERIC:return new i(e);case t.KANJI:return new o(e);case t.BYTE:return new a(e)}}e.fromArray=function(e){return e.reduce(function(e,t){return typeof t==`string`?e.push(w(t,null)):t.data&&e.push(w(t.data,t.mode)),e},[])},e.fromString=function(t,n){let r=C(_(f(t,c.isKanjiModeEnabled())),n),i=l.find_path(r.map,`start`,`end`),a=[];for(let e=1;e<i.length-1;e++)a.push(r.table[i[e]].node);return e.fromArray(g(a))},e.rawSplit=function(t){return e.fromArray(f(t,c.isKanjiModeEnabled()))}})),w=e.t((e=>{var t=n(),u=r(),d=i(),p=a(),m=o(),v=s(),y=c(),b=l(),x=f(),S=g(),w=_(),T=h(),E=C();function D(e,t){let n=e.size,r=v.getPositions(t);for(let t=0;t<r.length;t++){let i=r[t][0],a=r[t][1];for(let t=-1;t<=7;t++)if(!(i+t<=-1||n<=i+t))for(let r=-1;r<=7;r++)a+r<=-1||n<=a+r||(t>=0&&t<=6&&(r===0||r===6)||r>=0&&r<=6&&(t===0||t===6)||t>=2&&t<=4&&r>=2&&r<=4?e.set(i+t,a+r,!0,!0):e.set(i+t,a+r,!1,!0))}}function O(e){let t=e.size;for(let n=8;n<t-8;n++){let t=n%2==0;e.set(n,6,t,!0),e.set(6,n,t,!0)}}function k(e,t){let n=m.getPositions(t);for(let t=0;t<n.length;t++){let r=n[t][0],i=n[t][1];for(let t=-2;t<=2;t++)for(let n=-2;n<=2;n++)t===-2||t===2||n===-2||n===2||t===0&&n===0?e.set(r+t,i+n,!0,!0):e.set(r+t,i+n,!1,!0)}}function A(e,t){let n=e.size,r=S.getEncodedBits(t),i,a,o;for(let t=0;t<18;t++)i=Math.floor(t/3),a=t%3+n-8-3,o=(r>>t&1)==1,e.set(i,a,o,!0),e.set(a,i,o,!0)}function j(e,t,n){let r=e.size,i=w.getEncodedBits(t,n),a,o;for(a=0;a<15;a++)o=(i>>a&1)==1,a<6?e.set(a,8,o,!0):a<8?e.set(a+1,8,o,!0):e.set(r-15+a,8,o,!0),a<8?e.set(8,r-a-1,o,!0):a<9?e.set(8,15-a-1+1,o,!0):e.set(8,15-a-1,o,!0);e.set(r-8,8,1,!0)}function M(e,t){let n=e.size,r=-1,i=n-1,a=7,o=0;for(let s=n-1;s>0;s-=2)for(s===6&&s--;;){for(let n=0;n<2;n++)if(!e.isReserved(i,s-n)){let r=!1;o<t.length&&(r=(t[o]>>>a&1)==1),e.set(i,s-n,r),a--,a===-1&&(o++,a=7)}if(i+=r,i<0||n<=i){i-=r,r=-r;break}}}function N(e,n,r){let i=new d;r.forEach(function(t){i.put(t.mode.bit,4),i.put(t.getLength(),T.getCharCountIndicator(t.mode,e)),t.write(i)});let a=(t.getSymbolTotalCodewords(e)-b.getTotalCodewordsCount(e,n))*8;for(i.getLengthInBits()+4<=a&&i.put(0,4);i.getLengthInBits()%8!=0;)i.putBit(0);let o=(a-i.getLengthInBits())/8;for(let e=0;e<o;e++)i.put(e%2?17:236,8);return P(i,e,n)}function P(e,n,r){let i=t.getSymbolTotalCodewords(n),a=i-b.getTotalCodewordsCount(n,r),o=b.getBlocksCount(n,r),s=o-i%o,c=Math.floor(i/o),l=Math.floor(a/o),u=l+1,d=c-l,f=new x(d),p=0,m=Array(o),h=Array(o),g=0,_=new Uint8Array(e.buffer);for(let e=0;e<o;e++){let t=e<s?l:u;m[e]=_.slice(p,p+t),h[e]=f.encode(m[e]),p+=t,g=Math.max(g,t)}let v=new Uint8Array(i),y=0,S,C;for(S=0;S<g;S++)for(C=0;C<o;C++)S<m[C].length&&(v[y++]=m[C][S]);for(S=0;S<d;S++)for(C=0;C<o;C++)v[y++]=h[C][S];return v}function F(e,n,r,i){let a;if(Array.isArray(e))a=E.fromArray(e);else if(typeof e==`string`){let t=n;if(!t){let n=E.rawSplit(e);t=S.getBestVersionForData(n,r)}a=E.fromString(e,t||40)}else throw Error(`Invalid data`);let o=S.getBestVersionForData(a,r);if(!o)throw Error(`The amount of data is too big to be stored in a QR Code`);if(!n)n=o;else if(n<o)throw Error(`
5
+ The chosen QR Code version cannot contain this amount of data.
6
+ Minimum version required to store current data is: `+o+`.
7
+ `);let s=N(n,r,a),c=new p(t.getSymbolSize(n));return D(c,n),O(c),k(c,n),j(c,r,0),n>=7&&A(c,n),M(c,s),isNaN(i)&&(i=y.getBestMask(c,j.bind(null,c,r))),y.applyMask(i,c),j(c,r,i),{modules:c,version:n,errorCorrectionLevel:r,maskPattern:i,segments:a}}e.create=function(e,n){if(e===void 0||e===``)throw Error(`No input text`);let r=u.M,i,a;return n!==void 0&&(r=u.from(n.errorCorrectionLevel,u.M),i=S.from(n.version),a=y.from(n.maskPattern),n.toSJISFunc&&t.setToSJISFunction(n.toSJISFunc)),F(e,i,r,a)}})),T=e.t((e=>{function t(e){if(typeof e==`number`&&(e=e.toString()),typeof e!=`string`)throw Error(`Color should be defined as hex string`);let t=e.slice().replace(`#`,``).split(``);if(t.length<3||t.length===5||t.length>8)throw Error(`Invalid hex color: `+e);(t.length===3||t.length===4)&&(t=Array.prototype.concat.apply([],t.map(function(e){return[e,e]}))),t.length===6&&t.push(`F`,`F`);let n=parseInt(t.join(``),16);return{r:n>>24&255,g:n>>16&255,b:n>>8&255,a:n&255,hex:`#`+t.slice(0,6).join(``)}}e.getOptions=function(e){e||={},e.color||={};let n=e.margin===void 0||e.margin===null||e.margin<0?4:e.margin,r=e.width&&e.width>=21?e.width:void 0,i=e.scale||4;return{width:r,scale:r?4:i,margin:n,color:{dark:t(e.color.dark||`#000000ff`),light:t(e.color.light||`#ffffffff`)},type:e.type,rendererOpts:e.rendererOpts||{}}},e.getScale=function(e,t){return t.width&&t.width>=e+t.margin*2?t.width/(e+t.margin*2):t.scale},e.getImageWidth=function(t,n){let r=e.getScale(t,n);return Math.floor((t+n.margin*2)*r)},e.qrToImageData=function(t,n,r){let i=n.modules.size,a=n.modules.data,o=e.getScale(i,r),s=Math.floor((i+r.margin*2)*o),c=r.margin*o,l=[r.color.light,r.color.dark];for(let e=0;e<s;e++)for(let n=0;n<s;n++){let u=(e*s+n)*4,d=r.color.light;if(e>=c&&n>=c&&e<s-c&&n<s-c){let t=Math.floor((e-c)/o),r=Math.floor((n-c)/o);d=l[+!!a[t*i+r]]}t[u++]=d.r,t[u++]=d.g,t[u++]=d.b,t[u]=d.a}}})),E=e.t((e=>{var t=T();function n(e,t,n){e.clearRect(0,0,t.width,t.height),t.style||={},t.height=n,t.width=n,t.style.height=n+`px`,t.style.width=n+`px`}function r(){try{return document.createElement(`canvas`)}catch{throw Error(`You need to specify a canvas element`)}}e.render=function(e,i,a){let o=a,s=i;o===void 0&&(!i||!i.getContext)&&(o=i,i=void 0),i||(s=r()),o=t.getOptions(o);let c=t.getImageWidth(e.modules.size,o),l=s.getContext(`2d`),u=l.createImageData(c,c);return t.qrToImageData(u.data,e,o),n(l,s,c),l.putImageData(u,0,0),s},e.renderToDataURL=function(t,n,r){let i=r;i===void 0&&(!n||!n.getContext)&&(i=n,n=void 0),i||={};let a=e.render(t,n,i),o=i.type||`image/png`,s=i.rendererOpts||{};return a.toDataURL(o,s.quality)}})),D=e.t((e=>{var t=T();function n(e,t){let n=e.a/255,r=t+`="`+e.hex+`"`;return n<1?r+` `+t+`-opacity="`+n.toFixed(2).slice(1)+`"`:r}function r(e,t,n){let r=e+t;return n!==void 0&&(r+=` `+n),r}function i(e,t,n){let i=``,a=0,o=!1,s=0;for(let c=0;c<e.length;c++){let l=Math.floor(c%t),u=Math.floor(c/t);!l&&!o&&(o=!0),e[c]?(s++,c>0&&l>0&&e[c-1]||(i+=o?r(`M`,l+n,.5+u+n):r(`m`,a,0),a=0,o=!1),l+1<t&&e[c+1]||(i+=r(`h`,s),s=0)):a++}return i}e.render=function(e,r,a){let o=t.getOptions(r),s=e.modules.size,c=e.modules.data,l=s+o.margin*2,u=o.color.light.a?`<path `+n(o.color.light,`fill`)+` d="M0 0h`+l+`v`+l+`H0z"/>`:``,d=`<path `+n(o.color.dark,`stroke`)+` d="`+i(c,s,o.margin)+`"/>`,f=`viewBox="0 0 `+l+` `+l+`"`,p=`<svg xmlns="http://www.w3.org/2000/svg" `+(o.width?`width="`+o.width+`" height="`+o.width+`" `:``)+f+` shape-rendering="crispEdges">`+u+d+`</svg>
8
+ `;return typeof a==`function`&&a(null,p),p}})),O=e.t((e=>{var n=t(),r=w(),i=E(),a=D();function o(e,t,i,a,o){let s=[].slice.call(arguments,1),c=s.length,l=typeof s[c-1]==`function`;if(!l&&!n())throw Error(`Callback required as last argument`);if(l){if(c<2)throw Error(`Too few arguments provided`);c===2?(o=i,i=t,t=a=void 0):c===3&&(t.getContext&&o===void 0?(o=a,a=void 0):(o=a,a=i,i=t,t=void 0))}else{if(c<1)throw Error(`Too few arguments provided`);return c===1?(i=t,t=a=void 0):c===2&&!t.getContext&&(a=i,i=t,t=void 0),new Promise(function(n,o){try{n(e(r.create(i,a),t,a))}catch(e){o(e)}})}try{let n=r.create(i,a);o(null,e(n,t,a))}catch(e){o(e)}}e.create=r.create,e.toCanvas=o.bind(null,i.render),e.toDataURL=o.bind(null,i.renderToDataURL),e.toString=o.bind(null,function(e,t,n){return a.render(e,n)})}));Object.defineProperty(exports,`default`,{enumerable:!0,get:function(){return O()}});