@hexpro/qr-code-studio 0.0.0-stage → 0.1.1
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/CHANGELOG.md +53 -0
- package/LICENSE +21 -0
- package/README.md +62 -2
- package/dist/app/bulk.d.ts +21 -0
- package/dist/app/bulk.d.ts.map +1 -0
- package/dist/app/bulk.js +564 -0
- package/dist/app/bulk.js.map +1 -0
- package/dist/app/check.d.ts +23 -0
- package/dist/app/check.d.ts.map +1 -0
- package/dist/app/check.js +306 -0
- package/dist/app/check.js.map +1 -0
- package/dist/app/content.d.ts +19 -0
- package/dist/app/content.d.ts.map +1 -0
- package/dist/app/content.js +634 -0
- package/dist/app/content.js.map +1 -0
- package/dist/app/context.d.ts +25 -0
- package/dist/app/context.d.ts.map +1 -0
- package/dist/app/context.js +11 -0
- package/dist/app/context.js.map +1 -0
- package/dist/app/controls.d.ts +95 -0
- package/dist/app/controls.d.ts.map +1 -0
- package/dist/app/controls.js +278 -0
- package/dist/app/controls.js.map +1 -0
- package/dist/app/design-panels.d.ts +27 -0
- package/dist/app/design-panels.d.ts.map +1 -0
- package/dist/app/design-panels.js +1196 -0
- package/dist/app/design-panels.js.map +1 -0
- package/dist/app/dom.d.ts +74 -0
- package/dist/app/dom.d.ts.map +1 -0
- package/dist/app/dom.js +129 -0
- package/dist/app/dom.js.map +1 -0
- package/dist/app/images.d.ts +22 -0
- package/dist/app/images.d.ts.map +1 -0
- package/dist/app/images.js +50 -0
- package/dist/app/images.js.map +1 -0
- package/dist/app/library-view.d.ts +24 -0
- package/dist/app/library-view.d.ts.map +1 -0
- package/dist/app/library-view.js +260 -0
- package/dist/app/library-view.js.map +1 -0
- package/dist/app/main.d.ts +17 -0
- package/dist/app/main.d.ts.map +1 -0
- package/dist/app/main.js +518 -0
- package/dist/app/main.js.map +1 -0
- package/dist/app/measure.d.ts +26 -0
- package/dist/app/measure.d.ts.map +1 -0
- package/dist/app/measure.js +53 -0
- package/dist/app/measure.js.map +1 -0
- package/dist/app/proof.d.ts +30 -0
- package/dist/app/proof.d.ts.map +1 -0
- package/dist/app/proof.js +378 -0
- package/dist/app/proof.js.map +1 -0
- package/dist/app/save.d.ts +27 -0
- package/dist/app/save.d.ts.map +1 -0
- package/dist/app/save.js +331 -0
- package/dist/app/save.js.map +1 -0
- package/dist/app/scan.d.ts +25 -0
- package/dist/app/scan.d.ts.map +1 -0
- package/dist/app/scan.js +421 -0
- package/dist/app/scan.js.map +1 -0
- package/dist/app/shortcuts.d.ts +12 -0
- package/dist/app/shortcuts.d.ts.map +1 -0
- package/dist/app/shortcuts.js +17 -0
- package/dist/app/shortcuts.js.map +1 -0
- package/dist/app/text.d.ts +22 -0
- package/dist/app/text.d.ts.map +1 -0
- package/dist/app/text.js +50 -0
- package/dist/app/text.js.map +1 -0
- package/dist/batch/csv.d.ts +56 -0
- package/dist/batch/csv.d.ts.map +1 -0
- package/dist/batch/csv.js +327 -0
- package/dist/batch/csv.js.map +1 -0
- package/dist/batch/errors.d.ts +60 -0
- package/dist/batch/errors.d.ts.map +1 -0
- package/dist/batch/errors.js +60 -0
- package/dist/batch/errors.js.map +1 -0
- package/dist/batch/filename.d.ts +65 -0
- package/dist/batch/filename.d.ts.map +1 -0
- package/dist/batch/filename.js +205 -0
- package/dist/batch/filename.js.map +1 -0
- package/dist/batch/index.d.ts +17 -0
- package/dist/batch/index.d.ts.map +1 -0
- package/dist/batch/index.js +11 -0
- package/dist/batch/index.js.map +1 -0
- package/dist/batch/issues.d.ts +45 -0
- package/dist/batch/issues.d.ts.map +1 -0
- package/dist/batch/issues.js +47 -0
- package/dist/batch/issues.js.map +1 -0
- package/dist/batch/manifest.d.ts +43 -0
- package/dist/batch/manifest.d.ts.map +1 -0
- package/dist/batch/manifest.js +82 -0
- package/dist/batch/manifest.js.map +1 -0
- package/dist/batch/plan.d.ts +33 -0
- package/dist/batch/plan.d.ts.map +1 -0
- package/dist/batch/plan.js +254 -0
- package/dist/batch/plan.js.map +1 -0
- package/dist/batch/run.d.ts +68 -0
- package/dist/batch/run.d.ts.map +1 -0
- package/dist/batch/run.js +548 -0
- package/dist/batch/run.js.map +1 -0
- package/dist/batch/template.d.ts +54 -0
- package/dist/batch/template.d.ts.map +1 -0
- package/dist/batch/template.js +119 -0
- package/dist/batch/template.js.map +1 -0
- package/dist/batch/text-decoding.d.ts +49 -0
- package/dist/batch/text-decoding.d.ts.map +1 -0
- package/dist/batch/text-decoding.js +160 -0
- package/dist/batch/text-decoding.js.map +1 -0
- package/dist/batch/types.d.ts +240 -0
- package/dist/batch/types.d.ts.map +1 -0
- package/dist/batch/types.js +35 -0
- package/dist/batch/types.js.map +1 -0
- package/dist/batch/verify.d.ts +45 -0
- package/dist/batch/verify.d.ts.map +1 -0
- package/dist/batch/verify.js +72 -0
- package/dist/batch/verify.js.map +1 -0
- package/dist/batch/zip.d.ts +39 -0
- package/dist/batch/zip.d.ts.map +1 -0
- package/dist/batch/zip.js +201 -0
- package/dist/batch/zip.js.map +1 -0
- package/dist/conformance/finder.d.ts +67 -0
- package/dist/conformance/finder.d.ts.map +1 -0
- package/dist/conformance/finder.js +125 -0
- package/dist/conformance/finder.js.map +1 -0
- package/dist/conformance/frame.d.ts +28 -0
- package/dist/conformance/frame.d.ts.map +1 -0
- package/dist/conformance/frame.js +134 -0
- package/dist/conformance/frame.js.map +1 -0
- package/dist/conformance/index.d.ts +15 -0
- package/dist/conformance/index.d.ts.map +1 -0
- package/dist/conformance/index.js +8 -0
- package/dist/conformance/index.js.map +1 -0
- package/dist/conformance/module-shape.d.ts +35 -0
- package/dist/conformance/module-shape.d.ts.map +1 -0
- package/dist/conformance/module-shape.js +139 -0
- package/dist/conformance/module-shape.js.map +1 -0
- package/dist/conformance/payload-type.d.ts +48 -0
- package/dist/conformance/payload-type.d.ts.map +1 -0
- package/dist/conformance/payload-type.js +113 -0
- package/dist/conformance/payload-type.js.map +1 -0
- package/dist/conformance/preset.d.ts +37 -0
- package/dist/conformance/preset.d.ts.map +1 -0
- package/dist/conformance/preset.js +171 -0
- package/dist/conformance/preset.js.map +1 -0
- package/dist/conformance/region-captures.d.ts +41 -0
- package/dist/conformance/region-captures.d.ts.map +1 -0
- package/dist/conformance/region-captures.js +69 -0
- package/dist/conformance/region-captures.js.map +1 -0
- package/dist/conformance/region-shape.d.ts +43 -0
- package/dist/conformance/region-shape.d.ts.map +1 -0
- package/dist/conformance/region-shape.js +214 -0
- package/dist/conformance/region-shape.js.map +1 -0
- package/dist/conformance/sample.d.ts +13 -0
- package/dist/conformance/sample.d.ts.map +1 -0
- package/dist/conformance/sample.js +75 -0
- package/dist/conformance/sample.js.map +1 -0
- package/dist/conformance/types.d.ts +16 -0
- package/dist/conformance/types.d.ts.map +1 -0
- package/dist/conformance/types.js +10 -0
- package/dist/conformance/types.js.map +1 -0
- package/dist/core/bch.d.ts +36 -0
- package/dist/core/bch.d.ts.map +1 -0
- package/dist/core/bch.js +92 -0
- package/dist/core/bch.js.map +1 -0
- package/dist/core/bit-matrix.d.ts +56 -0
- package/dist/core/bit-matrix.d.ts.map +1 -0
- package/dist/core/bit-matrix.js +150 -0
- package/dist/core/bit-matrix.js.map +1 -0
- package/dist/core/bits.d.ts +53 -0
- package/dist/core/bits.d.ts.map +1 -0
- package/dist/core/bits.js +128 -0
- package/dist/core/bits.js.map +1 -0
- package/dist/core/checksums.d.ts +22 -0
- package/dist/core/checksums.d.ts.map +1 -0
- package/dist/core/checksums.js +64 -0
- package/dist/core/checksums.js.map +1 -0
- package/dist/core/deflate.d.ts +51 -0
- package/dist/core/deflate.d.ts.map +1 -0
- package/dist/core/deflate.js +851 -0
- package/dist/core/deflate.js.map +1 -0
- package/dist/core/errors.d.ts +123 -0
- package/dist/core/errors.d.ts.map +1 -0
- package/dist/core/errors.js +168 -0
- package/dist/core/errors.js.map +1 -0
- package/dist/core/field.d.ts +58 -0
- package/dist/core/field.d.ts.map +1 -0
- package/dist/core/field.js +184 -0
- package/dist/core/field.js.map +1 -0
- package/dist/core/huffman.d.ts +31 -0
- package/dist/core/huffman.d.ts.map +1 -0
- package/dist/core/huffman.js +131 -0
- package/dist/core/huffman.js.map +1 -0
- package/dist/core/image.d.ts +18 -0
- package/dist/core/image.d.ts.map +1 -0
- package/dist/core/image.js +2 -0
- package/dist/core/image.js.map +1 -0
- package/dist/core/index.d.ts +25 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +15 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/issue.d.ts +39 -0
- package/dist/core/issue.d.ts.map +1 -0
- package/dist/core/issue.js +24 -0
- package/dist/core/issue.js.map +1 -0
- package/dist/core/math.d.ts +56 -0
- package/dist/core/math.d.ts.map +1 -0
- package/dist/core/math.js +609 -0
- package/dist/core/math.js.map +1 -0
- package/dist/core/prng.d.ts +27 -0
- package/dist/core/prng.d.ts.map +1 -0
- package/dist/core/prng.js +111 -0
- package/dist/core/prng.js.map +1 -0
- package/dist/core/reed-solomon.d.ts +69 -0
- package/dist/core/reed-solomon.d.ts.map +1 -0
- package/dist/core/reed-solomon.js +308 -0
- package/dist/core/reed-solomon.js.map +1 -0
- package/dist/core/registry.d.ts +45 -0
- package/dist/core/registry.d.ts.map +1 -0
- package/dist/core/registry.js +80 -0
- package/dist/core/registry.js.map +1 -0
- package/dist/core/result.d.ts +33 -0
- package/dist/core/result.d.ts.map +1 -0
- package/dist/core/result.js +52 -0
- package/dist/core/result.js.map +1 -0
- package/dist/core/zip.d.ts +36 -0
- package/dist/core/zip.d.ts.map +1 -0
- package/dist/core/zip.js +234 -0
- package/dist/core/zip.js.map +1 -0
- package/dist/decode/alignment.d.ts +34 -0
- package/dist/decode/alignment.d.ts.map +1 -0
- package/dist/decode/alignment.js +179 -0
- package/dist/decode/alignment.js.map +1 -0
- package/dist/decode/binarise.d.ts +95 -0
- package/dist/decode/binarise.d.ts.map +1 -0
- package/dist/decode/binarise.js +399 -0
- package/dist/decode/binarise.js.map +1 -0
- package/dist/decode/decoder.d.ts +75 -0
- package/dist/decode/decoder.d.ts.map +1 -0
- package/dist/decode/decoder.js +773 -0
- package/dist/decode/decoder.js.map +1 -0
- package/dist/decode/erasures.d.ts +26 -0
- package/dist/decode/erasures.d.ts.map +1 -0
- package/dist/decode/erasures.js +34 -0
- package/dist/decode/erasures.js.map +1 -0
- package/dist/decode/failure.d.ts +15 -0
- package/dist/decode/failure.d.ts.map +1 -0
- package/dist/decode/failure.js +22 -0
- package/dist/decode/failure.js.map +1 -0
- package/dist/decode/finder.d.ts +114 -0
- package/dist/decode/finder.d.ts.map +1 -0
- package/dist/decode/finder.js +441 -0
- package/dist/decode/finder.js.map +1 -0
- package/dist/decode/frame.d.ts +49 -0
- package/dist/decode/frame.d.ts.map +1 -0
- package/dist/decode/frame.js +228 -0
- package/dist/decode/frame.js.map +1 -0
- package/dist/decode/grey.d.ts +87 -0
- package/dist/decode/grey.d.ts.map +1 -0
- package/dist/decode/grey.js +226 -0
- package/dist/decode/grey.js.map +1 -0
- package/dist/decode/index.d.ts +4 -0
- package/dist/decode/index.d.ts.map +1 -0
- package/dist/decode/index.js +3 -0
- package/dist/decode/index.js.map +1 -0
- package/dist/decode/locate-qr.d.ts +80 -0
- package/dist/decode/locate-qr.d.ts.map +1 -0
- package/dist/decode/locate-qr.js +295 -0
- package/dist/decode/locate-qr.js.map +1 -0
- package/dist/decode/locate-single.d.ts +47 -0
- package/dist/decode/locate-single.d.ts.map +1 -0
- package/dist/decode/locate-single.js +169 -0
- package/dist/decode/locate-single.js.map +1 -0
- package/dist/decode/plain.d.ts +70 -0
- package/dist/decode/plain.d.ts.map +1 -0
- package/dist/decode/plain.js +460 -0
- package/dist/decode/plain.js.map +1 -0
- package/dist/decode/sample.d.ts +56 -0
- package/dist/decode/sample.d.ts.map +1 -0
- package/dist/decode/sample.js +154 -0
- package/dist/decode/sample.js.map +1 -0
- package/dist/decode/strict.d.ts +255 -0
- package/dist/decode/strict.d.ts.map +1 -0
- package/dist/decode/strict.js +597 -0
- package/dist/decode/strict.js.map +1 -0
- package/dist/decode/tiled.d.ts +137 -0
- package/dist/decode/tiled.d.ts.map +1 -0
- package/dist/decode/tiled.js +452 -0
- package/dist/decode/tiled.js.map +1 -0
- package/dist/decode/transform.d.ts +48 -0
- package/dist/decode/transform.d.ts.map +1 -0
- package/dist/decode/transform.js +180 -0
- package/dist/decode/transform.js.map +1 -0
- package/dist/decode/types.d.ts +163 -0
- package/dist/decode/types.d.ts.map +1 -0
- package/dist/decode/types.js +10 -0
- package/dist/decode/types.js.map +1 -0
- package/dist/design/base64.d.ts +16 -0
- package/dist/design/base64.d.ts.map +1 -0
- package/dist/design/base64.js +97 -0
- package/dist/design/base64.js.map +1 -0
- package/dist/design/canonical.d.ts +13 -0
- package/dist/design/canonical.d.ts.map +1 -0
- package/dist/design/canonical.js +100 -0
- package/dist/design/canonical.js.map +1 -0
- package/dist/design/caption.d.ts +54 -0
- package/dist/design/caption.d.ts.map +1 -0
- package/dist/design/caption.js +175 -0
- package/dist/design/caption.js.map +1 -0
- package/dist/design/catalogue/draw.d.ts +77 -0
- package/dist/design/catalogue/draw.d.ts.map +1 -0
- package/dist/design/catalogue/draw.js +260 -0
- package/dist/design/catalogue/draw.js.map +1 -0
- package/dist/design/catalogue/fills.d.ts +9 -0
- package/dist/design/catalogue/fills.d.ts.map +1 -0
- package/dist/design/catalogue/fills.js +64 -0
- package/dist/design/catalogue/fills.js.map +1 -0
- package/dist/design/catalogue/frames.d.ts +18 -0
- package/dist/design/catalogue/frames.d.ts.map +1 -0
- package/dist/design/catalogue/frames.js +451 -0
- package/dist/design/catalogue/frames.js.map +1 -0
- package/dist/design/catalogue/icons.d.ts +21 -0
- package/dist/design/catalogue/icons.d.ts.map +1 -0
- package/dist/design/catalogue/icons.js +293 -0
- package/dist/design/catalogue/icons.js.map +1 -0
- package/dist/design/catalogue/module-shapes.d.ts +21 -0
- package/dist/design/catalogue/module-shapes.d.ts.map +1 -0
- package/dist/design/catalogue/module-shapes.js +266 -0
- package/dist/design/catalogue/module-shapes.js.map +1 -0
- package/dist/design/catalogue/presets.d.ts +31 -0
- package/dist/design/catalogue/presets.d.ts.map +1 -0
- package/dist/design/catalogue/presets.js +696 -0
- package/dist/design/catalogue/presets.js.map +1 -0
- package/dist/design/catalogue/region-shapes.d.ts +41 -0
- package/dist/design/catalogue/region-shapes.d.ts.map +1 -0
- package/dist/design/catalogue/region-shapes.js +399 -0
- package/dist/design/catalogue/region-shapes.js.map +1 -0
- package/dist/design/catalogue/schema.d.ts +14 -0
- package/dist/design/catalogue/schema.d.ts.map +1 -0
- package/dist/design/catalogue/schema.js +58 -0
- package/dist/design/catalogue/schema.js.map +1 -0
- package/dist/design/constraints.d.ts +25 -0
- package/dist/design/constraints.d.ts.map +1 -0
- package/dist/design/constraints.js +194 -0
- package/dist/design/constraints.js.map +1 -0
- package/dist/design/document.d.ts +64 -0
- package/dist/design/document.d.ts.map +1 -0
- package/dist/design/document.js +66 -0
- package/dist/design/document.js.map +1 -0
- package/dist/design/finder.d.ts +79 -0
- package/dist/design/finder.d.ts.map +1 -0
- package/dist/design/finder.js +270 -0
- package/dist/design/finder.js.map +1 -0
- package/dist/design/index.d.ts +18 -0
- package/dist/design/index.d.ts.map +1 -0
- package/dist/design/index.js +15 -0
- package/dist/design/index.js.map +1 -0
- package/dist/design/link.d.ts +41 -0
- package/dist/design/link.d.ts.map +1 -0
- package/dist/design/link.js +131 -0
- package/dist/design/link.js.map +1 -0
- package/dist/design/logo.d.ts +57 -0
- package/dist/design/logo.d.ts.map +1 -0
- package/dist/design/logo.js +376 -0
- package/dist/design/logo.js.map +1 -0
- package/dist/design/migrate.d.ts +31 -0
- package/dist/design/migrate.d.ts.map +1 -0
- package/dist/design/migrate.js +87 -0
- package/dist/design/migrate.js.map +1 -0
- package/dist/design/neighbours.d.ts +24 -0
- package/dist/design/neighbours.d.ts.map +1 -0
- package/dist/design/neighbours.js +50 -0
- package/dist/design/neighbours.js.map +1 -0
- package/dist/design/paint.d.ts +47 -0
- package/dist/design/paint.d.ts.map +1 -0
- package/dist/design/paint.js +115 -0
- package/dist/design/paint.js.map +1 -0
- package/dist/design/params.d.ts +30 -0
- package/dist/design/params.d.ts.map +1 -0
- package/dist/design/params.js +85 -0
- package/dist/design/params.js.map +1 -0
- package/dist/design/preset-size.d.ts +14 -0
- package/dist/design/preset-size.d.ts.map +1 -0
- package/dist/design/preset-size.js +14 -0
- package/dist/design/preset-size.js.map +1 -0
- package/dist/design/registries.d.ts +9 -0
- package/dist/design/registries.d.ts.map +1 -0
- package/dist/design/registries.js +24 -0
- package/dist/design/registries.js.map +1 -0
- package/dist/design/scene.d.ts +38 -0
- package/dist/design/scene.d.ts.map +1 -0
- package/dist/design/scene.js +694 -0
- package/dist/design/scene.js.map +1 -0
- package/dist/design/swiss-cross.d.ts +54 -0
- package/dist/design/swiss-cross.d.ts.map +1 -0
- package/dist/design/swiss-cross.js +95 -0
- package/dist/design/swiss-cross.js.map +1 -0
- package/dist/design/types.d.ts +389 -0
- package/dist/design/types.d.ts.map +1 -0
- package/dist/design/types.js +29 -0
- package/dist/design/types.js.map +1 -0
- package/dist/design/validate.d.ts +48 -0
- package/dist/design/validate.d.ts.map +1 -0
- package/dist/design/validate.js +986 -0
- package/dist/design/validate.js.map +1 -0
- package/dist/dom/camera.d.ts +94 -0
- package/dist/dom/camera.d.ts.map +1 -0
- package/dist/dom/camera.js +288 -0
- package/dist/dom/camera.js.map +1 -0
- package/dist/dom/file-library.d.ts +297 -0
- package/dist/dom/file-library.d.ts.map +1 -0
- package/dist/dom/file-library.js +703 -0
- package/dist/dom/file-library.js.map +1 -0
- package/dist/dom/image.d.ts +77 -0
- package/dist/dom/image.d.ts.map +1 -0
- package/dist/dom/image.js +253 -0
- package/dist/dom/image.js.map +1 -0
- package/dist/dom/index.d.ts +19 -0
- package/dist/dom/index.d.ts.map +1 -0
- package/dist/dom/index.js +10 -0
- package/dist/dom/index.js.map +1 -0
- package/dist/dom/library/index.d.ts +4 -0
- package/dist/dom/library/index.d.ts.map +1 -0
- package/dist/dom/library/index.js +2 -0
- package/dist/dom/library/index.js.map +1 -0
- package/dist/dom/library/indexeddb.d.ts +71 -0
- package/dist/dom/library/indexeddb.d.ts.map +1 -0
- package/dist/dom/library/indexeddb.js +365 -0
- package/dist/dom/library/indexeddb.js.map +1 -0
- package/dist/dom/logo.d.ts +36 -0
- package/dist/dom/logo.d.ts.map +1 -0
- package/dist/dom/logo.js +99 -0
- package/dist/dom/logo.js.map +1 -0
- package/dist/dom/orientation.d.ts +32 -0
- package/dist/dom/orientation.d.ts.map +1 -0
- package/dist/dom/orientation.js +152 -0
- package/dist/dom/orientation.js.map +1 -0
- package/dist/dom/output.d.ts +58 -0
- package/dist/dom/output.d.ts.map +1 -0
- package/dist/dom/output.js +93 -0
- package/dist/dom/output.js.map +1 -0
- package/dist/dom/print.d.ts +52 -0
- package/dist/dom/print.d.ts.map +1 -0
- package/dist/dom/print.js +101 -0
- package/dist/dom/print.js.map +1 -0
- package/dist/dom/raster-encoder.d.ts +43 -0
- package/dist/dom/raster-encoder.d.ts.map +1 -0
- package/dist/dom/raster-encoder.js +102 -0
- package/dist/dom/raster-encoder.js.map +1 -0
- package/dist/dom/resample.d.ts +20 -0
- package/dist/dom/resample.d.ts.map +1 -0
- package/dist/dom/resample.js +107 -0
- package/dist/dom/resample.js.map +1 -0
- package/dist/dom/types.d.ts +54 -0
- package/dist/dom/types.d.ts.map +1 -0
- package/dist/dom/types.js +13 -0
- package/dist/dom/types.js.map +1 -0
- package/dist/encode/bitstream.d.ts +14 -0
- package/dist/encode/bitstream.d.ts.map +1 -0
- package/dist/encode/bitstream.js +31 -0
- package/dist/encode/bitstream.js.map +1 -0
- package/dist/encode/encode.d.ts +21 -0
- package/dist/encode/encode.d.ts.map +1 -0
- package/dist/encode/encode.js +65 -0
- package/dist/encode/encode.js.map +1 -0
- package/dist/encode/index.d.ts +5 -0
- package/dist/encode/index.d.ts.map +1 -0
- package/dist/encode/index.js +4 -0
- package/dist/encode/index.js.map +1 -0
- package/dist/encode/plan.d.ts +61 -0
- package/dist/encode/plan.d.ts.map +1 -0
- package/dist/encode/plan.js +177 -0
- package/dist/encode/plan.js.map +1 -0
- package/dist/encode/structured-append.d.ts +35 -0
- package/dist/encode/structured-append.d.ts.map +1 -0
- package/dist/encode/structured-append.js +153 -0
- package/dist/encode/structured-append.js.map +1 -0
- package/dist/fonts/latin.d.ts +118 -0
- package/dist/fonts/latin.d.ts.map +1 -0
- package/dist/fonts/latin.js +137 -0
- package/dist/fonts/latin.js.map +1 -0
- package/dist/geometry/flatten.d.ts +60 -0
- package/dist/geometry/flatten.d.ts.map +1 -0
- package/dist/geometry/flatten.js +177 -0
- package/dist/geometry/flatten.js.map +1 -0
- package/dist/geometry/index.d.ts +10 -0
- package/dist/geometry/index.d.ts.map +1 -0
- package/dist/geometry/index.js +6 -0
- package/dist/geometry/index.js.map +1 -0
- package/dist/geometry/matrix.d.ts +50 -0
- package/dist/geometry/matrix.d.ts.map +1 -0
- package/dist/geometry/matrix.js +113 -0
- package/dist/geometry/matrix.js.map +1 -0
- package/dist/geometry/measure.d.ts +35 -0
- package/dist/geometry/measure.d.ts.map +1 -0
- package/dist/geometry/measure.js +206 -0
- package/dist/geometry/measure.js.map +1 -0
- package/dist/geometry/path.d.ts +137 -0
- package/dist/geometry/path.d.ts.map +1 -0
- package/dist/geometry/path.js +401 -0
- package/dist/geometry/path.js.map +1 -0
- package/dist/geometry/trace.d.ts +29 -0
- package/dist/geometry/trace.d.ts.map +1 -0
- package/dist/geometry/trace.js +166 -0
- package/dist/geometry/trace.js.map +1 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -0
- package/dist/inspect/explain.d.ts +32 -0
- package/dist/inspect/explain.d.ts.map +1 -0
- package/dist/inspect/explain.js +99 -0
- package/dist/inspect/explain.js.map +1 -0
- package/dist/inspect/gs1.d.ts +38 -0
- package/dist/inspect/gs1.d.ts.map +1 -0
- package/dist/inspect/gs1.js +130 -0
- package/dist/inspect/gs1.js.map +1 -0
- package/dist/inspect/index.d.ts +9 -0
- package/dist/inspect/index.d.ts.map +1 -0
- package/dist/inspect/index.js +6 -0
- package/dist/inspect/index.js.map +1 -0
- package/dist/inspect/inspect.d.ts +29 -0
- package/dist/inspect/inspect.d.ts.map +1 -0
- package/dist/inspect/inspect.js +98 -0
- package/dist/inspect/inspect.js.map +1 -0
- package/dist/inspect/keys.d.ts +54 -0
- package/dist/inspect/keys.d.ts.map +1 -0
- package/dist/inspect/keys.js +63 -0
- package/dist/inspect/keys.js.map +1 -0
- package/dist/inspect/sets.d.ts +27 -0
- package/dist/inspect/sets.d.ts.map +1 -0
- package/dist/inspect/sets.js +67 -0
- package/dist/inspect/sets.js.map +1 -0
- package/dist/inspect/types.d.ts +81 -0
- package/dist/inspect/types.d.ts.map +1 -0
- package/dist/inspect/types.js +16 -0
- package/dist/inspect/types.js.map +1 -0
- package/dist/messages/en/app.d.ts +11 -0
- package/dist/messages/en/app.d.ts.map +1 -0
- package/dist/messages/en/app.js +395 -0
- package/dist/messages/en/app.js.map +1 -0
- package/dist/messages/en/batch.d.ts +18 -0
- package/dist/messages/en/batch.d.ts.map +1 -0
- package/dist/messages/en/batch.js +42 -0
- package/dist/messages/en/batch.js.map +1 -0
- package/dist/messages/en/decode.d.ts +9 -0
- package/dist/messages/en/decode.d.ts.map +1 -0
- package/dist/messages/en/decode.js +21 -0
- package/dist/messages/en/decode.js.map +1 -0
- package/dist/messages/en/design.d.ts +13 -0
- package/dist/messages/en/design.d.ts.map +1 -0
- package/dist/messages/en/design.js +228 -0
- package/dist/messages/en/design.js.map +1 -0
- package/dist/messages/en/dom.d.ts +11 -0
- package/dist/messages/en/dom.d.ts.map +1 -0
- package/dist/messages/en/dom.js +14 -0
- package/dist/messages/en/dom.js.map +1 -0
- package/dist/messages/en/encode.d.ts +13 -0
- package/dist/messages/en/encode.d.ts.map +1 -0
- package/dist/messages/en/encode.js +20 -0
- package/dist/messages/en/encode.js.map +1 -0
- package/dist/messages/en/index.d.ts +48 -0
- package/dist/messages/en/index.d.ts.map +1 -0
- package/dist/messages/en/index.js +73 -0
- package/dist/messages/en/index.js.map +1 -0
- package/dist/messages/en/inspect.d.ts +13 -0
- package/dist/messages/en/inspect.d.ts.map +1 -0
- package/dist/messages/en/inspect.js +84 -0
- package/dist/messages/en/inspect.js.map +1 -0
- package/dist/messages/en/library.d.ts +12 -0
- package/dist/messages/en/library.d.ts.map +1 -0
- package/dist/messages/en/library.js +27 -0
- package/dist/messages/en/library.js.map +1 -0
- package/dist/messages/en/micro.d.ts +9 -0
- package/dist/messages/en/micro.d.ts.map +1 -0
- package/dist/messages/en/micro.js +13 -0
- package/dist/messages/en/micro.js.map +1 -0
- package/dist/messages/en/own-link.d.ts +7 -0
- package/dist/messages/en/own-link.d.ts.map +1 -0
- package/dist/messages/en/own-link.js +29 -0
- package/dist/messages/en/own-link.js.map +1 -0
- package/dist/messages/en/payload.d.ts +13 -0
- package/dist/messages/en/payload.d.ts.map +1 -0
- package/dist/messages/en/payload.js +427 -0
- package/dist/messages/en/payload.js.map +1 -0
- package/dist/messages/en/rmqr.d.ts +9 -0
- package/dist/messages/en/rmqr.d.ts.map +1 -0
- package/dist/messages/en/rmqr.js +12 -0
- package/dist/messages/en/rmqr.js.map +1 -0
- package/dist/messages/en/studio.d.ts +18 -0
- package/dist/messages/en/studio.d.ts.map +1 -0
- package/dist/messages/en/studio.js +117 -0
- package/dist/messages/en/studio.js.map +1 -0
- package/dist/messages/en/symbology.d.ts +13 -0
- package/dist/messages/en/symbology.d.ts.map +1 -0
- package/dist/messages/en/symbology.js +21 -0
- package/dist/messages/en/symbology.js.map +1 -0
- package/dist/messages/en/text.d.ts +23 -0
- package/dist/messages/en/text.d.ts.map +1 -0
- package/dist/messages/en/text.js +47 -0
- package/dist/messages/en/text.js.map +1 -0
- package/dist/messages/en/verify.d.ts +13 -0
- package/dist/messages/en/verify.d.ts.map +1 -0
- package/dist/messages/en/verify.js +117 -0
- package/dist/messages/en/verify.js.map +1 -0
- package/dist/messages/format.d.ts +30 -0
- package/dist/messages/format.d.ts.map +1 -0
- package/dist/messages/format.js +170 -0
- package/dist/messages/format.js.map +1 -0
- package/dist/own-link/index.d.ts +5 -0
- package/dist/own-link/index.d.ts.map +1 -0
- package/dist/own-link/index.js +3 -0
- package/dist/own-link/index.js.map +1 -0
- package/dist/own-link/query.d.ts +10 -0
- package/dist/own-link/query.d.ts.map +1 -0
- package/dist/own-link/query.js +33 -0
- package/dist/own-link/query.js.map +1 -0
- package/dist/own-link/redirects.d.ts +54 -0
- package/dist/own-link/redirects.d.ts.map +1 -0
- package/dist/own-link/redirects.js +271 -0
- package/dist/own-link/redirects.js.map +1 -0
- package/dist/own-link/utm.d.ts +24 -0
- package/dist/own-link/utm.d.ts.map +1 -0
- package/dist/own-link/utm.js +82 -0
- package/dist/own-link/utm.js.map +1 -0
- package/dist/payload/banking.d.ts +39 -0
- package/dist/payload/banking.d.ts.map +1 -0
- package/dist/payload/banking.js +87 -0
- package/dist/payload/banking.js.map +1 -0
- package/dist/payload/base58.d.ts +21 -0
- package/dist/payload/base58.d.ts.map +1 -0
- package/dist/payload/base58.js +75 -0
- package/dist/payload/base58.js.map +1 -0
- package/dist/payload/bech32.d.ts +59 -0
- package/dist/payload/bech32.d.ts.map +1 -0
- package/dist/payload/bech32.js +137 -0
- package/dist/payload/bech32.js.map +1 -0
- package/dist/payload/check-digits.d.ts +49 -0
- package/dist/payload/check-digits.d.ts.map +1 -0
- package/dist/payload/check-digits.js +101 -0
- package/dist/payload/check-digits.js.map +1 -0
- package/dist/payload/content/bitcoin.d.ts +34 -0
- package/dist/payload/content/bitcoin.d.ts.map +1 -0
- package/dist/payload/content/bitcoin.js +137 -0
- package/dist/payload/content/bitcoin.js.map +1 -0
- package/dist/payload/content/email.d.ts +19 -0
- package/dist/payload/content/email.d.ts.map +1 -0
- package/dist/payload/content/email.js +137 -0
- package/dist/payload/content/email.js.map +1 -0
- package/dist/payload/content/epc.d.ts +32 -0
- package/dist/payload/content/epc.d.ts.map +1 -0
- package/dist/payload/content/epc.js +160 -0
- package/dist/payload/content/epc.js.map +1 -0
- package/dist/payload/content/event.d.ts +35 -0
- package/dist/payload/content/event.d.ts.map +1 -0
- package/dist/payload/content/event.js +242 -0
- package/dist/payload/content/event.js.map +1 -0
- package/dist/payload/content/facetime.d.ts +14 -0
- package/dist/payload/content/facetime.d.ts.map +1 -0
- package/dist/payload/content/facetime.js +56 -0
- package/dist/payload/content/facetime.js.map +1 -0
- package/dist/payload/content/geo.d.ts +24 -0
- package/dist/payload/content/geo.d.ts.map +1 -0
- package/dist/payload/content/geo.js +139 -0
- package/dist/payload/content/geo.js.map +1 -0
- package/dist/payload/content/gs1-digital-link.d.ts +34 -0
- package/dist/payload/content/gs1-digital-link.d.ts.map +1 -0
- package/dist/payload/content/gs1-digital-link.js +171 -0
- package/dist/payload/content/gs1-digital-link.js.map +1 -0
- package/dist/payload/content/lightning.d.ts +22 -0
- package/dist/payload/content/lightning.d.ts.map +1 -0
- package/dist/payload/content/lightning.js +90 -0
- package/dist/payload/content/lightning.js.map +1 -0
- package/dist/payload/content/mecard.d.ts +23 -0
- package/dist/payload/content/mecard.d.ts.map +1 -0
- package/dist/payload/content/mecard.js +111 -0
- package/dist/payload/content/mecard.js.map +1 -0
- package/dist/payload/content/phone.d.ts +17 -0
- package/dist/payload/content/phone.d.ts.map +1 -0
- package/dist/payload/content/phone.js +39 -0
- package/dist/payload/content/phone.js.map +1 -0
- package/dist/payload/content/pix.d.ts +36 -0
- package/dist/payload/content/pix.d.ts.map +1 -0
- package/dist/payload/content/pix.js +191 -0
- package/dist/payload/content/pix.js.map +1 -0
- package/dist/payload/content/signal.d.ts +17 -0
- package/dist/payload/content/signal.d.ts.map +1 -0
- package/dist/payload/content/signal.js +43 -0
- package/dist/payload/content/signal.js.map +1 -0
- package/dist/payload/content/sms.d.ts +18 -0
- package/dist/payload/content/sms.d.ts.map +1 -0
- package/dist/payload/content/sms.js +64 -0
- package/dist/payload/content/sms.js.map +1 -0
- package/dist/payload/content/swiss-qr-bill.d.ts +61 -0
- package/dist/payload/content/swiss-qr-bill.d.ts.map +1 -0
- package/dist/payload/content/swiss-qr-bill.js +325 -0
- package/dist/payload/content/swiss-qr-bill.js.map +1 -0
- package/dist/payload/content/telegram.d.ts +18 -0
- package/dist/payload/content/telegram.d.ts.map +1 -0
- package/dist/payload/content/telegram.js +105 -0
- package/dist/payload/content/telegram.js.map +1 -0
- package/dist/payload/content/text.d.ts +9 -0
- package/dist/payload/content/text.d.ts.map +1 -0
- package/dist/payload/content/text.js +18 -0
- package/dist/payload/content/text.js.map +1 -0
- package/dist/payload/content/upi.d.ts +21 -0
- package/dist/payload/content/upi.d.ts.map +1 -0
- package/dist/payload/content/upi.js +89 -0
- package/dist/payload/content/upi.js.map +1 -0
- package/dist/payload/content/url.d.ts +31 -0
- package/dist/payload/content/url.d.ts.map +1 -0
- package/dist/payload/content/url.js +120 -0
- package/dist/payload/content/url.js.map +1 -0
- package/dist/payload/content/vcard.d.ts +42 -0
- package/dist/payload/content/vcard.d.ts.map +1 -0
- package/dist/payload/content/vcard.js +302 -0
- package/dist/payload/content/vcard.js.map +1 -0
- package/dist/payload/content/whatsapp.d.ts +17 -0
- package/dist/payload/content/whatsapp.d.ts.map +1 -0
- package/dist/payload/content/whatsapp.js +72 -0
- package/dist/payload/content/whatsapp.js.map +1 -0
- package/dist/payload/content/wifi.d.ts +48 -0
- package/dist/payload/content/wifi.d.ts.map +1 -0
- package/dist/payload/content/wifi.js +240 -0
- package/dist/payload/content/wifi.js.map +1 -0
- package/dist/payload/content/zatca.d.ts +35 -0
- package/dist/payload/content/zatca.d.ts.map +1 -0
- package/dist/payload/content/zatca.js +156 -0
- package/dist/payload/content/zatca.js.map +1 -0
- package/dist/payload/data/hosts.d.ts +39 -0
- package/dist/payload/data/hosts.d.ts.map +1 -0
- package/dist/payload/data/hosts.js +74 -0
- package/dist/payload/data/hosts.js.map +1 -0
- package/dist/payload/define.d.ts +57 -0
- package/dist/payload/define.d.ts.map +1 -0
- package/dist/payload/define.js +87 -0
- package/dist/payload/define.js.map +1 -0
- package/dist/payload/detect.d.ts +13 -0
- package/dist/payload/detect.d.ts.map +1 -0
- package/dist/payload/detect.js +32 -0
- package/dist/payload/detect.js.map +1 -0
- package/dist/payload/emv.d.ts +41 -0
- package/dist/payload/emv.d.ts.map +1 -0
- package/dist/payload/emv.js +73 -0
- package/dist/payload/emv.js.map +1 -0
- package/dist/payload/escape.d.ts +66 -0
- package/dist/payload/escape.d.ts.map +1 -0
- package/dist/payload/escape.js +225 -0
- package/dist/payload/escape.js.map +1 -0
- package/dist/payload/fields.d.ts +86 -0
- package/dist/payload/fields.d.ts.map +1 -0
- package/dist/payload/fields.js +368 -0
- package/dist/payload/fields.js.map +1 -0
- package/dist/payload/hash.d.ts +11 -0
- package/dist/payload/hash.d.ts.map +1 -0
- package/dist/payload/hash.js +82 -0
- package/dist/payload/hash.js.map +1 -0
- package/dist/payload/index.d.ts +58 -0
- package/dist/payload/index.d.ts.map +1 -0
- package/dist/payload/index.js +32 -0
- package/dist/payload/index.js.map +1 -0
- package/dist/payload/punycode.d.ts +18 -0
- package/dist/payload/punycode.d.ts.map +1 -0
- package/dist/payload/punycode.js +99 -0
- package/dist/payload/punycode.js.map +1 -0
- package/dist/payload/registry.d.ts +20 -0
- package/dist/payload/registry.d.ts.map +1 -0
- package/dist/payload/registry.js +64 -0
- package/dist/payload/registry.js.map +1 -0
- package/dist/payload/safety.d.ts +13 -0
- package/dist/payload/safety.d.ts.map +1 -0
- package/dist/payload/safety.js +30 -0
- package/dist/payload/safety.js.map +1 -0
- package/dist/payload/scripts.d.ts +25 -0
- package/dist/payload/scripts.d.ts.map +1 -0
- package/dist/payload/scripts.js +90 -0
- package/dist/payload/scripts.js.map +1 -0
- package/dist/payload/types.d.ts +138 -0
- package/dist/payload/types.d.ts.map +1 -0
- package/dist/payload/types.js +28 -0
- package/dist/payload/types.js.map +1 -0
- package/dist/payload/uri.d.ts +24 -0
- package/dist/payload/uri.d.ts.map +1 -0
- package/dist/payload/uri.js +69 -0
- package/dist/payload/uri.js.map +1 -0
- package/dist/payload/url-safety.d.ts +31 -0
- package/dist/payload/url-safety.d.ts.map +1 -0
- package/dist/payload/url-safety.js +221 -0
- package/dist/payload/url-safety.js.map +1 -0
- package/dist/payload/vectors/bitcoin.d.ts +13 -0
- package/dist/payload/vectors/bitcoin.d.ts.map +1 -0
- package/dist/payload/vectors/bitcoin.js +83 -0
- package/dist/payload/vectors/bitcoin.js.map +1 -0
- package/dist/payload/vectors/built-in.d.ts +15 -0
- package/dist/payload/vectors/built-in.d.ts.map +1 -0
- package/dist/payload/vectors/built-in.js +59 -0
- package/dist/payload/vectors/built-in.js.map +1 -0
- package/dist/payload/vectors/email.d.ts +8 -0
- package/dist/payload/vectors/email.d.ts.map +1 -0
- package/dist/payload/vectors/email.js +60 -0
- package/dist/payload/vectors/email.js.map +1 -0
- package/dist/payload/vectors/epc.d.ts +9 -0
- package/dist/payload/vectors/epc.d.ts.map +1 -0
- package/dist/payload/vectors/epc.js +38 -0
- package/dist/payload/vectors/epc.js.map +1 -0
- package/dist/payload/vectors/event.d.ts +9 -0
- package/dist/payload/vectors/event.d.ts.map +1 -0
- package/dist/payload/vectors/event.js +57 -0
- package/dist/payload/vectors/event.js.map +1 -0
- package/dist/payload/vectors/facetime.d.ts +9 -0
- package/dist/payload/vectors/facetime.d.ts.map +1 -0
- package/dist/payload/vectors/facetime.js +19 -0
- package/dist/payload/vectors/facetime.js.map +1 -0
- package/dist/payload/vectors/geo.d.ts +8 -0
- package/dist/payload/vectors/geo.d.ts.map +1 -0
- package/dist/payload/vectors/geo.js +22 -0
- package/dist/payload/vectors/geo.js.map +1 -0
- package/dist/payload/vectors/gs1-digital-link.d.ts +9 -0
- package/dist/payload/vectors/gs1-digital-link.d.ts.map +1 -0
- package/dist/payload/vectors/gs1-digital-link.js +21 -0
- package/dist/payload/vectors/gs1-digital-link.js.map +1 -0
- package/dist/payload/vectors/hosts.d.ts +12 -0
- package/dist/payload/vectors/hosts.d.ts.map +1 -0
- package/dist/payload/vectors/hosts.js +50 -0
- package/dist/payload/vectors/hosts.js.map +1 -0
- package/dist/payload/vectors/index.d.ts +10 -0
- package/dist/payload/vectors/index.d.ts.map +1 -0
- package/dist/payload/vectors/index.js +9 -0
- package/dist/payload/vectors/index.js.map +1 -0
- package/dist/payload/vectors/lightning.d.ts +9 -0
- package/dist/payload/vectors/lightning.d.ts.map +1 -0
- package/dist/payload/vectors/lightning.js +23 -0
- package/dist/payload/vectors/lightning.js.map +1 -0
- package/dist/payload/vectors/mecard.d.ts +9 -0
- package/dist/payload/vectors/mecard.d.ts.map +1 -0
- package/dist/payload/vectors/mecard.js +25 -0
- package/dist/payload/vectors/mecard.js.map +1 -0
- package/dist/payload/vectors/phone.d.ts +9 -0
- package/dist/payload/vectors/phone.d.ts.map +1 -0
- package/dist/payload/vectors/phone.js +13 -0
- package/dist/payload/vectors/phone.js.map +1 -0
- package/dist/payload/vectors/pix.d.ts +9 -0
- package/dist/payload/vectors/pix.d.ts.map +1 -0
- package/dist/payload/vectors/pix.js +21 -0
- package/dist/payload/vectors/pix.js.map +1 -0
- package/dist/payload/vectors/signal.d.ts +9 -0
- package/dist/payload/vectors/signal.d.ts.map +1 -0
- package/dist/payload/vectors/signal.js +14 -0
- package/dist/payload/vectors/signal.js.map +1 -0
- package/dist/payload/vectors/sms.d.ts +9 -0
- package/dist/payload/vectors/sms.d.ts.map +1 -0
- package/dist/payload/vectors/sms.js +18 -0
- package/dist/payload/vectors/sms.js.map +1 -0
- package/dist/payload/vectors/swiss-qr-bill.d.ts +9 -0
- package/dist/payload/vectors/swiss-qr-bill.d.ts.map +1 -0
- package/dist/payload/vectors/swiss-qr-bill.js +72 -0
- package/dist/payload/vectors/swiss-qr-bill.js.map +1 -0
- package/dist/payload/vectors/telegram.d.ts +9 -0
- package/dist/payload/vectors/telegram.d.ts.map +1 -0
- package/dist/payload/vectors/telegram.js +19 -0
- package/dist/payload/vectors/telegram.js.map +1 -0
- package/dist/payload/vectors/text.d.ts +9 -0
- package/dist/payload/vectors/text.d.ts.map +1 -0
- package/dist/payload/vectors/text.js +13 -0
- package/dist/payload/vectors/text.js.map +1 -0
- package/dist/payload/vectors/upi.d.ts +9 -0
- package/dist/payload/vectors/upi.d.ts.map +1 -0
- package/dist/payload/vectors/upi.js +14 -0
- package/dist/payload/vectors/upi.js.map +1 -0
- package/dist/payload/vectors/url.d.ts +8 -0
- package/dist/payload/vectors/url.d.ts.map +1 -0
- package/dist/payload/vectors/url.js +30 -0
- package/dist/payload/vectors/url.js.map +1 -0
- package/dist/payload/vectors/vcard.d.ts +9 -0
- package/dist/payload/vectors/vcard.d.ts.map +1 -0
- package/dist/payload/vectors/vcard.js +47 -0
- package/dist/payload/vectors/vcard.js.map +1 -0
- package/dist/payload/vectors/whatsapp.d.ts +9 -0
- package/dist/payload/vectors/whatsapp.d.ts.map +1 -0
- package/dist/payload/vectors/whatsapp.js +19 -0
- package/dist/payload/vectors/whatsapp.js.map +1 -0
- package/dist/payload/vectors/wifi.d.ts +13 -0
- package/dist/payload/vectors/wifi.d.ts.map +1 -0
- package/dist/payload/vectors/wifi.js +40 -0
- package/dist/payload/vectors/wifi.js.map +1 -0
- package/dist/payload/vectors/zatca.d.ts +12 -0
- package/dist/payload/vectors/zatca.d.ts.map +1 -0
- package/dist/payload/vectors/zatca.js +28 -0
- package/dist/payload/vectors/zatca.js.map +1 -0
- package/dist/qr-code-studio.html +190 -0
- package/dist/registries.d.ts +24 -0
- package/dist/registries.d.ts.map +1 -0
- package/dist/registries.js +23 -0
- package/dist/registries.js.map +1 -0
- package/dist/render/base64.d.ts +11 -0
- package/dist/render/base64.d.ts.map +1 -0
- package/dist/render/base64.js +40 -0
- package/dist/render/base64.js.map +1 -0
- package/dist/render/colour.d.ts +28 -0
- package/dist/render/colour.d.ts.map +1 -0
- package/dist/render/colour.js +72 -0
- package/dist/render/colour.js.map +1 -0
- package/dist/render/conic.d.ts +68 -0
- package/dist/render/conic.d.ts.map +1 -0
- package/dist/render/conic.js +205 -0
- package/dist/render/conic.js.map +1 -0
- package/dist/render/coverage.d.ts +154 -0
- package/dist/render/coverage.d.ts.map +1 -0
- package/dist/render/coverage.js +613 -0
- package/dist/render/coverage.js.map +1 -0
- package/dist/render/eps.d.ts +41 -0
- package/dist/render/eps.d.ts.map +1 -0
- package/dist/render/eps.js +377 -0
- package/dist/render/eps.js.map +1 -0
- package/dist/render/impose.d.ts +130 -0
- package/dist/render/impose.d.ts.map +1 -0
- package/dist/render/impose.js +288 -0
- package/dist/render/impose.js.map +1 -0
- package/dist/render/index.d.ts +22 -0
- package/dist/render/index.d.ts.map +1 -0
- package/dist/render/index.js +13 -0
- package/dist/render/index.js.map +1 -0
- package/dist/render/paint.d.ts +62 -0
- package/dist/render/paint.d.ts.map +1 -0
- package/dist/render/paint.js +169 -0
- package/dist/render/paint.js.map +1 -0
- package/dist/render/pdf-colour.d.ts +34 -0
- package/dist/render/pdf-colour.d.ts.map +1 -0
- package/dist/render/pdf-colour.js +64 -0
- package/dist/render/pdf-colour.js.map +1 -0
- package/dist/render/pdf-content.d.ts +90 -0
- package/dist/render/pdf-content.d.ts.map +1 -0
- package/dist/render/pdf-content.js +367 -0
- package/dist/render/pdf-content.js.map +1 -0
- package/dist/render/pdf-document.d.ts +38 -0
- package/dist/render/pdf-document.d.ts.map +1 -0
- package/dist/render/pdf-document.js +110 -0
- package/dist/render/pdf-document.js.map +1 -0
- package/dist/render/pdf-hash.d.ts +14 -0
- package/dist/render/pdf-hash.d.ts.map +1 -0
- package/dist/render/pdf-hash.js +71 -0
- package/dist/render/pdf-hash.js.map +1 -0
- package/dist/render/pdf-syntax.d.ts +45 -0
- package/dist/render/pdf-syntax.d.ts.map +1 -0
- package/dist/render/pdf-syntax.js +100 -0
- package/dist/render/pdf-syntax.js.map +1 -0
- package/dist/render/pdf.d.ts +59 -0
- package/dist/render/pdf.d.ts.map +1 -0
- package/dist/render/pdf.js +267 -0
- package/dist/render/pdf.js.map +1 -0
- package/dist/render/png-decode.d.ts +33 -0
- package/dist/render/png-decode.d.ts.map +1 -0
- package/dist/render/png-decode.js +345 -0
- package/dist/render/png-decode.js.map +1 -0
- package/dist/render/png.d.ts +37 -0
- package/dist/render/png.d.ts.map +1 -0
- package/dist/render/png.js +350 -0
- package/dist/render/png.js.map +1 -0
- package/dist/render/raster.d.ts +40 -0
- package/dist/render/raster.d.ts.map +1 -0
- package/dist/render/raster.js +245 -0
- package/dist/render/raster.js.map +1 -0
- package/dist/render/scene.d.ts +84 -0
- package/dist/render/scene.d.ts.map +1 -0
- package/dist/render/scene.js +216 -0
- package/dist/render/scene.js.map +1 -0
- package/dist/render/sheets.d.ts +26 -0
- package/dist/render/sheets.d.ts.map +1 -0
- package/dist/render/sheets.js +83 -0
- package/dist/render/sheets.js.map +1 -0
- package/dist/render/svg.d.ts +54 -0
- package/dist/render/svg.d.ts.map +1 -0
- package/dist/render/svg.js +324 -0
- package/dist/render/svg.js.map +1 -0
- package/dist/render/types.d.ts +95 -0
- package/dist/render/types.d.ts.map +1 -0
- package/dist/render/types.js +9 -0
- package/dist/render/types.js.map +1 -0
- package/dist/segment/alphanumeric.d.ts +15 -0
- package/dist/segment/alphanumeric.d.ts.map +1 -0
- package/dist/segment/alphanumeric.js +23 -0
- package/dist/segment/alphanumeric.js.map +1 -0
- package/dist/segment/eci.d.ts +41 -0
- package/dist/segment/eci.d.ts.map +1 -0
- package/dist/segment/eci.js +194 -0
- package/dist/segment/eci.js.map +1 -0
- package/dist/segment/index.d.ts +10 -0
- package/dist/segment/index.d.ts.map +1 -0
- package/dist/segment/index.js +8 -0
- package/dist/segment/index.js.map +1 -0
- package/dist/segment/kanji.d.ts +57 -0
- package/dist/segment/kanji.d.ts.map +1 -0
- package/dist/segment/kanji.js +135 -0
- package/dist/segment/kanji.js.map +1 -0
- package/dist/segment/profile.d.ts +21 -0
- package/dist/segment/profile.d.ts.map +1 -0
- package/dist/segment/profile.js +66 -0
- package/dist/segment/profile.js.map +1 -0
- package/dist/segment/read.d.ts +29 -0
- package/dist/segment/read.d.ts.map +1 -0
- package/dist/segment/read.js +360 -0
- package/dist/segment/read.js.map +1 -0
- package/dist/segment/segment-text.d.ts +88 -0
- package/dist/segment/segment-text.d.ts.map +1 -0
- package/dist/segment/segment-text.js +422 -0
- package/dist/segment/segment-text.js.map +1 -0
- package/dist/segment/types.d.ts +89 -0
- package/dist/segment/types.d.ts.map +1 -0
- package/dist/segment/types.js +13 -0
- package/dist/segment/types.js.map +1 -0
- package/dist/segment/write.d.ts +36 -0
- package/dist/segment/write.d.ts.map +1 -0
- package/dist/segment/write.js +226 -0
- package/dist/segment/write.js.map +1 -0
- package/dist/studio/assets.d.ts +22 -0
- package/dist/studio/assets.d.ts.map +1 -0
- package/dist/studio/assets.js +66 -0
- package/dist/studio/assets.js.map +1 -0
- package/dist/studio/catalogue.d.ts +34 -0
- package/dist/studio/catalogue.d.ts.map +1 -0
- package/dist/studio/catalogue.js +359 -0
- package/dist/studio/catalogue.js.map +1 -0
- package/dist/studio/contrast.d.ts +16 -0
- package/dist/studio/contrast.d.ts.map +1 -0
- package/dist/studio/contrast.js +28 -0
- package/dist/studio/contrast.js.map +1 -0
- package/dist/studio/document.d.ts +61 -0
- package/dist/studio/document.d.ts.map +1 -0
- package/dist/studio/document.js +208 -0
- package/dist/studio/document.js.map +1 -0
- package/dist/studio/export.d.ts +52 -0
- package/dist/studio/export.d.ts.map +1 -0
- package/dist/studio/export.js +269 -0
- package/dist/studio/export.js.map +1 -0
- package/dist/studio/form.d.ts +15 -0
- package/dist/studio/form.d.ts.map +1 -0
- package/dist/studio/form.js +91 -0
- package/dist/studio/form.js.map +1 -0
- package/dist/studio/history.d.ts +66 -0
- package/dist/studio/history.d.ts.map +1 -0
- package/dist/studio/history.js +109 -0
- package/dist/studio/history.js.map +1 -0
- package/dist/studio/index.d.ts +16 -0
- package/dist/studio/index.d.ts.map +1 -0
- package/dist/studio/index.js +12 -0
- package/dist/studio/index.js.map +1 -0
- package/dist/studio/keys.d.ts +86 -0
- package/dist/studio/keys.d.ts.map +1 -0
- package/dist/studio/keys.js +165 -0
- package/dist/studio/keys.js.map +1 -0
- package/dist/studio/kit.d.ts +44 -0
- package/dist/studio/kit.d.ts.map +1 -0
- package/dist/studio/kit.js +114 -0
- package/dist/studio/kit.js.map +1 -0
- package/dist/studio/logo.d.ts +25 -0
- package/dist/studio/logo.d.ts.map +1 -0
- package/dist/studio/logo.js +49 -0
- package/dist/studio/logo.js.map +1 -0
- package/dist/studio/names.d.ts +18 -0
- package/dist/studio/names.d.ts.map +1 -0
- package/dist/studio/names.js +36 -0
- package/dist/studio/names.js.map +1 -0
- package/dist/studio/patch.d.ts +17 -0
- package/dist/studio/patch.d.ts.map +1 -0
- package/dist/studio/patch.js +64 -0
- package/dist/studio/patch.js.map +1 -0
- package/dist/studio/seams.d.ts +44 -0
- package/dist/studio/seams.d.ts.map +1 -0
- package/dist/studio/seams.js +36 -0
- package/dist/studio/seams.js.map +1 -0
- package/dist/studio/share.d.ts +16 -0
- package/dist/studio/share.d.ts.map +1 -0
- package/dist/studio/share.js +57 -0
- package/dist/studio/share.js.map +1 -0
- package/dist/studio/shuffle.d.ts +38 -0
- package/dist/studio/shuffle.d.ts.map +1 -0
- package/dist/studio/shuffle.js +181 -0
- package/dist/studio/shuffle.js.map +1 -0
- package/dist/studio/slices.d.ts +29 -0
- package/dist/studio/slices.d.ts.map +1 -0
- package/dist/studio/slices.js +84 -0
- package/dist/studio/slices.js.map +1 -0
- package/dist/studio/studio.d.ts +29 -0
- package/dist/studio/studio.d.ts.map +1 -0
- package/dist/studio/studio.js +1298 -0
- package/dist/studio/studio.js.map +1 -0
- package/dist/studio/symbol.d.ts +47 -0
- package/dist/studio/symbol.d.ts.map +1 -0
- package/dist/studio/symbol.js +159 -0
- package/dist/studio/symbol.js.map +1 -0
- package/dist/studio/timers.d.ts +18 -0
- package/dist/studio/timers.d.ts.map +1 -0
- package/dist/studio/timers.js +36 -0
- package/dist/studio/timers.js.map +1 -0
- package/dist/studio/types.d.ts +693 -0
- package/dist/studio/types.d.ts.map +1 -0
- package/dist/studio/types.js +26 -0
- package/dist/studio/types.js.map +1 -0
- package/dist/studio/verify.d.ts +47 -0
- package/dist/studio/verify.d.ts.map +1 -0
- package/dist/studio/verify.js +63 -0
- package/dist/studio/verify.js.map +1 -0
- package/dist/symbology/index.d.ts +8 -0
- package/dist/symbology/index.d.ts.map +1 -0
- package/dist/symbology/index.js +6 -0
- package/dist/symbology/index.js.map +1 -0
- package/dist/symbology/micro/blocks.d.ts +34 -0
- package/dist/symbology/micro/blocks.d.ts.map +1 -0
- package/dist/symbology/micro/blocks.js +63 -0
- package/dist/symbology/micro/blocks.js.map +1 -0
- package/dist/symbology/micro/entry.d.ts +70 -0
- package/dist/symbology/micro/entry.d.ts.map +1 -0
- package/dist/symbology/micro/entry.js +181 -0
- package/dist/symbology/micro/entry.js.map +1 -0
- package/dist/symbology/micro/format.d.ts +31 -0
- package/dist/symbology/micro/format.d.ts.map +1 -0
- package/dist/symbology/micro/format.js +48 -0
- package/dist/symbology/micro/format.js.map +1 -0
- package/dist/symbology/micro/index.d.ts +7 -0
- package/dist/symbology/micro/index.d.ts.map +1 -0
- package/dist/symbology/micro/index.js +5 -0
- package/dist/symbology/micro/index.js.map +1 -0
- package/dist/symbology/micro/layout.d.ts +40 -0
- package/dist/symbology/micro/layout.d.ts.map +1 -0
- package/dist/symbology/micro/layout.js +106 -0
- package/dist/symbology/micro/layout.js.map +1 -0
- package/dist/symbology/micro/mask.d.ts +25 -0
- package/dist/symbology/micro/mask.d.ts.map +1 -0
- package/dist/symbology/micro/mask.js +41 -0
- package/dist/symbology/micro/mask.js.map +1 -0
- package/dist/symbology/micro/modules.d.ts +76 -0
- package/dist/symbology/micro/modules.d.ts.map +1 -0
- package/dist/symbology/micro/modules.js +156 -0
- package/dist/symbology/micro/modules.js.map +1 -0
- package/dist/symbology/micro/profile.d.ts +16 -0
- package/dist/symbology/micro/profile.d.ts.map +1 -0
- package/dist/symbology/micro/profile.js +45 -0
- package/dist/symbology/micro/profile.js.map +1 -0
- package/dist/symbology/micro/read-helpers.d.ts +31 -0
- package/dist/symbology/micro/read-helpers.d.ts.map +1 -0
- package/dist/symbology/micro/read-helpers.js +66 -0
- package/dist/symbology/micro/read-helpers.js.map +1 -0
- package/dist/symbology/micro/tables.d.ts +63 -0
- package/dist/symbology/micro/tables.d.ts.map +1 -0
- package/dist/symbology/micro/tables.js +163 -0
- package/dist/symbology/micro/tables.js.map +1 -0
- package/dist/symbology/qr/blocks.d.ts +58 -0
- package/dist/symbology/qr/blocks.d.ts.map +1 -0
- package/dist/symbology/qr/blocks.js +176 -0
- package/dist/symbology/qr/blocks.js.map +1 -0
- package/dist/symbology/qr/build.d.ts +20 -0
- package/dist/symbology/qr/build.d.ts.map +1 -0
- package/dist/symbology/qr/build.js +91 -0
- package/dist/symbology/qr/build.js.map +1 -0
- package/dist/symbology/qr/entry.d.ts +13 -0
- package/dist/symbology/qr/entry.d.ts.map +1 -0
- package/dist/symbology/qr/entry.js +56 -0
- package/dist/symbology/qr/entry.js.map +1 -0
- package/dist/symbology/qr/index.d.ts +13 -0
- package/dist/symbology/qr/index.d.ts.map +1 -0
- package/dist/symbology/qr/index.js +9 -0
- package/dist/symbology/qr/index.js.map +1 -0
- package/dist/symbology/qr/info.d.ts +29 -0
- package/dist/symbology/qr/info.d.ts.map +1 -0
- package/dist/symbology/qr/info.js +53 -0
- package/dist/symbology/qr/info.js.map +1 -0
- package/dist/symbology/qr/layout.d.ts +37 -0
- package/dist/symbology/qr/layout.d.ts.map +1 -0
- package/dist/symbology/qr/layout.js +174 -0
- package/dist/symbology/qr/layout.js.map +1 -0
- package/dist/symbology/qr/mask.d.ts +35 -0
- package/dist/symbology/qr/mask.d.ts.map +1 -0
- package/dist/symbology/qr/mask.js +113 -0
- package/dist/symbology/qr/mask.js.map +1 -0
- package/dist/symbology/qr/read.d.ts +43 -0
- package/dist/symbology/qr/read.d.ts.map +1 -0
- package/dist/symbology/qr/read.js +219 -0
- package/dist/symbology/qr/read.js.map +1 -0
- package/dist/symbology/qr/tables.d.ts +62 -0
- package/dist/symbology/qr/tables.d.ts.map +1 -0
- package/dist/symbology/qr/tables.js +337 -0
- package/dist/symbology/qr/tables.js.map +1 -0
- package/dist/symbology/registry.d.ts +11 -0
- package/dist/symbology/registry.d.ts.map +1 -0
- package/dist/symbology/registry.js +19 -0
- package/dist/symbology/registry.js.map +1 -0
- package/dist/symbology/rmqr/entry.d.ts +56 -0
- package/dist/symbology/rmqr/entry.d.ts.map +1 -0
- package/dist/symbology/rmqr/entry.js +165 -0
- package/dist/symbology/rmqr/entry.js.map +1 -0
- package/dist/symbology/rmqr/format.d.ts +45 -0
- package/dist/symbology/rmqr/format.d.ts.map +1 -0
- package/dist/symbology/rmqr/format.js +72 -0
- package/dist/symbology/rmqr/format.js.map +1 -0
- package/dist/symbology/rmqr/index.d.ts +5 -0
- package/dist/symbology/rmqr/index.d.ts.map +1 -0
- package/dist/symbology/rmqr/index.js +5 -0
- package/dist/symbology/rmqr/index.js.map +1 -0
- package/dist/symbology/rmqr/layout.d.ts +46 -0
- package/dist/symbology/rmqr/layout.d.ts.map +1 -0
- package/dist/symbology/rmqr/layout.js +196 -0
- package/dist/symbology/rmqr/layout.js.map +1 -0
- package/dist/symbology/rmqr/profile.d.ts +15 -0
- package/dist/symbology/rmqr/profile.d.ts.map +1 -0
- package/dist/symbology/rmqr/profile.js +52 -0
- package/dist/symbology/rmqr/profile.js.map +1 -0
- package/dist/symbology/rmqr/tables.d.ts +62 -0
- package/dist/symbology/rmqr/tables.d.ts.map +1 -0
- package/dist/symbology/rmqr/tables.js +194 -0
- package/dist/symbology/rmqr/tables.js.map +1 -0
- package/dist/symbology/roles.d.ts +19 -0
- package/dist/symbology/roles.d.ts.map +1 -0
- package/dist/symbology/roles.js +35 -0
- package/dist/symbology/roles.js.map +1 -0
- package/dist/symbology/types.d.ts +126 -0
- package/dist/symbology/types.d.ts.map +1 -0
- package/dist/symbology/types.js +11 -0
- package/dist/symbology/types.js.map +1 -0
- package/dist/text/base64.d.ts +11 -0
- package/dist/text/base64.d.ts.map +1 -0
- package/dist/text/base64.js +49 -0
- package/dist/text/base64.js.map +1 -0
- package/dist/text/cmap.d.ts +17 -0
- package/dist/text/cmap.d.ts.map +1 -0
- package/dist/text/cmap.js +161 -0
- package/dist/text/cmap.js.map +1 -0
- package/dist/text/compiled.d.ts +52 -0
- package/dist/text/compiled.d.ts.map +1 -0
- package/dist/text/compiled.js +220 -0
- package/dist/text/compiled.js.map +1 -0
- package/dist/text/errors.d.ts +34 -0
- package/dist/text/errors.d.ts.map +1 -0
- package/dist/text/errors.js +26 -0
- package/dist/text/errors.js.map +1 -0
- package/dist/text/font.d.ts +29 -0
- package/dist/text/font.d.ts.map +1 -0
- package/dist/text/font.js +67 -0
- package/dist/text/font.js.map +1 -0
- package/dist/text/glyf.d.ts +62 -0
- package/dist/text/glyf.d.ts.map +1 -0
- package/dist/text/glyf.js +276 -0
- package/dist/text/glyf.js.map +1 -0
- package/dist/text/index.d.ts +13 -0
- package/dist/text/index.d.ts.map +1 -0
- package/dist/text/index.js +9 -0
- package/dist/text/index.js.map +1 -0
- package/dist/text/kerning.d.ts +36 -0
- package/dist/text/kerning.d.ts.map +1 -0
- package/dist/text/kerning.js +382 -0
- package/dist/text/kerning.js.map +1 -0
- package/dist/text/layout.d.ts +35 -0
- package/dist/text/layout.d.ts.map +1 -0
- package/dist/text/layout.js +287 -0
- package/dist/text/layout.js.map +1 -0
- package/dist/text/outline.d.ts +22 -0
- package/dist/text/outline.d.ts.map +1 -0
- package/dist/text/outline.js +79 -0
- package/dist/text/outline.js.map +1 -0
- package/dist/text/reader.d.ts +43 -0
- package/dist/text/reader.d.ts.map +1 -0
- package/dist/text/reader.js +83 -0
- package/dist/text/reader.js.map +1 -0
- package/dist/text/registry.d.ts +21 -0
- package/dist/text/registry.d.ts.map +1 -0
- package/dist/text/registry.js +32 -0
- package/dist/text/registry.js.map +1 -0
- package/dist/text/truetype.d.ts +44 -0
- package/dist/text/truetype.d.ts.map +1 -0
- package/dist/text/truetype.js +127 -0
- package/dist/text/truetype.js.map +1 -0
- package/dist/text/types.d.ts +106 -0
- package/dist/text/types.d.ts.map +1 -0
- package/dist/text/types.js +11 -0
- package/dist/text/types.js.map +1 -0
- package/dist/verify/camera.d.ts +59 -0
- package/dist/verify/camera.d.ts.map +1 -0
- package/dist/verify/camera.js +76 -0
- package/dist/verify/camera.js.map +1 -0
- package/dist/verify/capture.d.ts +40 -0
- package/dist/verify/capture.d.ts.map +1 -0
- package/dist/verify/capture.js +118 -0
- package/dist/verify/capture.js.map +1 -0
- package/dist/verify/coverage.d.ts +61 -0
- package/dist/verify/coverage.d.ts.map +1 -0
- package/dist/verify/coverage.js +90 -0
- package/dist/verify/coverage.js.map +1 -0
- package/dist/verify/degrade.d.ts +143 -0
- package/dist/verify/degrade.d.ts.map +1 -0
- package/dist/verify/degrade.js +503 -0
- package/dist/verify/degrade.js.map +1 -0
- package/dist/verify/fixes.d.ts +28 -0
- package/dist/verify/fixes.d.ts.map +1 -0
- package/dist/verify/fixes.js +277 -0
- package/dist/verify/fixes.js.map +1 -0
- package/dist/verify/homography.d.ts +32 -0
- package/dist/verify/homography.d.ts.map +1 -0
- package/dist/verify/homography.js +79 -0
- package/dist/verify/homography.js.map +1 -0
- package/dist/verify/index.d.ts +17 -0
- package/dist/verify/index.d.ts.map +1 -0
- package/dist/verify/index.js +11 -0
- package/dist/verify/index.js.map +1 -0
- package/dist/verify/inks.d.ts +39 -0
- package/dist/verify/inks.d.ts.map +1 -0
- package/dist/verify/inks.js +101 -0
- package/dist/verify/inks.js.map +1 -0
- package/dist/verify/job.d.ts +89 -0
- package/dist/verify/job.d.ts.map +1 -0
- package/dist/verify/job.js +314 -0
- package/dist/verify/job.js.map +1 -0
- package/dist/verify/keys.d.ts +92 -0
- package/dist/verify/keys.d.ts.map +1 -0
- package/dist/verify/keys.js +95 -0
- package/dist/verify/keys.js.map +1 -0
- package/dist/verify/ladders.d.ts +68 -0
- package/dist/verify/ladders.d.ts.map +1 -0
- package/dist/verify/ladders.js +154 -0
- package/dist/verify/ladders.js.map +1 -0
- package/dist/verify/prepare.d.ts +78 -0
- package/dist/verify/prepare.d.ts.map +1 -0
- package/dist/verify/prepare.js +307 -0
- package/dist/verify/prepare.js.map +1 -0
- package/dist/verify/preset.d.ts +111 -0
- package/dist/verify/preset.d.ts.map +1 -0
- package/dist/verify/preset.js +200 -0
- package/dist/verify/preset.js.map +1 -0
- package/dist/verify/read.d.ts +23 -0
- package/dist/verify/read.d.ts.map +1 -0
- package/dist/verify/read.js +55 -0
- package/dist/verify/read.js.map +1 -0
- package/dist/verify/region.d.ts +37 -0
- package/dist/verify/region.d.ts.map +1 -0
- package/dist/verify/region.js +80 -0
- package/dist/verify/region.js.map +1 -0
- package/dist/verify/static.d.ts +56 -0
- package/dist/verify/static.d.ts.map +1 -0
- package/dist/verify/static.js +277 -0
- package/dist/verify/static.js.map +1 -0
- package/dist/verify/types.d.ts +173 -0
- package/dist/verify/types.d.ts.map +1 -0
- package/dist/verify/types.js +36 -0
- package/dist/verify/types.js.map +1 -0
- package/package.json +191 -5
|
@@ -0,0 +1,1298 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The headless studio: the one controller both interfaces render.
|
|
3
|
+
*
|
|
4
|
+
* Everything a person can do is an action (`dispatch`) or a command (`run`),
|
|
5
|
+
* and everything a view shows is in the snapshot, so a view holds no document
|
|
6
|
+
* state of its own. The website reads it through `useSyncExternalStore`; the
|
|
7
|
+
* offline app subscribes and draws. Both see the same snapshot object until
|
|
8
|
+
* something changes, and a part of it that did not change keeps its identity,
|
|
9
|
+
* so either can skip drawing what is the same.
|
|
10
|
+
*
|
|
11
|
+
* The expensive parts of a snapshot (the form, the symbol, the preview, the
|
|
12
|
+
* catalogue) are worked out when a view first reads them and are kept for as
|
|
13
|
+
* long as what they depend on is the same object. Typing fast therefore
|
|
14
|
+
* builds no scene for a keystroke nobody drew.
|
|
15
|
+
*
|
|
16
|
+
* Nothing a person can do makes this throw. An action that cannot be done
|
|
17
|
+
* changes nothing and says why in `snapshot.refusal`; a command that cannot
|
|
18
|
+
* be done resolves to a failed Result. Only a caller's mistake (an action of
|
|
19
|
+
* no known type, an option of the wrong kind) throws, as a TypeError.
|
|
20
|
+
*/
|
|
21
|
+
import { CancelledError, QrStudioError } from '../core/errors.js';
|
|
22
|
+
import { issue } from '../core/issue.js';
|
|
23
|
+
import { err, ok } from '../core/result.js';
|
|
24
|
+
import { applyConstraints } from '../design/constraints.js';
|
|
25
|
+
import { designLink } from '../design/link.js';
|
|
26
|
+
import { buildScene } from '../design/scene.js';
|
|
27
|
+
import { validateDesign } from '../design/validate.js';
|
|
28
|
+
import { detectPayload } from '../payload/detect.js';
|
|
29
|
+
import { epsIssues, sceneToEps } from '../render/eps.js';
|
|
30
|
+
import { sceneToPdf } from '../render/pdf.js';
|
|
31
|
+
import { sceneToSvg } from '../render/svg.js';
|
|
32
|
+
import { csvFallbackOption, decodeCsvBytes } from '../batch/text-decoding.js';
|
|
33
|
+
import { parseCsv } from '../batch/csv.js';
|
|
34
|
+
import { planBatch } from '../batch/plan.js';
|
|
35
|
+
import { runBatch } from '../batch/run.js';
|
|
36
|
+
import { scanCheckVerifier } from '../batch/verify.js';
|
|
37
|
+
import { createRegistries } from '../registries.js';
|
|
38
|
+
import { createFontRegistry } from '../text/registry.js';
|
|
39
|
+
import { AssetCache } from './assets.js';
|
|
40
|
+
import { buildCatalogue, presetThumbnails, registryVersions } from './catalogue.js';
|
|
41
|
+
import { conditionsFrom, designFrom, documentFrom, documentFromLink, defaultDocument, fieldsFor, isFieldValue, } from './document.js';
|
|
42
|
+
import { exportSymbol } from './export.js';
|
|
43
|
+
import { formView } from './form.js';
|
|
44
|
+
import { EMPTY_HISTORY, beginGroup, breakRun, cancelGroup, commitGroup, recordChange, redo, sameWork, undo, } from './history.js';
|
|
45
|
+
import { applyKit } from './kit.js';
|
|
46
|
+
import { STUDIO_KEYS, asStudioError, studioError } from './keys.js';
|
|
47
|
+
import { applyPatch, pathProblem } from './patch.js';
|
|
48
|
+
import { sameJson, share } from './share.js';
|
|
49
|
+
import { driveInSlices } from './slices.js';
|
|
50
|
+
import { trackedScheduler } from './timers.js';
|
|
51
|
+
import { conformingPairs, shuffleDesign } from './shuffle.js';
|
|
52
|
+
import { contentOf, encodeContent, optionsKey, symbolView } from './symbol.js';
|
|
53
|
+
import { FULL_CAPTURE_SEEDS, LIVE_CAPTURE_SEEDS, UNAVAILABLE_RUNNER, slicedVerifyRunner, verifyJob, } from './verify.js';
|
|
54
|
+
import { inspectImage, inspectText } from '../inspect/inspect.js';
|
|
55
|
+
import { runVerifyJob } from '../verify/job.js';
|
|
56
|
+
import { applyDesignPatch, suggestFixes as suggestVerifyFixes } from '../verify/fixes.js';
|
|
57
|
+
const DEFAULT_HISTORY_LIMIT = 200;
|
|
58
|
+
const DEFAULT_DEBOUNCE_MS = 250;
|
|
59
|
+
/** Longer than any code holds, by a wide margin, and short enough that a pasted book is refused at once. */
|
|
60
|
+
export const MAX_RAW_TEXT = 16384;
|
|
61
|
+
/** A design file is a few kilobytes; one with four logos is a few hundred. */
|
|
62
|
+
export const MAX_DESIGN_FILE = 4 * 1024 * 1024;
|
|
63
|
+
const MODES = ['create', 'scan', 'bulk'];
|
|
64
|
+
/** The inspect layer's own reader. */
|
|
65
|
+
const DEFAULT_INSPECTOR = Object.freeze({ image: inspectImage, text: inspectText });
|
|
66
|
+
/** render's own print writers. */
|
|
67
|
+
const RENDER_PRINTER = Object.freeze({ pdf: sceneToPdf, eps: sceneToEps });
|
|
68
|
+
/** setTimeout, in slices of about 8 ms. */
|
|
69
|
+
export const DEFAULT_SCHEDULER = Object.freeze({
|
|
70
|
+
later(task, delayMs) {
|
|
71
|
+
const handle = setTimeout(task, delayMs);
|
|
72
|
+
return () => clearTimeout(handle);
|
|
73
|
+
},
|
|
74
|
+
sliceMs: 8,
|
|
75
|
+
});
|
|
76
|
+
function defaultClock() {
|
|
77
|
+
return typeof performance !== 'undefined' ? performance.now() : Date.now();
|
|
78
|
+
}
|
|
79
|
+
/** A one-argument cache that remembers the last few results by the identity of their inputs. */
|
|
80
|
+
function memo(compute, keep = 4) {
|
|
81
|
+
const entries = [];
|
|
82
|
+
return (...args) => {
|
|
83
|
+
for (const entry of entries) {
|
|
84
|
+
if (entry.args.length === args.length && entry.args.every((arg, i) => arg === args[i])) {
|
|
85
|
+
return entry.value;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
const value = compute(...args);
|
|
89
|
+
entries.unshift({ args, value });
|
|
90
|
+
if (entries.length > keep)
|
|
91
|
+
entries.pop();
|
|
92
|
+
return value;
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
function frozen(value) {
|
|
96
|
+
return Object.freeze(value);
|
|
97
|
+
}
|
|
98
|
+
export function createStudio(options = {}) {
|
|
99
|
+
if (typeof options !== 'object' || options === null) {
|
|
100
|
+
throw new TypeError('createStudio: options is an object.');
|
|
101
|
+
}
|
|
102
|
+
const registries = options.registries ?? createRegistries();
|
|
103
|
+
const historyLimit = options.historyLimit ?? DEFAULT_HISTORY_LIMIT;
|
|
104
|
+
if (!Number.isInteger(historyLimit) || historyLimit < 0) {
|
|
105
|
+
throw new TypeError('createStudio: historyLimit is a whole number, 0 or more.');
|
|
106
|
+
}
|
|
107
|
+
const debounceMs = options.verifyDebounceMs ?? DEFAULT_DEBOUNCE_MS;
|
|
108
|
+
if (typeof debounceMs !== 'number' || !Number.isFinite(debounceMs) || debounceMs < 0) {
|
|
109
|
+
throw new TypeError('createStudio: verifyDebounceMs is a number of milliseconds, 0 or more.');
|
|
110
|
+
}
|
|
111
|
+
const liveSeeds = options.liveCaptureSeeds ?? LIVE_CAPTURE_SEEDS;
|
|
112
|
+
if (!Number.isInteger(liveSeeds) || liveSeeds < 1 || liveSeeds > FULL_CAPTURE_SEEDS) {
|
|
113
|
+
throw new TypeError('createStudio: liveCaptureSeeds is a whole number from 1 to 8.');
|
|
114
|
+
}
|
|
115
|
+
const seed = options.seed ?? 1;
|
|
116
|
+
if (!Number.isInteger(seed) || seed < 0 || seed > 0xffffffff) {
|
|
117
|
+
throw new TypeError('createStudio: seed is an integer from 0 to 2^32 - 1.');
|
|
118
|
+
}
|
|
119
|
+
const csvFallback = csvFallbackOption(options.csvFallbackEncoding, 'createStudio: csvFallbackEncoding is');
|
|
120
|
+
const clock = options.clock ?? defaultClock;
|
|
121
|
+
const suggestFixes = options.suggestFixes ??
|
|
122
|
+
((report, design) => suggestVerifyFixes(report, design, registries.design));
|
|
123
|
+
// The inspector by default; null leaves reading codes out of this copy.
|
|
124
|
+
const inspector = options.inspector === undefined ? DEFAULT_INSPECTOR : options.inspector;
|
|
125
|
+
const library = options.library ?? null;
|
|
126
|
+
const assets = new AssetCache();
|
|
127
|
+
// One registry for checking captions and for drawing them, so a font a
|
|
128
|
+
// website registers at runtime is seen by both.
|
|
129
|
+
const fonts = options.fonts ?? createFontRegistry();
|
|
130
|
+
// Every timer this studio starts, so dispose can stop them all.
|
|
131
|
+
const timers = trackedScheduler(options.scheduler ?? DEFAULT_SCHEDULER);
|
|
132
|
+
const later = (task, delayMs) => timers.later(task, delayMs);
|
|
133
|
+
// The default runner steps verify's generator in slices on this thread,
|
|
134
|
+
// through the tracked timers above so dispose stops it too.
|
|
135
|
+
const generator = options.verifyGenerator === undefined ? runVerifyJob : options.verifyGenerator;
|
|
136
|
+
const runner = options.verifyRunner ??
|
|
137
|
+
(generator === null
|
|
138
|
+
? UNAVAILABLE_RUNNER
|
|
139
|
+
: slicedVerifyRunner(generator, {
|
|
140
|
+
registries,
|
|
141
|
+
scheduler: timers,
|
|
142
|
+
clock,
|
|
143
|
+
}));
|
|
144
|
+
// The document and everything about it that is not derived.
|
|
145
|
+
let initialIssues = [];
|
|
146
|
+
let document;
|
|
147
|
+
if (typeof options.initial === 'string') {
|
|
148
|
+
const opened = documentFromLink(options.initial, registries);
|
|
149
|
+
document = opened.document;
|
|
150
|
+
initialIssues = opened.issues;
|
|
151
|
+
}
|
|
152
|
+
else if (options.initial !== undefined) {
|
|
153
|
+
const opened = documentFrom(options.initial, registries, fonts);
|
|
154
|
+
document = opened.document;
|
|
155
|
+
initialIssues = opened.issues;
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
document = defaultDocument(registries);
|
|
159
|
+
}
|
|
160
|
+
let revision = 0;
|
|
161
|
+
let history = EMPTY_HISTORY;
|
|
162
|
+
let refusal = initialIssues.length === 0
|
|
163
|
+
? null
|
|
164
|
+
: frozen({ action: 'initial', issues: frozen(initialIssues) });
|
|
165
|
+
let verify = frozen({ status: 'idle' });
|
|
166
|
+
let lastDone = null;
|
|
167
|
+
let inspect = frozen({ status: 'idle' });
|
|
168
|
+
let batch = frozen({ status: 'idle' });
|
|
169
|
+
let batchRun = null;
|
|
170
|
+
let libraryState = frozen(library === null ? { status: 'unavailable' } : { status: 'checking' });
|
|
171
|
+
let disposed = false;
|
|
172
|
+
const listeners = new Set();
|
|
173
|
+
// Derived state, each part kept for as long as its inputs are the same objects.
|
|
174
|
+
// A document's type is always one the registry holds: every way in
|
|
175
|
+
// (documentFrom, payload/type, payload/raw) checks, and a registry never
|
|
176
|
+
// loses an entry.
|
|
177
|
+
const typeOf = (id) => registries.payloads.require(id);
|
|
178
|
+
const constrained = memo((design, type) => {
|
|
179
|
+
const applied = applyConstraints(design, type.constraints);
|
|
180
|
+
const validated = validateDesign(design, registries.design, { fonts }).issues;
|
|
181
|
+
return frozen({
|
|
182
|
+
effective: share(design, applied.design),
|
|
183
|
+
issues: frozen([...validated, ...applied.issues]),
|
|
184
|
+
locked: type.constraints?.designLocked === true,
|
|
185
|
+
overlay: applied.overlay,
|
|
186
|
+
});
|
|
187
|
+
});
|
|
188
|
+
const contentFor = memo((type, fields) => contentOf(type, fields));
|
|
189
|
+
const encodeCache = new Map();
|
|
190
|
+
const encodeCached = (text, design) => {
|
|
191
|
+
const key = `${registries.symbologies.version}\u0000${optionsKey(design)}\u0000${text}`;
|
|
192
|
+
let found = encodeCache.get(key);
|
|
193
|
+
if (found === undefined) {
|
|
194
|
+
found = encodeContent(text, design, registries.symbologies);
|
|
195
|
+
encodeCache.set(key, found);
|
|
196
|
+
while (encodeCache.size > 8)
|
|
197
|
+
encodeCache.delete(encodeCache.keys().next().value);
|
|
198
|
+
}
|
|
199
|
+
return found;
|
|
200
|
+
};
|
|
201
|
+
let lastGood = null;
|
|
202
|
+
const viewFor = memo((symbol, text, design) => symbolView(symbol, text, design, registries.symbologies));
|
|
203
|
+
const okState = memo((view) => frozen({ status: 'ok', view }));
|
|
204
|
+
const shownFor = memo((content, design, last) => {
|
|
205
|
+
let reason;
|
|
206
|
+
if (content.ok) {
|
|
207
|
+
const encoded = encodeCached(content.text, design);
|
|
208
|
+
if (encoded.ok) {
|
|
209
|
+
if (last?.symbol !== encoded.symbol)
|
|
210
|
+
lastGood = { text: content.text, symbol: encoded.symbol };
|
|
211
|
+
const view = viewFor(encoded.symbol, content.text, design);
|
|
212
|
+
return { state: okState(view), symbol: encoded.symbol, design };
|
|
213
|
+
}
|
|
214
|
+
reason = encoded.issue;
|
|
215
|
+
}
|
|
216
|
+
else {
|
|
217
|
+
reason = content.reason;
|
|
218
|
+
}
|
|
219
|
+
if (last === null) {
|
|
220
|
+
return { state: frozen({ status: 'empty', issue: reason }), symbol: null, design };
|
|
221
|
+
}
|
|
222
|
+
// The last content that worked, drawn with the design as it is now if it
|
|
223
|
+
// still fits, and as it was if the design no longer allows it.
|
|
224
|
+
const again = encodeCached(last.text, design);
|
|
225
|
+
const symbol = again.ok ? again.symbol : last.symbol;
|
|
226
|
+
const view = viewFor(symbol, last.text, design);
|
|
227
|
+
return { state: frozen({ status: 'stale', view, issue: reason }), symbol, design };
|
|
228
|
+
}, 2);
|
|
229
|
+
const formFor = memo((type, fields, issues) => formView(type, fields, issues));
|
|
230
|
+
const previewFor = memo((symbol, design, overlay) => {
|
|
231
|
+
if (symbol === null)
|
|
232
|
+
return null;
|
|
233
|
+
try {
|
|
234
|
+
const built = buildScene(symbol, design, {
|
|
235
|
+
registries: registries.design,
|
|
236
|
+
assets: assets.lookup(design),
|
|
237
|
+
fonts,
|
|
238
|
+
seed,
|
|
239
|
+
overlay,
|
|
240
|
+
});
|
|
241
|
+
return frozen({
|
|
242
|
+
svg: sceneToSvg(built.scene),
|
|
243
|
+
scene: built.scene,
|
|
244
|
+
issues: built.issues,
|
|
245
|
+
epsIssues: frozen([...epsIssues(built.scene)]),
|
|
246
|
+
});
|
|
247
|
+
}
|
|
248
|
+
catch {
|
|
249
|
+
// A shape or frame of somebody else's that throws while it draws. The
|
|
250
|
+
// symbol state still says what the code is; there is just no picture.
|
|
251
|
+
return null;
|
|
252
|
+
}
|
|
253
|
+
}, 2);
|
|
254
|
+
let catalogueCache = null;
|
|
255
|
+
const catalogue = () => {
|
|
256
|
+
const key = registryVersions(registries);
|
|
257
|
+
if (catalogueCache?.key !== key) {
|
|
258
|
+
catalogueCache = { key, value: buildCatalogue(registries, fonts) };
|
|
259
|
+
}
|
|
260
|
+
return catalogueCache.value;
|
|
261
|
+
};
|
|
262
|
+
const thumbnailsFor = memo((cat, symbol, type) => presetThumbnails(registries, cat, symbol, type.constraints, fonts), 2);
|
|
263
|
+
let pairsCache = null;
|
|
264
|
+
const pairs = () => {
|
|
265
|
+
const version = registries.design.regionShapes.version;
|
|
266
|
+
if (pairsCache?.version !== version)
|
|
267
|
+
pairsCache = { version, pairs: conformingPairs(registries.design) };
|
|
268
|
+
return pairsCache.pairs;
|
|
269
|
+
};
|
|
270
|
+
const historyView = memo((canUndo, canRedo) => frozen({ canUndo, canRedo }));
|
|
271
|
+
// The snapshot.
|
|
272
|
+
function makeSnapshot() {
|
|
273
|
+
const doc = document;
|
|
274
|
+
const at = revision;
|
|
275
|
+
const type = typeOf(doc.typeId);
|
|
276
|
+
const content = () => contentFor(type, doc.fields);
|
|
277
|
+
const designState = () => constrained(doc.design, type);
|
|
278
|
+
const found = shownFor(content(), designState().effective, lastGood);
|
|
279
|
+
const shown = () => found;
|
|
280
|
+
const snapshot = {
|
|
281
|
+
revision: at,
|
|
282
|
+
document: doc,
|
|
283
|
+
get form() {
|
|
284
|
+
return formFor(type, doc.fields, content().issues);
|
|
285
|
+
},
|
|
286
|
+
get payloadIssues() {
|
|
287
|
+
return content().issues;
|
|
288
|
+
},
|
|
289
|
+
get symbol() {
|
|
290
|
+
return shown().state;
|
|
291
|
+
},
|
|
292
|
+
get preview() {
|
|
293
|
+
const found = shown();
|
|
294
|
+
return previewFor(found.symbol, found.design, designState().overlay);
|
|
295
|
+
},
|
|
296
|
+
get design() {
|
|
297
|
+
return designState();
|
|
298
|
+
},
|
|
299
|
+
verify,
|
|
300
|
+
history: historyView(history.past.length > 0 ||
|
|
301
|
+
(history.group !== null && !sameWork(history.group.base, work())), history.future.length > 0),
|
|
302
|
+
get catalogue() {
|
|
303
|
+
return catalogue();
|
|
304
|
+
},
|
|
305
|
+
get presetThumbnails() {
|
|
306
|
+
const found = shown();
|
|
307
|
+
return thumbnailsFor(catalogue(), found.state.status === 'ok' ? found.symbol : null, type);
|
|
308
|
+
},
|
|
309
|
+
inspect,
|
|
310
|
+
batch,
|
|
311
|
+
library: libraryState,
|
|
312
|
+
refusal,
|
|
313
|
+
};
|
|
314
|
+
return Object.freeze(snapshot);
|
|
315
|
+
}
|
|
316
|
+
let snapshot = makeSnapshot();
|
|
317
|
+
let snapshotVersions = registryVersions(registries);
|
|
318
|
+
function notify() {
|
|
319
|
+
snapshot = makeSnapshot();
|
|
320
|
+
snapshotVersions = registryVersions(registries);
|
|
321
|
+
let first;
|
|
322
|
+
let threw = false;
|
|
323
|
+
for (const listener of [...listeners]) {
|
|
324
|
+
try {
|
|
325
|
+
listener();
|
|
326
|
+
}
|
|
327
|
+
catch (thrown) {
|
|
328
|
+
// Every listener hears about the change; the first failure is
|
|
329
|
+
// rethrown after, so one broken view does not starve the others.
|
|
330
|
+
if (!threw)
|
|
331
|
+
first = thrown;
|
|
332
|
+
threw = true;
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
if (threw)
|
|
336
|
+
throw first;
|
|
337
|
+
}
|
|
338
|
+
// Verify.
|
|
339
|
+
let verifyArmed = false;
|
|
340
|
+
let verifyTimer = null;
|
|
341
|
+
let verifyRun = null;
|
|
342
|
+
let verifyRuns = 0;
|
|
343
|
+
/** What the last job was made from, so a change that does not touch it starts nothing. */
|
|
344
|
+
let verifyInputs = null;
|
|
345
|
+
function stopRun() {
|
|
346
|
+
if (verifyRun !== null) {
|
|
347
|
+
verifyRun.controller.abort();
|
|
348
|
+
verifyRun = null;
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
const IDLE = frozen({ status: 'idle' });
|
|
352
|
+
const staleOf = memo((done) => frozen({ ...done, stale: true }), 1);
|
|
353
|
+
/** Not running: the last report, marked stale, or nothing. */
|
|
354
|
+
function idleVerify() {
|
|
355
|
+
return lastDone === null ? IDLE : staleOf(lastDone);
|
|
356
|
+
}
|
|
357
|
+
// How thorough the next check is: the full count when someone asks for it,
|
|
358
|
+
// the live count when it runs again by itself after a change.
|
|
359
|
+
let nextSeeds = FULL_CAPTURE_SEEDS;
|
|
360
|
+
function scheduleVerify(seeds) {
|
|
361
|
+
nextSeeds = seeds;
|
|
362
|
+
verifyTimer?.();
|
|
363
|
+
verifyTimer = later(startVerify, debounceMs);
|
|
364
|
+
}
|
|
365
|
+
function startVerify() {
|
|
366
|
+
verifyTimer = null;
|
|
367
|
+
const type = typeOf(document.typeId);
|
|
368
|
+
const content = contentFor(type, document.fields);
|
|
369
|
+
const design = constrained(document.design, type).effective;
|
|
370
|
+
verifyInputs = { content, design, conditions: document.conditions };
|
|
371
|
+
stopRun();
|
|
372
|
+
// No code to check: the content cannot be made, or is too long to fit.
|
|
373
|
+
const encoded = content.ok ? encodeCached(content.text, design) : null;
|
|
374
|
+
if (!content.ok || encoded === null || !encoded.ok) {
|
|
375
|
+
verify = idleVerify();
|
|
376
|
+
notify();
|
|
377
|
+
return;
|
|
378
|
+
}
|
|
379
|
+
const id = (verifyRuns += 1);
|
|
380
|
+
const controller = new AbortController();
|
|
381
|
+
verifyRun = { id, controller };
|
|
382
|
+
const at = revision;
|
|
383
|
+
const { overlay } = constrained(document.design, type);
|
|
384
|
+
const captureSeeds = nextSeeds;
|
|
385
|
+
const full = captureSeeds === FULL_CAPTURE_SEEDS;
|
|
386
|
+
const job = verifyJob({
|
|
387
|
+
content: content.text,
|
|
388
|
+
design,
|
|
389
|
+
conditions: checkedConditions(encoded.symbol, design, overlay),
|
|
390
|
+
seed,
|
|
391
|
+
assets: assets.all(design),
|
|
392
|
+
overlay,
|
|
393
|
+
captureSeeds,
|
|
394
|
+
});
|
|
395
|
+
verify = frozen({
|
|
396
|
+
status: 'running',
|
|
397
|
+
progress: 0,
|
|
398
|
+
revision: at,
|
|
399
|
+
axis: null,
|
|
400
|
+
captureSeeds,
|
|
401
|
+
full,
|
|
402
|
+
});
|
|
403
|
+
notify();
|
|
404
|
+
const current = () => !disposed && verifyRun?.id === id;
|
|
405
|
+
const progress = (p) => {
|
|
406
|
+
if (!current())
|
|
407
|
+
return;
|
|
408
|
+
const fraction = p.total > 0 ? Math.min(1, Math.max(0, p.done / p.total)) : 0;
|
|
409
|
+
verify = frozen({
|
|
410
|
+
status: 'running',
|
|
411
|
+
progress: fraction,
|
|
412
|
+
revision: at,
|
|
413
|
+
axis: p.axis,
|
|
414
|
+
captureSeeds,
|
|
415
|
+
full,
|
|
416
|
+
});
|
|
417
|
+
notify();
|
|
418
|
+
};
|
|
419
|
+
const settle = (result) => {
|
|
420
|
+
if (!current())
|
|
421
|
+
return;
|
|
422
|
+
verifyRun = null;
|
|
423
|
+
if (result.ok) {
|
|
424
|
+
const report = result.value;
|
|
425
|
+
let fixes = [];
|
|
426
|
+
try {
|
|
427
|
+
fixes = suggestFixes(report, design);
|
|
428
|
+
}
|
|
429
|
+
catch {
|
|
430
|
+
fixes = [];
|
|
431
|
+
}
|
|
432
|
+
lastDone = frozen({
|
|
433
|
+
status: 'done',
|
|
434
|
+
report,
|
|
435
|
+
fixes: frozen([...fixes]),
|
|
436
|
+
stale: false,
|
|
437
|
+
revision: at,
|
|
438
|
+
captureSeeds,
|
|
439
|
+
full,
|
|
440
|
+
});
|
|
441
|
+
verify = lastDone;
|
|
442
|
+
}
|
|
443
|
+
else if (result.error.code === 'cancelled') {
|
|
444
|
+
verify = idleVerify();
|
|
445
|
+
}
|
|
446
|
+
else {
|
|
447
|
+
verify = frozen({ status: 'failed', error: studioError(result.error), revision: at });
|
|
448
|
+
}
|
|
449
|
+
notify();
|
|
450
|
+
};
|
|
451
|
+
let pending;
|
|
452
|
+
try {
|
|
453
|
+
pending = runner.run(job, controller.signal, progress);
|
|
454
|
+
}
|
|
455
|
+
catch (thrown) {
|
|
456
|
+
pending = Promise.resolve(err(asStudioError(thrown, 'platform/unavailable')));
|
|
457
|
+
}
|
|
458
|
+
pending.then(settle, (thrown) => settle(err(asStudioError(thrown, 'platform/unavailable'))));
|
|
459
|
+
}
|
|
460
|
+
/**
|
|
461
|
+
* The conditions a check runs at. When the design is printed at a size of
|
|
462
|
+
* its own, that is the size checked: the symbol with its quiet zone, read
|
|
463
|
+
* from the scene, since the design measures its size on its own basis (the
|
|
464
|
+
* whole artwork, or the Swiss QR-bill's symbol alone). Otherwise the size
|
|
465
|
+
* the person gave the conditions.
|
|
466
|
+
*/
|
|
467
|
+
function checkedConditions(symbol, design, overlay) {
|
|
468
|
+
const units = previewFor(symbol, design, overlay)?.scene.unitsPerMm;
|
|
469
|
+
if (units === undefined)
|
|
470
|
+
return document.conditions;
|
|
471
|
+
const sizeMm = (symbol.matrix.width + 2 * design.quietZone) / units;
|
|
472
|
+
return frozen({ ...document.conditions, sizeMm });
|
|
473
|
+
}
|
|
474
|
+
/** After a change: start the check again if what it checks has changed. */
|
|
475
|
+
function verifyAfterChange() {
|
|
476
|
+
if (!verifyArmed || verifyInputs === null)
|
|
477
|
+
return;
|
|
478
|
+
const type = typeOf(document.typeId);
|
|
479
|
+
const content = contentFor(type, document.fields);
|
|
480
|
+
const design = constrained(document.design, type).effective;
|
|
481
|
+
const same = content === verifyInputs.content &&
|
|
482
|
+
design === verifyInputs.design &&
|
|
483
|
+
document.conditions === verifyInputs.conditions;
|
|
484
|
+
if (same)
|
|
485
|
+
return;
|
|
486
|
+
verifyInputs = { content, design, conditions: document.conditions };
|
|
487
|
+
if (verifyRun !== null) {
|
|
488
|
+
stopRun();
|
|
489
|
+
verify = idleVerify();
|
|
490
|
+
}
|
|
491
|
+
else if (verify.status === 'done' && !verify.stale) {
|
|
492
|
+
verify = idleVerify();
|
|
493
|
+
}
|
|
494
|
+
scheduleVerify(liveSeeds);
|
|
495
|
+
}
|
|
496
|
+
// Changes.
|
|
497
|
+
const work = () => ({
|
|
498
|
+
typeId: document.typeId,
|
|
499
|
+
fields: document.fields,
|
|
500
|
+
design: document.design,
|
|
501
|
+
});
|
|
502
|
+
function refuse(action, issues) {
|
|
503
|
+
refusal = frozen({ action, issues: frozen([...issues]) });
|
|
504
|
+
notify();
|
|
505
|
+
}
|
|
506
|
+
/** The document changed: a new revision, the refusal cleared, the check told. */
|
|
507
|
+
function changed(next) {
|
|
508
|
+
document = Object.freeze(next);
|
|
509
|
+
revision += 1;
|
|
510
|
+
refusal = null;
|
|
511
|
+
verifyAfterChange();
|
|
512
|
+
notify();
|
|
513
|
+
}
|
|
514
|
+
function changeWork(next, coalesce) {
|
|
515
|
+
history = recordChange(history, work(), coalesce, historyLimit);
|
|
516
|
+
changed({ ...document, ...next });
|
|
517
|
+
}
|
|
518
|
+
function restore(target) {
|
|
519
|
+
changed({ ...document, typeId: target.typeId, fields: target.fields, design: target.design });
|
|
520
|
+
}
|
|
521
|
+
/**
|
|
522
|
+
* A new design for the document, from anything: migrated, validated,
|
|
523
|
+
* shared with the old one where they agree, and refused if the content's
|
|
524
|
+
* constraints would undo it.
|
|
525
|
+
*/
|
|
526
|
+
function prepareDesign(input, path) {
|
|
527
|
+
const checked = designFrom(input, registries, fonts);
|
|
528
|
+
if (checked.design === null)
|
|
529
|
+
return { kind: 'refuse', issues: checked.issues };
|
|
530
|
+
const current = document.design;
|
|
531
|
+
const next = share(current, checked.design);
|
|
532
|
+
if (next === current) {
|
|
533
|
+
// Nothing a design holds changed: an unknown key the validator
|
|
534
|
+
// dropped, say. Said, so the view does not seem to ignore the person.
|
|
535
|
+
const said = checked.issues.filter((found) => found.severity !== 'info');
|
|
536
|
+
return said.length > 0 && !sameJson(input, current)
|
|
537
|
+
? { kind: 'refuse', issues: said }
|
|
538
|
+
: { kind: 'same' };
|
|
539
|
+
}
|
|
540
|
+
const type = typeOf(document.typeId);
|
|
541
|
+
const { constraints } = type;
|
|
542
|
+
if (constraints !== undefined &&
|
|
543
|
+
sameJson(applyConstraints(current, constraints).design, applyConstraints(next, constraints).design)) {
|
|
544
|
+
const locked = constraints.designLocked === true;
|
|
545
|
+
return {
|
|
546
|
+
kind: 'refuse',
|
|
547
|
+
issues: [
|
|
548
|
+
issue(locked ? STUDIO_KEYS.designLocked : STUDIO_KEYS.constrained, path, 'warning', {
|
|
549
|
+
type: type.id,
|
|
550
|
+
}),
|
|
551
|
+
],
|
|
552
|
+
};
|
|
553
|
+
}
|
|
554
|
+
return { kind: 'change', next };
|
|
555
|
+
}
|
|
556
|
+
function changeDesign(action, input, coalesce, path) {
|
|
557
|
+
const prepared = prepareDesign(input, path);
|
|
558
|
+
if (prepared.kind === 'refuse')
|
|
559
|
+
refuse(action, prepared.issues);
|
|
560
|
+
else if (prepared.kind === 'change')
|
|
561
|
+
changeWork({ design: prepared.next }, coalesce);
|
|
562
|
+
}
|
|
563
|
+
function presetDesign(preset, current) {
|
|
564
|
+
const theirs = preset.design;
|
|
565
|
+
// The person's own picture stays when the preset brings no logo of its own.
|
|
566
|
+
const ownPicture = current.logo !== null && current.logo.source.kind === 'asset';
|
|
567
|
+
const keepLogo = theirs.logo === null && ownPicture;
|
|
568
|
+
const level = current.symbol.ecLevel;
|
|
569
|
+
const ecLevel = level !== undefined && preset.ecLevels.includes(level)
|
|
570
|
+
? level
|
|
571
|
+
: (theirs.symbol.ecLevel ?? level);
|
|
572
|
+
return {
|
|
573
|
+
...theirs,
|
|
574
|
+
symbol: { ...current.symbol, ...(ecLevel === undefined ? {} : { ecLevel }) },
|
|
575
|
+
logo: keepLogo ? current.logo : theirs.logo,
|
|
576
|
+
output: { ...current.output, colourSpace: theirs.output.colourSpace },
|
|
577
|
+
...(keepLogo && current.assets !== undefined ? { assets: current.assets } : {}),
|
|
578
|
+
...(current.name === undefined ? {} : { name: current.name }),
|
|
579
|
+
};
|
|
580
|
+
}
|
|
581
|
+
function fieldsOf(type, text) {
|
|
582
|
+
try {
|
|
583
|
+
const parsed = type.parse(text);
|
|
584
|
+
const given = {};
|
|
585
|
+
for (const [key, value] of Object.entries(parsed))
|
|
586
|
+
if (isFieldValue(value))
|
|
587
|
+
given[key] = value;
|
|
588
|
+
return fieldsFor(type, given);
|
|
589
|
+
}
|
|
590
|
+
catch {
|
|
591
|
+
return null;
|
|
592
|
+
}
|
|
593
|
+
}
|
|
594
|
+
function remake(text) {
|
|
595
|
+
if (text.length > MAX_RAW_TEXT) {
|
|
596
|
+
refuse('payload/raw', [
|
|
597
|
+
issue(STUDIO_KEYS.rawTooLong, ['text'], 'error', {
|
|
598
|
+
length: text.length,
|
|
599
|
+
max: MAX_RAW_TEXT,
|
|
600
|
+
}),
|
|
601
|
+
]);
|
|
602
|
+
return;
|
|
603
|
+
}
|
|
604
|
+
const detected = detectPayload(text, registries.payloads).type;
|
|
605
|
+
// detectPayload falls back to the built-in text type even when the
|
|
606
|
+
// registry has none, so only what the registry holds is taken.
|
|
607
|
+
const candidates = [detected, registries.payloads.get('text')].filter((type) => type !== undefined && type.generate !== false && registries.payloads.get(type.id) === type);
|
|
608
|
+
for (const type of candidates) {
|
|
609
|
+
const fields = fieldsOf(type, text);
|
|
610
|
+
if (fields !== null) {
|
|
611
|
+
changeWork({ typeId: type.id, fields }, null);
|
|
612
|
+
return;
|
|
613
|
+
}
|
|
614
|
+
}
|
|
615
|
+
refuse('payload/raw', [issue(STUDIO_KEYS.unknownType, ['text'], 'error')]);
|
|
616
|
+
}
|
|
617
|
+
function patchDesign(action, patch, coalesce) {
|
|
618
|
+
const list = Array.isArray(patch) ? patch : [patch];
|
|
619
|
+
if (list.length === 0)
|
|
620
|
+
return;
|
|
621
|
+
let raw = document.design;
|
|
622
|
+
for (const one of list) {
|
|
623
|
+
const problem = typeof one === 'object' && one !== null ? pathProblem(one.path) : 'shape';
|
|
624
|
+
if (problem !== null) {
|
|
625
|
+
refuse(action, [issue(STUDIO_KEYS.patchPath, [], 'error', { problem })]);
|
|
626
|
+
return;
|
|
627
|
+
}
|
|
628
|
+
raw = applyPatch(raw, one.path, one.value);
|
|
629
|
+
}
|
|
630
|
+
const first = list[0];
|
|
631
|
+
changeDesign(action, raw, coalesce, first.path);
|
|
632
|
+
}
|
|
633
|
+
function dispatch(action) {
|
|
634
|
+
if (typeof action !== 'object' || action === null || typeof action.type !== 'string') {
|
|
635
|
+
throw new TypeError('dispatch: an action is an object with a type.');
|
|
636
|
+
}
|
|
637
|
+
if (disposed)
|
|
638
|
+
return;
|
|
639
|
+
switch (action.type) {
|
|
640
|
+
case 'mode': {
|
|
641
|
+
if (!MODES.includes(action.mode)) {
|
|
642
|
+
throw new TypeError("dispatch: mode is 'create', 'scan' or 'bulk'.");
|
|
643
|
+
}
|
|
644
|
+
if (action.mode !== document.mode)
|
|
645
|
+
changed({ ...document, mode: action.mode });
|
|
646
|
+
return;
|
|
647
|
+
}
|
|
648
|
+
case 'payload/type': {
|
|
649
|
+
const type = typeof action.typeId === 'string' ? registries.payloads.get(action.typeId) : undefined;
|
|
650
|
+
if (type === undefined) {
|
|
651
|
+
refuse(action.type, [issue(STUDIO_KEYS.unknownType, ['typeId'], 'error')]);
|
|
652
|
+
return;
|
|
653
|
+
}
|
|
654
|
+
if (type.generate === false) {
|
|
655
|
+
refuse(action.type, [
|
|
656
|
+
issue(STUDIO_KEYS.readOnlyType, ['typeId'], 'error', { type: type.id }),
|
|
657
|
+
]);
|
|
658
|
+
return;
|
|
659
|
+
}
|
|
660
|
+
if (type.id === document.typeId)
|
|
661
|
+
return;
|
|
662
|
+
changeWork({ typeId: type.id, fields: fieldsFor(type, document.fields) }, null);
|
|
663
|
+
return;
|
|
664
|
+
}
|
|
665
|
+
case 'payload/field': {
|
|
666
|
+
const type = typeOf(document.typeId);
|
|
667
|
+
const field = type.fields.find((candidate) => candidate.key === action.key);
|
|
668
|
+
if (field === undefined) {
|
|
669
|
+
refuse(action.type, [issue(STUDIO_KEYS.unknownField, ['fields'], 'error')]);
|
|
670
|
+
return;
|
|
671
|
+
}
|
|
672
|
+
if (!isFieldValue(action.value)) {
|
|
673
|
+
refuse(action.type, [issue(STUDIO_KEYS.fieldValue, ['fields', field.key], 'error')]);
|
|
674
|
+
return;
|
|
675
|
+
}
|
|
676
|
+
if (sameJson(document.fields[field.key], action.value))
|
|
677
|
+
return;
|
|
678
|
+
const value = Array.isArray(action.value) ? frozen([...action.value]) : action.value;
|
|
679
|
+
changeWork({ fields: frozen({ ...document.fields, [field.key]: value }) }, `field:${field.key}`);
|
|
680
|
+
return;
|
|
681
|
+
}
|
|
682
|
+
case 'payload/raw': {
|
|
683
|
+
if (typeof action.text !== 'string') {
|
|
684
|
+
throw new TypeError('dispatch: payload/raw takes text.');
|
|
685
|
+
}
|
|
686
|
+
remake(action.text);
|
|
687
|
+
return;
|
|
688
|
+
}
|
|
689
|
+
case 'design/patch':
|
|
690
|
+
patchDesign(action.type, action.patch, typeof action.coalesce === 'string' ? `patch:${action.coalesce}` : null);
|
|
691
|
+
return;
|
|
692
|
+
case 'design/preset': {
|
|
693
|
+
const preset = typeof action.id === 'string' ? registries.design.presets.get(action.id) : undefined;
|
|
694
|
+
if (preset === undefined) {
|
|
695
|
+
refuse(action.type, [issue(STUDIO_KEYS.unknownPreset, ['id'], 'error')]);
|
|
696
|
+
return;
|
|
697
|
+
}
|
|
698
|
+
changeDesign(action.type, presetDesign(preset, document.design), null, []);
|
|
699
|
+
return;
|
|
700
|
+
}
|
|
701
|
+
case 'design/replace': {
|
|
702
|
+
let input = action.design;
|
|
703
|
+
if (typeof input === 'string') {
|
|
704
|
+
if (input.length > MAX_DESIGN_FILE) {
|
|
705
|
+
refuse(action.type, [
|
|
706
|
+
issue(STUDIO_KEYS.designFile, [], 'error', {
|
|
707
|
+
length: input.length,
|
|
708
|
+
max: MAX_DESIGN_FILE,
|
|
709
|
+
}),
|
|
710
|
+
]);
|
|
711
|
+
return;
|
|
712
|
+
}
|
|
713
|
+
try {
|
|
714
|
+
input = JSON.parse(input);
|
|
715
|
+
}
|
|
716
|
+
catch {
|
|
717
|
+
refuse(action.type, [issue(STUDIO_KEYS.designFile, [], 'error')]);
|
|
718
|
+
return;
|
|
719
|
+
}
|
|
720
|
+
}
|
|
721
|
+
changeDesign(action.type, input, null, []);
|
|
722
|
+
return;
|
|
723
|
+
}
|
|
724
|
+
case 'design/shuffle': {
|
|
725
|
+
const raw = Number(action.seed);
|
|
726
|
+
const seedValue = Number.isFinite(raw) ? Math.floor(Math.abs(raw)) % 0x100000000 : 0;
|
|
727
|
+
changeDesign(action.type, shuffleDesign(document.design, seedValue, registries.design, pairs()), null, []);
|
|
728
|
+
return;
|
|
729
|
+
}
|
|
730
|
+
case 'conditions': {
|
|
731
|
+
const { conditions, bad } = conditionsFrom(action.conditions, document.conditions);
|
|
732
|
+
if (bad.length > 0) {
|
|
733
|
+
refuse(action.type, bad.map((path) => issue(STUDIO_KEYS.conditions, path, 'error')));
|
|
734
|
+
return;
|
|
735
|
+
}
|
|
736
|
+
if (sameJson(conditions, document.conditions))
|
|
737
|
+
return;
|
|
738
|
+
changed({ ...document, conditions: frozen(conditions) });
|
|
739
|
+
return;
|
|
740
|
+
}
|
|
741
|
+
case 'history/undo': {
|
|
742
|
+
if (history.group !== null)
|
|
743
|
+
history = commitGroup(history, history.group.key, work(), historyLimit);
|
|
744
|
+
const step = undo(history, work());
|
|
745
|
+
if (step === null)
|
|
746
|
+
return;
|
|
747
|
+
history = step.history;
|
|
748
|
+
restore(step.restore);
|
|
749
|
+
return;
|
|
750
|
+
}
|
|
751
|
+
case 'history/redo': {
|
|
752
|
+
const step = redo(history, work(), historyLimit);
|
|
753
|
+
if (step === null)
|
|
754
|
+
return;
|
|
755
|
+
history = step.history;
|
|
756
|
+
restore(step.restore);
|
|
757
|
+
return;
|
|
758
|
+
}
|
|
759
|
+
case 'history/begin': {
|
|
760
|
+
if (typeof action.key !== 'string')
|
|
761
|
+
throw new TypeError('dispatch: history/begin takes a key.');
|
|
762
|
+
const before = history;
|
|
763
|
+
history = beginGroup(history, action.key, work(), historyLimit);
|
|
764
|
+
if (history !== before)
|
|
765
|
+
notify();
|
|
766
|
+
return;
|
|
767
|
+
}
|
|
768
|
+
case 'history/commit': {
|
|
769
|
+
if (typeof action.key !== 'string')
|
|
770
|
+
throw new TypeError('dispatch: history/commit takes a key.');
|
|
771
|
+
const before = history;
|
|
772
|
+
history = commitGroup(history, action.key, work(), historyLimit);
|
|
773
|
+
if (history !== before)
|
|
774
|
+
notify();
|
|
775
|
+
return;
|
|
776
|
+
}
|
|
777
|
+
case 'history/cancel': {
|
|
778
|
+
const cancelled = cancelGroup(history);
|
|
779
|
+
if (cancelled === null)
|
|
780
|
+
return;
|
|
781
|
+
history = cancelled.history;
|
|
782
|
+
const target = cancelled.restore;
|
|
783
|
+
if (target.typeId === document.typeId &&
|
|
784
|
+
target.fields === document.fields &&
|
|
785
|
+
target.design === document.design) {
|
|
786
|
+
notify();
|
|
787
|
+
}
|
|
788
|
+
else {
|
|
789
|
+
restore(target);
|
|
790
|
+
}
|
|
791
|
+
return;
|
|
792
|
+
}
|
|
793
|
+
case 'verify/request': {
|
|
794
|
+
verifyArmed = true;
|
|
795
|
+
const type = typeOf(document.typeId);
|
|
796
|
+
verifyInputs = {
|
|
797
|
+
content: contentFor(type, document.fields),
|
|
798
|
+
design: constrained(document.design, type).effective,
|
|
799
|
+
conditions: document.conditions,
|
|
800
|
+
};
|
|
801
|
+
scheduleVerify(FULL_CAPTURE_SEEDS);
|
|
802
|
+
return;
|
|
803
|
+
}
|
|
804
|
+
case 'verify/cancel': {
|
|
805
|
+
verifyArmed = false;
|
|
806
|
+
verifyTimer?.();
|
|
807
|
+
verifyTimer = null;
|
|
808
|
+
const running = verifyRun !== null;
|
|
809
|
+
stopRun();
|
|
810
|
+
if (running) {
|
|
811
|
+
verify = idleVerify();
|
|
812
|
+
notify();
|
|
813
|
+
}
|
|
814
|
+
return;
|
|
815
|
+
}
|
|
816
|
+
case 'fix/apply': {
|
|
817
|
+
const fixes = verify.status === 'done' ? verify.fixes : [];
|
|
818
|
+
const fix = fixes.find((candidate) => candidate.id === action.fixId);
|
|
819
|
+
if (fix === undefined) {
|
|
820
|
+
refuse(action.type, [issue(STUDIO_KEYS.unknownFix, ['fixId'], 'error')]);
|
|
821
|
+
return;
|
|
822
|
+
}
|
|
823
|
+
// A fix is one step: verify's patch read as verify reads it (an
|
|
824
|
+
// empty path is the whole design), and a size change beside it for
|
|
825
|
+
// 'print-larger', which as a condition is not undone with the design.
|
|
826
|
+
let design;
|
|
827
|
+
if (fix.patch !== null) {
|
|
828
|
+
try {
|
|
829
|
+
design = applyDesignPatch(document.design, fix.patch);
|
|
830
|
+
}
|
|
831
|
+
catch {
|
|
832
|
+
refuse(action.type, [issue(STUDIO_KEYS.patchPath, [], 'error', { problem: 'shape' })]);
|
|
833
|
+
return;
|
|
834
|
+
}
|
|
835
|
+
}
|
|
836
|
+
const conditions = fix.conditions === undefined
|
|
837
|
+
? null
|
|
838
|
+
: frozen(conditionsFrom(fix.conditions, document.conditions).conditions);
|
|
839
|
+
applyLook(action.type, design, conditions);
|
|
840
|
+
return;
|
|
841
|
+
}
|
|
842
|
+
default:
|
|
843
|
+
throw new TypeError('dispatch: that is not an action the studio knows.');
|
|
844
|
+
}
|
|
845
|
+
}
|
|
846
|
+
// Commands.
|
|
847
|
+
function setBatch(next) {
|
|
848
|
+
batch = frozen(next);
|
|
849
|
+
notify();
|
|
850
|
+
}
|
|
851
|
+
/**
|
|
852
|
+
* Many codes from a spreadsheet: read the file (its bytes' encoding worked
|
|
853
|
+
* out where it came as bytes, with the command's or the studio's fallback
|
|
854
|
+
* for bytes that are not UTF-8), plan a row per code, then make them in time
|
|
855
|
+
* slices. A new run stops the one before; so does dispose. The design is
|
|
856
|
+
* the person's own, which runBatch constrains per content type itself.
|
|
857
|
+
*/
|
|
858
|
+
async function batchCommand(command) {
|
|
859
|
+
// Checked before anything starts, so a caller's mistake leaves the last run alone.
|
|
860
|
+
const named = command.encoding ?? 'auto';
|
|
861
|
+
const fallback = named === 'auto' ? csvFallback : csvFallbackOption(named, "batch: encoding is 'auto' or");
|
|
862
|
+
batchRun?.abort();
|
|
863
|
+
const controller = new AbortController();
|
|
864
|
+
batchRun = controller;
|
|
865
|
+
const current = () => !disposed && batchRun === controller;
|
|
866
|
+
const failed = (error) => {
|
|
867
|
+
if (current()) {
|
|
868
|
+
batchRun = null;
|
|
869
|
+
setBatch({ status: 'failed', error: studioError(error) });
|
|
870
|
+
}
|
|
871
|
+
return err(error);
|
|
872
|
+
};
|
|
873
|
+
let issues;
|
|
874
|
+
let rows;
|
|
875
|
+
try {
|
|
876
|
+
let text;
|
|
877
|
+
let fileIssues = [];
|
|
878
|
+
if (typeof command.csv === 'string')
|
|
879
|
+
text = command.csv;
|
|
880
|
+
else {
|
|
881
|
+
const decoded = decodeCsvBytes(command.csv, { fallback });
|
|
882
|
+
text = decoded.text;
|
|
883
|
+
fileIssues = decoded.issues;
|
|
884
|
+
}
|
|
885
|
+
const table = parseCsv(text);
|
|
886
|
+
issues = frozen([...fileIssues, ...table.issues]);
|
|
887
|
+
rows = planBatch(table, command.mapping, registries);
|
|
888
|
+
}
|
|
889
|
+
catch (thrown) {
|
|
890
|
+
if (thrown instanceof TypeError)
|
|
891
|
+
throw thrown;
|
|
892
|
+
return failed(asStudioError(thrown, 'batch/malformed-csv'));
|
|
893
|
+
}
|
|
894
|
+
const asked = command.output.verify;
|
|
895
|
+
if (generator === null && asked !== undefined && asked !== 'off') {
|
|
896
|
+
// Asked to check rows in a build without the scan check: the same
|
|
897
|
+
// answer a single code gets from the unavailable runner.
|
|
898
|
+
return failed(new QrStudioError('platform/unavailable', 'The scan check is not part of this build yet.', {
|
|
899
|
+
feature: 'verify',
|
|
900
|
+
}));
|
|
901
|
+
}
|
|
902
|
+
let written = 0;
|
|
903
|
+
let skipped = 0;
|
|
904
|
+
const outcomes = [];
|
|
905
|
+
setBatch({ status: 'running', done: 0, total: rows.length + 1, written, skipped, issues });
|
|
906
|
+
const design = document.design;
|
|
907
|
+
const result = await driveInSlices(() => runBatch(rows, design, command.output, registries, {
|
|
908
|
+
fonts,
|
|
909
|
+
seed,
|
|
910
|
+
// Rows are checked by whatever the studio checks its code with: the
|
|
911
|
+
// real scan check by default, a test's stand-in, or nothing.
|
|
912
|
+
...(generator === null ? {} : { verifyRow: scanCheckVerifier(registries, generator) }),
|
|
913
|
+
}), {
|
|
914
|
+
scheduler: timers,
|
|
915
|
+
clock,
|
|
916
|
+
signal: controller.signal,
|
|
917
|
+
failure: 'platform/unavailable',
|
|
918
|
+
progress: (p) => {
|
|
919
|
+
if (p.row !== undefined) {
|
|
920
|
+
outcomes.push(p.row);
|
|
921
|
+
if (p.row.status === 'written')
|
|
922
|
+
written += 1;
|
|
923
|
+
else
|
|
924
|
+
skipped += 1;
|
|
925
|
+
}
|
|
926
|
+
if (current()) {
|
|
927
|
+
setBatch({ status: 'running', done: p.done, total: p.total, written, skipped, issues });
|
|
928
|
+
}
|
|
929
|
+
},
|
|
930
|
+
});
|
|
931
|
+
if (!result.ok)
|
|
932
|
+
return result.error.code === 'cancelled' ? err(result.error) : failed(result.error);
|
|
933
|
+
if (current()) {
|
|
934
|
+
batchRun = null;
|
|
935
|
+
setBatch({ status: 'done', outcomes: frozen(outcomes), written, skipped, issues });
|
|
936
|
+
}
|
|
937
|
+
return result;
|
|
938
|
+
}
|
|
939
|
+
function setInspect(next) {
|
|
940
|
+
inspect = frozen(next);
|
|
941
|
+
notify();
|
|
942
|
+
}
|
|
943
|
+
function setLibrary(next) {
|
|
944
|
+
libraryState = frozen(next);
|
|
945
|
+
notify();
|
|
946
|
+
}
|
|
947
|
+
async function guarded(work, fallback) {
|
|
948
|
+
try {
|
|
949
|
+
return await work();
|
|
950
|
+
}
|
|
951
|
+
catch (thrown) {
|
|
952
|
+
// A caller's mistake stays a TypeError; anything else a store or a
|
|
953
|
+
// seam threw is reported, since a person may well have caused it.
|
|
954
|
+
if (thrown instanceof TypeError)
|
|
955
|
+
throw thrown;
|
|
956
|
+
return err(asStudioError(thrown, fallback));
|
|
957
|
+
}
|
|
958
|
+
}
|
|
959
|
+
// What the store is, from its probe: a library kept in the browser, or a
|
|
960
|
+
// file the person saves and opens. The kit last applied, and the records
|
|
961
|
+
// the last opened file had to leave out, are the studio's to remember.
|
|
962
|
+
let libraryKind = 'on';
|
|
963
|
+
let activeKit = null;
|
|
964
|
+
let openSkipped = [];
|
|
965
|
+
/** Reads the whole library back into the snapshot, after anything that may have changed it. */
|
|
966
|
+
async function refreshLibrary() {
|
|
967
|
+
const store = library;
|
|
968
|
+
const contents = await store.contents();
|
|
969
|
+
if (disposed)
|
|
970
|
+
return err(new CancelledError());
|
|
971
|
+
if (!contents.ok) {
|
|
972
|
+
setLibrary({ status: 'failed', error: studioError(contents.error) });
|
|
973
|
+
return contents;
|
|
974
|
+
}
|
|
975
|
+
const shelves = {
|
|
976
|
+
items: frozen([...contents.value.designs]),
|
|
977
|
+
kits: frozen([...contents.value.kits]),
|
|
978
|
+
skipped: frozen([...contents.value.skipped, ...openSkipped]),
|
|
979
|
+
kit: activeKit,
|
|
980
|
+
};
|
|
981
|
+
setLibrary(libraryKind === 'file'
|
|
982
|
+
? { status: 'file', unsaved: store.hasUnsavedChanges?.() === true, ...shelves }
|
|
983
|
+
: { status: 'on', ...shelves });
|
|
984
|
+
return contents;
|
|
985
|
+
}
|
|
986
|
+
/** The library's view of a probe, from its state, or from its two flags for an older store. */
|
|
987
|
+
function probedState(probe) {
|
|
988
|
+
if (probe.state !== undefined)
|
|
989
|
+
return probe.state;
|
|
990
|
+
if (!probe.available)
|
|
991
|
+
return 'unavailable';
|
|
992
|
+
return probe.enabled ? 'on' : 'off';
|
|
993
|
+
}
|
|
994
|
+
function notEnabled() {
|
|
995
|
+
return new QrStudioError('library/not-enabled', 'The library is switched off. Switch it on to save designs and brand kits in this browser.');
|
|
996
|
+
}
|
|
997
|
+
async function exportCommand(command) {
|
|
998
|
+
const type = typeOf(document.typeId);
|
|
999
|
+
const content = contentFor(type, document.fields);
|
|
1000
|
+
const { effective: design, overlay } = constrained(document.design, type);
|
|
1001
|
+
if (!content.ok) {
|
|
1002
|
+
return err(new QrStudioError('payload/invalid', 'Fix the content before saving the code.', {
|
|
1003
|
+
count: content.issues.filter((found) => found.severity === 'error').length,
|
|
1004
|
+
}));
|
|
1005
|
+
}
|
|
1006
|
+
const encoded = encodeCached(content.text, design);
|
|
1007
|
+
if (!encoded.ok)
|
|
1008
|
+
return err(encoded.error);
|
|
1009
|
+
return exportSymbol({
|
|
1010
|
+
symbol: encoded.symbol,
|
|
1011
|
+
design,
|
|
1012
|
+
fixedSizeMm: type.constraints?.sizeMm,
|
|
1013
|
+
conditions: document.conditions,
|
|
1014
|
+
registries: registries.design,
|
|
1015
|
+
assets: assets.lookup(design),
|
|
1016
|
+
fonts,
|
|
1017
|
+
overlay,
|
|
1018
|
+
seed,
|
|
1019
|
+
rasterEncoder: options.rasterEncoder ?? null,
|
|
1020
|
+
printer: options.printer === undefined ? RENDER_PRINTER : options.printer,
|
|
1021
|
+
}, command.format, command.options ?? {});
|
|
1022
|
+
}
|
|
1023
|
+
/** Applies a design from the library or a kit, with conditions beside it, as one change. */
|
|
1024
|
+
function applyLook(action, design, conditions) {
|
|
1025
|
+
const prepared = design === undefined ? { kind: 'same' } : prepareDesign(design, []);
|
|
1026
|
+
const next = {};
|
|
1027
|
+
if (prepared.kind === 'change')
|
|
1028
|
+
next.design = prepared.next;
|
|
1029
|
+
if (conditions !== null && !sameJson(conditions, document.conditions)) {
|
|
1030
|
+
next.conditions = conditions;
|
|
1031
|
+
}
|
|
1032
|
+
if (next.design !== undefined) {
|
|
1033
|
+
history = recordChange(breakRun(history), work(), null, historyLimit);
|
|
1034
|
+
}
|
|
1035
|
+
if (Object.keys(next).length > 0)
|
|
1036
|
+
changed({ ...document, ...next });
|
|
1037
|
+
if (prepared.kind === 'refuse')
|
|
1038
|
+
refuse(action, prepared.issues);
|
|
1039
|
+
}
|
|
1040
|
+
async function libraryCommand(command) {
|
|
1041
|
+
if (library === null) {
|
|
1042
|
+
return err(new QrStudioError('library/unavailable', 'This copy of the studio has no library.'));
|
|
1043
|
+
}
|
|
1044
|
+
const cancelled = () => err(new CancelledError());
|
|
1045
|
+
switch (command.type) {
|
|
1046
|
+
case 'library/enable': {
|
|
1047
|
+
const enabled = await library.enable();
|
|
1048
|
+
if (disposed)
|
|
1049
|
+
return cancelled();
|
|
1050
|
+
if (!enabled.ok) {
|
|
1051
|
+
setLibrary({ status: 'failed', error: studioError(enabled.error) });
|
|
1052
|
+
return enabled;
|
|
1053
|
+
}
|
|
1054
|
+
const contents = await refreshLibrary();
|
|
1055
|
+
return contents.ok ? ok(contents.value.designs) : contents;
|
|
1056
|
+
}
|
|
1057
|
+
case 'library/disable': {
|
|
1058
|
+
const disabled = await library.disable();
|
|
1059
|
+
if (disposed)
|
|
1060
|
+
return cancelled();
|
|
1061
|
+
if (!disabled.ok)
|
|
1062
|
+
return disabled;
|
|
1063
|
+
activeKit = null;
|
|
1064
|
+
openSkipped = [];
|
|
1065
|
+
// The file library is always there; switching it off forgets what the page holds.
|
|
1066
|
+
if (libraryKind === 'file')
|
|
1067
|
+
await refreshLibrary();
|
|
1068
|
+
else
|
|
1069
|
+
setLibrary({ status: 'off' });
|
|
1070
|
+
return ok(null);
|
|
1071
|
+
}
|
|
1072
|
+
default:
|
|
1073
|
+
break;
|
|
1074
|
+
}
|
|
1075
|
+
if (libraryState.status !== 'on' && libraryState.status !== 'file')
|
|
1076
|
+
return err(notEnabled());
|
|
1077
|
+
switch (command.type) {
|
|
1078
|
+
case 'library/save': {
|
|
1079
|
+
const name = typeof command.name === 'string' ? command.name : '';
|
|
1080
|
+
const saved = await library.save({ name, document });
|
|
1081
|
+
if (disposed)
|
|
1082
|
+
return cancelled();
|
|
1083
|
+
if (saved.ok)
|
|
1084
|
+
await refreshLibrary();
|
|
1085
|
+
return saved;
|
|
1086
|
+
}
|
|
1087
|
+
case 'library/remove': {
|
|
1088
|
+
const removed = await library.remove(command.id);
|
|
1089
|
+
if (disposed)
|
|
1090
|
+
return cancelled();
|
|
1091
|
+
if (!removed.ok)
|
|
1092
|
+
return removed;
|
|
1093
|
+
const contents = await refreshLibrary();
|
|
1094
|
+
return contents.ok ? ok(contents.value.designs) : contents;
|
|
1095
|
+
}
|
|
1096
|
+
case 'library/load': {
|
|
1097
|
+
const loaded = await library.load(command.id);
|
|
1098
|
+
if (disposed)
|
|
1099
|
+
return cancelled();
|
|
1100
|
+
if (!loaded.ok)
|
|
1101
|
+
return loaded;
|
|
1102
|
+
// A record holds the look and the sizes, never the content: what the
|
|
1103
|
+
// person typed, and the kind of content it is, stay as they are.
|
|
1104
|
+
const saved = loaded.value.document;
|
|
1105
|
+
const { conditions } = conditionsFrom(saved.conditions, document.conditions);
|
|
1106
|
+
applyLook(command.type, saved.design, frozen(conditions));
|
|
1107
|
+
const { document: _document, ...summary } = loaded.value;
|
|
1108
|
+
return ok(frozen(summary));
|
|
1109
|
+
}
|
|
1110
|
+
case 'library/list-kits': {
|
|
1111
|
+
const contents = await refreshLibrary();
|
|
1112
|
+
return contents.ok ? ok(contents.value.kits) : contents;
|
|
1113
|
+
}
|
|
1114
|
+
case 'library/save-kit': {
|
|
1115
|
+
const name = typeof command.name === 'string' ? command.name : '';
|
|
1116
|
+
const saved = await library.saveKit({ name, kit: command.kit });
|
|
1117
|
+
if (disposed)
|
|
1118
|
+
return cancelled();
|
|
1119
|
+
if (saved.ok)
|
|
1120
|
+
await refreshLibrary();
|
|
1121
|
+
return saved;
|
|
1122
|
+
}
|
|
1123
|
+
case 'library/load-kit': {
|
|
1124
|
+
const loaded = await library.loadKit(command.id);
|
|
1125
|
+
if (disposed)
|
|
1126
|
+
return cancelled();
|
|
1127
|
+
if (!loaded.ok)
|
|
1128
|
+
return loaded;
|
|
1129
|
+
activeKit = loaded.value;
|
|
1130
|
+
applyLook(command.type, applyKit(document.design, loaded.value.kit), null);
|
|
1131
|
+
await refreshLibrary();
|
|
1132
|
+
return loaded;
|
|
1133
|
+
}
|
|
1134
|
+
case 'library/remove-kit': {
|
|
1135
|
+
const removed = await library.removeKit(command.id);
|
|
1136
|
+
if (disposed)
|
|
1137
|
+
return cancelled();
|
|
1138
|
+
if (!removed.ok)
|
|
1139
|
+
return removed;
|
|
1140
|
+
if (activeKit?.id === command.id)
|
|
1141
|
+
activeKit = null;
|
|
1142
|
+
const contents = await refreshLibrary();
|
|
1143
|
+
return contents.ok ? ok(contents.value.kits) : contents;
|
|
1144
|
+
}
|
|
1145
|
+
case 'library/save-file': {
|
|
1146
|
+
if (library.saveFile === undefined)
|
|
1147
|
+
return err(notAFile());
|
|
1148
|
+
const saved = library.saveFile(command.name);
|
|
1149
|
+
if (saved.ok)
|
|
1150
|
+
await refreshLibrary();
|
|
1151
|
+
return saved;
|
|
1152
|
+
}
|
|
1153
|
+
case 'library/open-file': {
|
|
1154
|
+
if (library.openFile === undefined)
|
|
1155
|
+
return err(notAFile());
|
|
1156
|
+
const opened = await library.openFile(command.file);
|
|
1157
|
+
if (disposed)
|
|
1158
|
+
return cancelled();
|
|
1159
|
+
if (opened.opened) {
|
|
1160
|
+
// The kits of the library this page held are gone with it.
|
|
1161
|
+
activeKit = null;
|
|
1162
|
+
openSkipped = frozen(opened.issues.filter((found) => found.severity !== 'error'));
|
|
1163
|
+
await refreshLibrary();
|
|
1164
|
+
}
|
|
1165
|
+
return ok(opened);
|
|
1166
|
+
}
|
|
1167
|
+
}
|
|
1168
|
+
}
|
|
1169
|
+
function notAFile() {
|
|
1170
|
+
return new QrStudioError('library/unavailable', 'This library is kept in the browser, not in a file.', { reason: 'not-a-file' });
|
|
1171
|
+
}
|
|
1172
|
+
async function runCommand(command) {
|
|
1173
|
+
switch (command.type) {
|
|
1174
|
+
case 'export':
|
|
1175
|
+
return exportCommand(command);
|
|
1176
|
+
case 'design-link':
|
|
1177
|
+
try {
|
|
1178
|
+
return ok(frozen(designLink(document.design)));
|
|
1179
|
+
}
|
|
1180
|
+
catch (thrown) {
|
|
1181
|
+
return err(asStudioError(thrown, 'design/invalid'));
|
|
1182
|
+
}
|
|
1183
|
+
case 'inspect/image':
|
|
1184
|
+
case 'inspect/text': {
|
|
1185
|
+
const source = command.type === 'inspect/image' ? 'image' : 'text';
|
|
1186
|
+
if (inspector === null) {
|
|
1187
|
+
const error = new QrStudioError('platform/unavailable', 'Reading codes is not part of this copy.', {
|
|
1188
|
+
feature: 'inspect',
|
|
1189
|
+
});
|
|
1190
|
+
setInspect({ status: 'failed', source, error: studioError(error) });
|
|
1191
|
+
return err(error);
|
|
1192
|
+
}
|
|
1193
|
+
setInspect({ status: 'running', source });
|
|
1194
|
+
let result;
|
|
1195
|
+
try {
|
|
1196
|
+
result =
|
|
1197
|
+
command.type === 'inspect/image'
|
|
1198
|
+
? inspector.image(command.image, registries)
|
|
1199
|
+
: ok(inspector.text(command.text, registries));
|
|
1200
|
+
}
|
|
1201
|
+
catch (thrown) {
|
|
1202
|
+
result = err(asStudioError(thrown, 'decode/unreadable'));
|
|
1203
|
+
}
|
|
1204
|
+
if (disposed)
|
|
1205
|
+
return result;
|
|
1206
|
+
if (result.ok) {
|
|
1207
|
+
setInspect({
|
|
1208
|
+
status: 'done',
|
|
1209
|
+
source,
|
|
1210
|
+
report: result.value,
|
|
1211
|
+
});
|
|
1212
|
+
}
|
|
1213
|
+
else {
|
|
1214
|
+
setInspect({ status: 'failed', source, error: studioError(result.error) });
|
|
1215
|
+
}
|
|
1216
|
+
return result;
|
|
1217
|
+
}
|
|
1218
|
+
case 'batch':
|
|
1219
|
+
return batchCommand(command);
|
|
1220
|
+
case 'library/enable':
|
|
1221
|
+
case 'library/disable':
|
|
1222
|
+
case 'library/save':
|
|
1223
|
+
case 'library/load':
|
|
1224
|
+
case 'library/remove':
|
|
1225
|
+
case 'library/list-kits':
|
|
1226
|
+
case 'library/save-kit':
|
|
1227
|
+
case 'library/load-kit':
|
|
1228
|
+
case 'library/remove-kit':
|
|
1229
|
+
case 'library/save-file':
|
|
1230
|
+
case 'library/open-file':
|
|
1231
|
+
return libraryCommand(command);
|
|
1232
|
+
default:
|
|
1233
|
+
throw new TypeError('run: that is not a command the studio knows.');
|
|
1234
|
+
}
|
|
1235
|
+
}
|
|
1236
|
+
// Startup: ask the library, without creating anything, whether it is on.
|
|
1237
|
+
if (library !== null) {
|
|
1238
|
+
const answered = (state) => {
|
|
1239
|
+
if (!disposed)
|
|
1240
|
+
setLibrary(state);
|
|
1241
|
+
};
|
|
1242
|
+
library.probe().then(async (probed) => {
|
|
1243
|
+
if (!probed.ok)
|
|
1244
|
+
return answered({ status: 'failed', error: studioError(probed.error) });
|
|
1245
|
+
const state = probedState(probed.value);
|
|
1246
|
+
if (state === 'unavailable' || state === 'off' || state === 'unknown') {
|
|
1247
|
+
return answered({ status: state });
|
|
1248
|
+
}
|
|
1249
|
+
libraryKind = state;
|
|
1250
|
+
if (!disposed)
|
|
1251
|
+
await refreshLibrary();
|
|
1252
|
+
}, (thrown) => answered({
|
|
1253
|
+
status: 'failed',
|
|
1254
|
+
error: studioError(asStudioError(thrown, 'library/unavailable')),
|
|
1255
|
+
}));
|
|
1256
|
+
}
|
|
1257
|
+
return Object.freeze({
|
|
1258
|
+
getSnapshot() {
|
|
1259
|
+
// A registry a caller added to since the last change is a change too:
|
|
1260
|
+
// the catalogue has to show the new entry.
|
|
1261
|
+
if (!disposed && registryVersions(registries) !== snapshotVersions) {
|
|
1262
|
+
snapshot = makeSnapshot();
|
|
1263
|
+
snapshotVersions = registryVersions(registries);
|
|
1264
|
+
}
|
|
1265
|
+
return snapshot;
|
|
1266
|
+
},
|
|
1267
|
+
subscribe(listener) {
|
|
1268
|
+
if (typeof listener !== 'function')
|
|
1269
|
+
throw new TypeError('subscribe: listener is a function.');
|
|
1270
|
+
if (disposed)
|
|
1271
|
+
return () => undefined;
|
|
1272
|
+
listeners.add(listener);
|
|
1273
|
+
return () => {
|
|
1274
|
+
listeners.delete(listener);
|
|
1275
|
+
};
|
|
1276
|
+
},
|
|
1277
|
+
dispatch,
|
|
1278
|
+
run(command) {
|
|
1279
|
+
if (typeof command !== 'object' || command === null || typeof command.type !== 'string') {
|
|
1280
|
+
return Promise.reject(new TypeError('run: a command is an object with a type.'));
|
|
1281
|
+
}
|
|
1282
|
+
if (disposed)
|
|
1283
|
+
return Promise.resolve(err(new CancelledError()));
|
|
1284
|
+
return guarded(() => runCommand(command), 'platform/unavailable');
|
|
1285
|
+
},
|
|
1286
|
+
dispose() {
|
|
1287
|
+
if (disposed)
|
|
1288
|
+
return;
|
|
1289
|
+
disposed = true;
|
|
1290
|
+
verifyArmed = false;
|
|
1291
|
+
batchRun?.abort();
|
|
1292
|
+
stopRun();
|
|
1293
|
+
timers.cancelAll();
|
|
1294
|
+
listeners.clear();
|
|
1295
|
+
},
|
|
1296
|
+
});
|
|
1297
|
+
}
|
|
1298
|
+
//# sourceMappingURL=studio.js.map
|