react-id-card-generator 1.0.0
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/README.md +214 -0
- package/dist/cjs/_virtual/_commonjsHelpers.js +11 -0
- package/dist/cjs/_virtual/_commonjsHelpers.js.map +1 -0
- package/dist/cjs/_virtual/index.js +6 -0
- package/dist/cjs/_virtual/index.js.map +1 -0
- package/dist/cjs/_virtual/make-built-in.js +6 -0
- package/dist/cjs/_virtual/make-built-in.js.map +1 -0
- package/dist/cjs/_virtual/new-promise-capability.js +6 -0
- package/dist/cjs/_virtual/new-promise-capability.js.map +1 -0
- package/dist/cjs/_virtual/object-define-properties.js +6 -0
- package/dist/cjs/_virtual/object-define-properties.js.map +1 -0
- package/dist/cjs/_virtual/object-define-property.js +6 -0
- package/dist/cjs/_virtual/object-define-property.js.map +1 -0
- package/dist/cjs/_virtual/object-get-own-property-descriptor.js +6 -0
- package/dist/cjs/_virtual/object-get-own-property-descriptor.js.map +1 -0
- package/dist/cjs/_virtual/object-get-own-property-names.js +6 -0
- package/dist/cjs/_virtual/object-get-own-property-names.js.map +1 -0
- package/dist/cjs/_virtual/object-get-own-property-symbols.js +6 -0
- package/dist/cjs/_virtual/object-get-own-property-symbols.js.map +1 -0
- package/dist/cjs/_virtual/object-property-is-enumerable.js +6 -0
- package/dist/cjs/_virtual/object-property-is-enumerable.js.map +1 -0
- package/dist/cjs/_virtual/performance-now.js +6 -0
- package/dist/cjs/_virtual/performance-now.js.map +1 -0
- package/dist/cjs/_virtual/qrious.js +6 -0
- package/dist/cjs/_virtual/qrious.js.map +1 -0
- package/dist/cjs/_virtual/shared-store.js +6 -0
- package/dist/cjs/_virtual/shared-store.js.map +1 -0
- package/dist/cjs/components/IDCardDesigner.js +283 -0
- package/dist/cjs/components/IDCardDesigner.js.map +1 -0
- package/dist/cjs/components/IDCardGenerator.js +139 -0
- package/dist/cjs/components/IDCardGenerator.js.map +1 -0
- package/dist/cjs/components/IDCardPreview.js +168 -0
- package/dist/cjs/components/IDCardPreview.js.map +1 -0
- package/dist/cjs/core/exportUtils.js +155 -0
- package/dist/cjs/core/exportUtils.js.map +1 -0
- package/dist/cjs/core/qrUtils.js +64 -0
- package/dist/cjs/core/qrUtils.js.map +1 -0
- package/dist/cjs/hooks/useFieldMapping.js +148 -0
- package/dist/cjs/hooks/useFieldMapping.js.map +1 -0
- package/dist/cjs/hooks/useIDCardExport.js +81 -0
- package/dist/cjs/hooks/useIDCardExport.js.map +1 -0
- package/dist/cjs/hooks/useIDCardTemplate.js +155 -0
- package/dist/cjs/hooks/useIDCardTemplate.js.map +1 -0
- package/dist/cjs/index.js +48 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js +30 -0
- package/dist/cjs/node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js.map +1 -0
- package/dist/cjs/node_modules/@babel/runtime/helpers/esm/defineProperty.js +15 -0
- package/dist/cjs/node_modules/@babel/runtime/helpers/esm/defineProperty.js.map +1 -0
- package/dist/cjs/node_modules/@babel/runtime/helpers/esm/toPrimitive.js +17 -0
- package/dist/cjs/node_modules/@babel/runtime/helpers/esm/toPrimitive.js.map +1 -0
- package/dist/cjs/node_modules/@babel/runtime/helpers/esm/toPropertyKey.js +12 -0
- package/dist/cjs/node_modules/@babel/runtime/helpers/esm/toPropertyKey.js.map +1 -0
- package/dist/cjs/node_modules/@babel/runtime/helpers/esm/typeof.js +14 -0
- package/dist/cjs/node_modules/@babel/runtime/helpers/esm/typeof.js.map +1 -0
- package/dist/cjs/node_modules/canvg/lib/index.es.js +6645 -0
- package/dist/cjs/node_modules/canvg/lib/index.es.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/a-callable.js +18 -0
- package/dist/cjs/node_modules/core-js/internals/a-callable.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/a-constructor.js +18 -0
- package/dist/cjs/node_modules/core-js/internals/a-constructor.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/a-possible-prototype.js +16 -0
- package/dist/cjs/node_modules/core-js/internals/a-possible-prototype.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/add-to-unscopables.js +30 -0
- package/dist/cjs/node_modules/core-js/internals/add-to-unscopables.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/advance-string-index.js +14 -0
- package/dist/cjs/node_modules/core-js/internals/advance-string-index.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/an-instance.js +15 -0
- package/dist/cjs/node_modules/core-js/internals/an-instance.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/an-object.js +17 -0
- package/dist/cjs/node_modules/core-js/internals/an-object.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/array-includes.js +39 -0
- package/dist/cjs/node_modules/core-js/internals/array-includes.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/array-method-is-strict.js +16 -0
- package/dist/cjs/node_modules/core-js/internals/array-method-is-strict.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/array-reduce.js +51 -0
- package/dist/cjs/node_modules/core-js/internals/array-reduce.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/array-slice.js +10 -0
- package/dist/cjs/node_modules/core-js/internals/array-slice.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/check-correctness-of-iteration.js +49 -0
- package/dist/cjs/node_modules/core-js/internals/check-correctness-of-iteration.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/classof-raw.js +15 -0
- package/dist/cjs/node_modules/core-js/internals/classof-raw.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/classof.js +39 -0
- package/dist/cjs/node_modules/core-js/internals/classof.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/copy-constructor-properties.js +28 -0
- package/dist/cjs/node_modules/core-js/internals/copy-constructor-properties.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/correct-is-regexp-logic.js +22 -0
- package/dist/cjs/node_modules/core-js/internals/correct-is-regexp-logic.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/correct-prototype-getter.js +15 -0
- package/dist/cjs/node_modules/core-js/internals/correct-prototype-getter.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/create-iter-result-object.js +10 -0
- package/dist/cjs/node_modules/core-js/internals/create-iter-result-object.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/create-non-enumerable-property.js +20 -0
- package/dist/cjs/node_modules/core-js/internals/create-non-enumerable-property.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/create-property-descriptor.js +13 -0
- package/dist/cjs/node_modules/core-js/internals/create-property-descriptor.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/define-built-in-accessor.js +17 -0
- package/dist/cjs/node_modules/core-js/internals/define-built-in-accessor.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/define-built-in.js +38 -0
- package/dist/cjs/node_modules/core-js/internals/define-built-in.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/define-global-property.js +19 -0
- package/dist/cjs/node_modules/core-js/internals/define-global-property.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/descriptors.js +14 -0
- package/dist/cjs/node_modules/core-js/internals/descriptors.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/document-create-element.js +18 -0
- package/dist/cjs/node_modules/core-js/internals/document-create-element.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/dom-iterables.js +40 -0
- package/dist/cjs/node_modules/core-js/internals/dom-iterables.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/dom-token-list-prototype.js +14 -0
- package/dist/cjs/node_modules/core-js/internals/dom-token-list-prototype.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/enum-bug-keys.js +15 -0
- package/dist/cjs/node_modules/core-js/internals/enum-bug-keys.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/environment-is-ios-pebble.js +10 -0
- package/dist/cjs/node_modules/core-js/internals/environment-is-ios-pebble.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/environment-is-ios.js +11 -0
- package/dist/cjs/node_modules/core-js/internals/environment-is-ios.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/environment-is-node.js +10 -0
- package/dist/cjs/node_modules/core-js/internals/environment-is-node.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/environment-is-webos-webkit.js +10 -0
- package/dist/cjs/node_modules/core-js/internals/environment-is-webos-webkit.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/environment-user-agent.js +13 -0
- package/dist/cjs/node_modules/core-js/internals/environment-user-agent.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/environment-v8-version.js +35 -0
- package/dist/cjs/node_modules/core-js/internals/environment-v8-version.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/environment.js +29 -0
- package/dist/cjs/node_modules/core-js/internals/environment.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/export.js +68 -0
- package/dist/cjs/node_modules/core-js/internals/export.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/fails.js +12 -0
- package/dist/cjs/node_modules/core-js/internals/fails.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/fix-regexp-well-known-symbol-logic.js +90 -0
- package/dist/cjs/node_modules/core-js/internals/fix-regexp-well-known-symbol-logic.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/function-apply.js +17 -0
- package/dist/cjs/node_modules/core-js/internals/function-apply.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/function-bind-context.js +22 -0
- package/dist/cjs/node_modules/core-js/internals/function-bind-context.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/function-bind-native.js +15 -0
- package/dist/cjs/node_modules/core-js/internals/function-bind-native.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/function-call.js +14 -0
- package/dist/cjs/node_modules/core-js/internals/function-call.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/function-name.js +24 -0
- package/dist/cjs/node_modules/core-js/internals/function-name.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/function-uncurry-this-accessor.js +17 -0
- package/dist/cjs/node_modules/core-js/internals/function-uncurry-this-accessor.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/function-uncurry-this-clause.js +17 -0
- package/dist/cjs/node_modules/core-js/internals/function-uncurry-this-clause.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/function-uncurry-this.js +19 -0
- package/dist/cjs/node_modules/core-js/internals/function-uncurry-this.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/get-built-in.js +18 -0
- package/dist/cjs/node_modules/core-js/internals/get-built-in.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/get-iterator-method.js +24 -0
- package/dist/cjs/node_modules/core-js/internals/get-iterator-method.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/get-iterator.js +24 -0
- package/dist/cjs/node_modules/core-js/internals/get-iterator.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/get-method.js +17 -0
- package/dist/cjs/node_modules/core-js/internals/get-method.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/get-substitution.js +53 -0
- package/dist/cjs/node_modules/core-js/internals/get-substitution.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/global-this.js +22 -0
- package/dist/cjs/node_modules/core-js/internals/global-this.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/has-own-property.js +19 -0
- package/dist/cjs/node_modules/core-js/internals/has-own-property.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/hidden-keys.js +6 -0
- package/dist/cjs/node_modules/core-js/internals/hidden-keys.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/host-report-errors.js +11 -0
- package/dist/cjs/node_modules/core-js/internals/host-report-errors.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/html.js +10 -0
- package/dist/cjs/node_modules/core-js/internals/html.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/ie8-dom-define.js +20 -0
- package/dist/cjs/node_modules/core-js/internals/ie8-dom-define.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/indexed-object.js +24 -0
- package/dist/cjs/node_modules/core-js/internals/indexed-object.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/inspect-source.js +23 -0
- package/dist/cjs/node_modules/core-js/internals/inspect-source.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/internal-state.js +84 -0
- package/dist/cjs/node_modules/core-js/internals/internal-state.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/is-array-iterator-method.js +18 -0
- package/dist/cjs/node_modules/core-js/internals/is-array-iterator-method.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/is-array.js +15 -0
- package/dist/cjs/node_modules/core-js/internals/is-array.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/is-callable.js +16 -0
- package/dist/cjs/node_modules/core-js/internals/is-callable.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/is-constructor.js +63 -0
- package/dist/cjs/node_modules/core-js/internals/is-constructor.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/is-forced.js +30 -0
- package/dist/cjs/node_modules/core-js/internals/is-forced.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/is-null-or-undefined.js +10 -0
- package/dist/cjs/node_modules/core-js/internals/is-null-or-undefined.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/is-object.js +12 -0
- package/dist/cjs/node_modules/core-js/internals/is-object.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/is-possible-prototype.js +12 -0
- package/dist/cjs/node_modules/core-js/internals/is-possible-prototype.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/is-regexp.js +21 -0
- package/dist/cjs/node_modules/core-js/internals/is-regexp.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/is-symbol.js +23 -0
- package/dist/cjs/node_modules/core-js/internals/is-symbol.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/iterate.js +84 -0
- package/dist/cjs/node_modules/core-js/internals/iterate.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/iterator-close.js +32 -0
- package/dist/cjs/node_modules/core-js/internals/iterator-close.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/iterator-create-constructor.js +26 -0
- package/dist/cjs/node_modules/core-js/internals/iterator-create-constructor.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/iterator-define.js +118 -0
- package/dist/cjs/node_modules/core-js/internals/iterator-define.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/iterators-core.js +58 -0
- package/dist/cjs/node_modules/core-js/internals/iterators-core.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/iterators.js +6 -0
- package/dist/cjs/node_modules/core-js/internals/iterators.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/length-of-array-like.js +14 -0
- package/dist/cjs/node_modules/core-js/internals/length-of-array-like.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/make-built-in.js +71 -0
- package/dist/cjs/node_modules/core-js/internals/make-built-in.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/math-trunc.js +15 -0
- package/dist/cjs/node_modules/core-js/internals/math-trunc.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/microtask.js +93 -0
- package/dist/cjs/node_modules/core-js/internals/microtask.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/new-promise-capability.js +28 -0
- package/dist/cjs/node_modules/core-js/internals/new-promise-capability.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/not-a-regexp.js +16 -0
- package/dist/cjs/node_modules/core-js/internals/not-a-regexp.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/object-create.js +98 -0
- package/dist/cjs/node_modules/core-js/internals/object-create.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/object-define-properties.js +34 -0
- package/dist/cjs/node_modules/core-js/internals/object-define-properties.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/object-define-property.js +55 -0
- package/dist/cjs/node_modules/core-js/internals/object-define-property.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/object-get-own-property-descriptor.js +38 -0
- package/dist/cjs/node_modules/core-js/internals/object-get-own-property-descriptor.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/object-get-own-property-names.js +20 -0
- package/dist/cjs/node_modules/core-js/internals/object-get-own-property-names.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/object-get-own-property-symbols.js +9 -0
- package/dist/cjs/node_modules/core-js/internals/object-get-own-property-symbols.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/object-get-prototype-of.js +32 -0
- package/dist/cjs/node_modules/core-js/internals/object-get-prototype-of.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/object-is-prototype-of.js +10 -0
- package/dist/cjs/node_modules/core-js/internals/object-is-prototype-of.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/object-keys-internal.js +31 -0
- package/dist/cjs/node_modules/core-js/internals/object-keys-internal.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/object-keys.js +17 -0
- package/dist/cjs/node_modules/core-js/internals/object-keys.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/object-property-is-enumerable.js +20 -0
- package/dist/cjs/node_modules/core-js/internals/object-property-is-enumerable.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/object-set-prototype-of.js +38 -0
- package/dist/cjs/node_modules/core-js/internals/object-set-prototype-of.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/ordinary-to-primitive.js +24 -0
- package/dist/cjs/node_modules/core-js/internals/ordinary-to-primitive.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/own-keys.js +27 -0
- package/dist/cjs/node_modules/core-js/internals/own-keys.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/path.js +10 -0
- package/dist/cjs/node_modules/core-js/internals/path.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/perform.js +12 -0
- package/dist/cjs/node_modules/core-js/internals/perform.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/promise-constructor-detection.js +57 -0
- package/dist/cjs/node_modules/core-js/internals/promise-constructor-detection.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/promise-native-constructor.js +10 -0
- package/dist/cjs/node_modules/core-js/internals/promise-native-constructor.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/promise-resolve.js +22 -0
- package/dist/cjs/node_modules/core-js/internals/promise-resolve.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/promise-statics-incorrect-iteration.js +16 -0
- package/dist/cjs/node_modules/core-js/internals/promise-statics-incorrect-iteration.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/queue.js +29 -0
- package/dist/cjs/node_modules/core-js/internals/queue.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/regexp-exec-abstract.js +31 -0
- package/dist/cjs/node_modules/core-js/internals/regexp-exec-abstract.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/regexp-exec.js +132 -0
- package/dist/cjs/node_modules/core-js/internals/regexp-exec.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/regexp-flags-detection.js +54 -0
- package/dist/cjs/node_modules/core-js/internals/regexp-flags-detection.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/regexp-flags.js +24 -0
- package/dist/cjs/node_modules/core-js/internals/regexp-flags.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/regexp-get-flags.js +26 -0
- package/dist/cjs/node_modules/core-js/internals/regexp-get-flags.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/regexp-sticky-helpers.js +37 -0
- package/dist/cjs/node_modules/core-js/internals/regexp-sticky-helpers.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/regexp-unsupported-dot-all.js +18 -0
- package/dist/cjs/node_modules/core-js/internals/regexp-unsupported-dot-all.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/regexp-unsupported-ncg.js +19 -0
- package/dist/cjs/node_modules/core-js/internals/regexp-unsupported-ncg.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/require-object-coercible.js +17 -0
- package/dist/cjs/node_modules/core-js/internals/require-object-coercible.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/safe-get-built-in.js +20 -0
- package/dist/cjs/node_modules/core-js/internals/safe-get-built-in.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/set-species.js +27 -0
- package/dist/cjs/node_modules/core-js/internals/set-species.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/set-to-string-tag.js +22 -0
- package/dist/cjs/node_modules/core-js/internals/set-to-string-tag.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/shared-key.js +16 -0
- package/dist/cjs/node_modules/core-js/internals/shared-key.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/shared-store.js +24 -0
- package/dist/cjs/node_modules/core-js/internals/shared-store.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/shared.js +12 -0
- package/dist/cjs/node_modules/core-js/internals/shared.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/species-constructor.js +24 -0
- package/dist/cjs/node_modules/core-js/internals/species-constructor.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/string-multibyte.js +43 -0
- package/dist/cjs/node_modules/core-js/internals/string-multibyte.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/string-trim-forced.js +24 -0
- package/dist/cjs/node_modules/core-js/internals/string-trim-forced.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/string-trim.js +34 -0
- package/dist/cjs/node_modules/core-js/internals/string-trim.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/symbol-constructor-detection.js +27 -0
- package/dist/cjs/node_modules/core-js/internals/symbol-constructor-detection.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/task.js +132 -0
- package/dist/cjs/node_modules/core-js/internals/task.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/to-absolute-index.js +19 -0
- package/dist/cjs/node_modules/core-js/internals/to-absolute-index.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/to-indexed-object.js +15 -0
- package/dist/cjs/node_modules/core-js/internals/to-indexed-object.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/to-integer-or-infinity.js +16 -0
- package/dist/cjs/node_modules/core-js/internals/to-integer-or-infinity.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/to-length.js +17 -0
- package/dist/cjs/node_modules/core-js/internals/to-length.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/to-object.js +16 -0
- package/dist/cjs/node_modules/core-js/internals/to-object.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/to-primitive.js +37 -0
- package/dist/cjs/node_modules/core-js/internals/to-primitive.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/to-property-key.js +17 -0
- package/dist/cjs/node_modules/core-js/internals/to-property-key.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/to-string-tag-support.js +15 -0
- package/dist/cjs/node_modules/core-js/internals/to-string-tag-support.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/to-string.js +15 -0
- package/dist/cjs/node_modules/core-js/internals/to-string.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/try-to-string.js +14 -0
- package/dist/cjs/node_modules/core-js/internals/try-to-string.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/uid.js +16 -0
- package/dist/cjs/node_modules/core-js/internals/uid.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/use-symbol-as-uid.js +13 -0
- package/dist/cjs/node_modules/core-js/internals/use-symbol-as-uid.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/v8-prototype-define-bug.js +20 -0
- package/dist/cjs/node_modules/core-js/internals/v8-prototype-define-bug.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/validate-arguments-length.js +11 -0
- package/dist/cjs/node_modules/core-js/internals/validate-arguments-length.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/weak-map-basic-detection.js +14 -0
- package/dist/cjs/node_modules/core-js/internals/weak-map-basic-detection.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/well-known-symbol.js +30 -0
- package/dist/cjs/node_modules/core-js/internals/well-known-symbol.js.map +1 -0
- package/dist/cjs/node_modules/core-js/internals/whitespaces.js +8 -0
- package/dist/cjs/node_modules/core-js/internals/whitespaces.js.map +1 -0
- package/dist/cjs/node_modules/core-js/modules/es.array.index-of.js +30 -0
- package/dist/cjs/node_modules/core-js/modules/es.array.index-of.js.map +1 -0
- package/dist/cjs/node_modules/core-js/modules/es.array.iterator.js +75 -0
- package/dist/cjs/node_modules/core-js/modules/es.array.iterator.js.map +1 -0
- package/dist/cjs/node_modules/core-js/modules/es.array.reduce.js +28 -0
- package/dist/cjs/node_modules/core-js/modules/es.array.reduce.js.map +1 -0
- package/dist/cjs/node_modules/core-js/modules/es.array.reverse.js +25 -0
- package/dist/cjs/node_modules/core-js/modules/es.array.reverse.js.map +1 -0
- package/dist/cjs/node_modules/core-js/modules/es.promise.all.js +50 -0
- package/dist/cjs/node_modules/core-js/modules/es.promise.all.js.map +1 -0
- package/dist/cjs/node_modules/core-js/modules/es.promise.catch.js +34 -0
- package/dist/cjs/node_modules/core-js/modules/es.promise.catch.js.map +1 -0
- package/dist/cjs/node_modules/core-js/modules/es.promise.constructor.js +319 -0
- package/dist/cjs/node_modules/core-js/modules/es.promise.constructor.js.map +1 -0
- package/dist/cjs/node_modules/core-js/modules/es.promise.race.js +37 -0
- package/dist/cjs/node_modules/core-js/modules/es.promise.race.js.map +1 -0
- package/dist/cjs/node_modules/core-js/modules/es.promise.reject.js +22 -0
- package/dist/cjs/node_modules/core-js/modules/es.promise.reject.js.map +1 -0
- package/dist/cjs/node_modules/core-js/modules/es.promise.resolve.js +23 -0
- package/dist/cjs/node_modules/core-js/modules/es.promise.resolve.js.map +1 -0
- package/dist/cjs/node_modules/core-js/modules/es.regexp.exec.js +14 -0
- package/dist/cjs/node_modules/core-js/modules/es.regexp.exec.js.map +1 -0
- package/dist/cjs/node_modules/core-js/modules/es.regexp.to-string.js +35 -0
- package/dist/cjs/node_modules/core-js/modules/es.regexp.to-string.js.map +1 -0
- package/dist/cjs/node_modules/core-js/modules/es.string.ends-with.js +45 -0
- package/dist/cjs/node_modules/core-js/modules/es.string.ends-with.js.map +1 -0
- package/dist/cjs/node_modules/core-js/modules/es.string.includes.js +30 -0
- package/dist/cjs/node_modules/core-js/modules/es.string.includes.js.map +1 -0
- package/dist/cjs/node_modules/core-js/modules/es.string.match.js +69 -0
- package/dist/cjs/node_modules/core-js/modules/es.string.match.js.map +1 -0
- package/dist/cjs/node_modules/core-js/modules/es.string.replace.js +165 -0
- package/dist/cjs/node_modules/core-js/modules/es.string.replace.js.map +1 -0
- package/dist/cjs/node_modules/core-js/modules/es.string.split.js +128 -0
- package/dist/cjs/node_modules/core-js/modules/es.string.split.js.map +1 -0
- package/dist/cjs/node_modules/core-js/modules/es.string.starts-with.js +43 -0
- package/dist/cjs/node_modules/core-js/modules/es.string.starts-with.js.map +1 -0
- package/dist/cjs/node_modules/core-js/modules/es.string.trim.js +18 -0
- package/dist/cjs/node_modules/core-js/modules/es.string.trim.js.map +1 -0
- package/dist/cjs/node_modules/core-js/modules/web.dom-collections.iterator.js +47 -0
- package/dist/cjs/node_modules/core-js/modules/web.dom-collections.iterator.js.map +1 -0
- package/dist/cjs/node_modules/dompurify/dist/purify.es.js +1533 -0
- package/dist/cjs/node_modules/dompurify/dist/purify.es.js.map +1 -0
- package/dist/cjs/node_modules/fflate/esm/browser.js +807 -0
- package/dist/cjs/node_modules/fflate/esm/browser.js.map +1 -0
- package/dist/cjs/node_modules/html2canvas/dist/html2canvas.esm.js +7824 -0
- package/dist/cjs/node_modules/html2canvas/dist/html2canvas.esm.js.map +1 -0
- package/dist/cjs/node_modules/jspdf/dist/jspdf.es.min.js +358 -0
- package/dist/cjs/node_modules/jspdf/dist/jspdf.es.min.js.map +1 -0
- package/dist/cjs/node_modules/performance-now/lib/performance-now.js +46 -0
- package/dist/cjs/node_modules/performance-now/lib/performance-now.js.map +1 -0
- package/dist/cjs/node_modules/qrious/dist/qrious.js +2374 -0
- package/dist/cjs/node_modules/qrious/dist/qrious.js.map +1 -0
- package/dist/cjs/node_modules/raf/index.js +87 -0
- package/dist/cjs/node_modules/raf/index.js.map +1 -0
- package/dist/cjs/node_modules/rgbcolor/index.js +311 -0
- package/dist/cjs/node_modules/rgbcolor/index.js.map +1 -0
- package/dist/cjs/node_modules/stackblur-canvas/dist/stackblur-es.js +384 -0
- package/dist/cjs/node_modules/stackblur-canvas/dist/stackblur-es.js.map +1 -0
- package/dist/cjs/node_modules/svg-pathdata/lib/SVGPathData.module.js +23 -0
- package/dist/cjs/node_modules/svg-pathdata/lib/SVGPathData.module.js.map +1 -0
- package/dist/cjs/storage/templateStorage.js +154 -0
- package/dist/cjs/storage/templateStorage.js.map +1 -0
- package/dist/cjs/styles.css +1 -0
- package/dist/cjs/utils/styleUtils.js +98 -0
- package/dist/cjs/utils/styleUtils.js.map +1 -0
- package/dist/cjs/utils/validators.js +144 -0
- package/dist/cjs/utils/validators.js.map +1 -0
- package/dist/esm/_virtual/_commonjsHelpers.js +8 -0
- package/dist/esm/_virtual/_commonjsHelpers.js.map +1 -0
- package/dist/esm/_virtual/index.js +4 -0
- package/dist/esm/_virtual/index.js.map +1 -0
- package/dist/esm/_virtual/make-built-in.js +4 -0
- package/dist/esm/_virtual/make-built-in.js.map +1 -0
- package/dist/esm/_virtual/new-promise-capability.js +4 -0
- package/dist/esm/_virtual/new-promise-capability.js.map +1 -0
- package/dist/esm/_virtual/object-define-properties.js +4 -0
- package/dist/esm/_virtual/object-define-properties.js.map +1 -0
- package/dist/esm/_virtual/object-define-property.js +4 -0
- package/dist/esm/_virtual/object-define-property.js.map +1 -0
- package/dist/esm/_virtual/object-get-own-property-descriptor.js +4 -0
- package/dist/esm/_virtual/object-get-own-property-descriptor.js.map +1 -0
- package/dist/esm/_virtual/object-get-own-property-names.js +4 -0
- package/dist/esm/_virtual/object-get-own-property-names.js.map +1 -0
- package/dist/esm/_virtual/object-get-own-property-symbols.js +4 -0
- package/dist/esm/_virtual/object-get-own-property-symbols.js.map +1 -0
- package/dist/esm/_virtual/object-property-is-enumerable.js +4 -0
- package/dist/esm/_virtual/object-property-is-enumerable.js.map +1 -0
- package/dist/esm/_virtual/performance-now.js +4 -0
- package/dist/esm/_virtual/performance-now.js.map +1 -0
- package/dist/esm/_virtual/qrious.js +4 -0
- package/dist/esm/_virtual/qrious.js.map +1 -0
- package/dist/esm/_virtual/shared-store.js +4 -0
- package/dist/esm/_virtual/shared-store.js.map +1 -0
- package/dist/esm/components/IDCardDesigner.js +278 -0
- package/dist/esm/components/IDCardDesigner.js.map +1 -0
- package/dist/esm/components/IDCardGenerator.js +134 -0
- package/dist/esm/components/IDCardGenerator.js.map +1 -0
- package/dist/esm/components/IDCardPreview.js +163 -0
- package/dist/esm/components/IDCardPreview.js.map +1 -0
- package/dist/esm/core/exportUtils.js +151 -0
- package/dist/esm/core/exportUtils.js.map +1 -0
- package/dist/esm/core/qrUtils.js +60 -0
- package/dist/esm/core/qrUtils.js.map +1 -0
- package/dist/esm/hooks/useFieldMapping.js +146 -0
- package/dist/esm/hooks/useFieldMapping.js.map +1 -0
- package/dist/esm/hooks/useIDCardExport.js +79 -0
- package/dist/esm/hooks/useIDCardExport.js.map +1 -0
- package/dist/esm/hooks/useIDCardTemplate.js +153 -0
- package/dist/esm/hooks/useIDCardTemplate.js.map +1 -0
- package/dist/esm/index.js +12 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js +28 -0
- package/dist/esm/node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js.map +1 -0
- package/dist/esm/node_modules/@babel/runtime/helpers/esm/defineProperty.js +13 -0
- package/dist/esm/node_modules/@babel/runtime/helpers/esm/defineProperty.js.map +1 -0
- package/dist/esm/node_modules/@babel/runtime/helpers/esm/toPrimitive.js +15 -0
- package/dist/esm/node_modules/@babel/runtime/helpers/esm/toPrimitive.js.map +1 -0
- package/dist/esm/node_modules/@babel/runtime/helpers/esm/toPropertyKey.js +10 -0
- package/dist/esm/node_modules/@babel/runtime/helpers/esm/toPropertyKey.js.map +1 -0
- package/dist/esm/node_modules/@babel/runtime/helpers/esm/typeof.js +12 -0
- package/dist/esm/node_modules/@babel/runtime/helpers/esm/typeof.js.map +1 -0
- package/dist/esm/node_modules/canvg/lib/index.es.js +6556 -0
- package/dist/esm/node_modules/canvg/lib/index.es.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/a-callable.js +16 -0
- package/dist/esm/node_modules/core-js/internals/a-callable.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/a-constructor.js +16 -0
- package/dist/esm/node_modules/core-js/internals/a-constructor.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/a-possible-prototype.js +14 -0
- package/dist/esm/node_modules/core-js/internals/a-possible-prototype.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/add-to-unscopables.js +28 -0
- package/dist/esm/node_modules/core-js/internals/add-to-unscopables.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/advance-string-index.js +12 -0
- package/dist/esm/node_modules/core-js/internals/advance-string-index.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/an-instance.js +13 -0
- package/dist/esm/node_modules/core-js/internals/an-instance.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/an-object.js +15 -0
- package/dist/esm/node_modules/core-js/internals/an-object.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/array-includes.js +37 -0
- package/dist/esm/node_modules/core-js/internals/array-includes.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/array-method-is-strict.js +14 -0
- package/dist/esm/node_modules/core-js/internals/array-method-is-strict.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/array-reduce.js +49 -0
- package/dist/esm/node_modules/core-js/internals/array-reduce.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/array-slice.js +8 -0
- package/dist/esm/node_modules/core-js/internals/array-slice.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/check-correctness-of-iteration.js +47 -0
- package/dist/esm/node_modules/core-js/internals/check-correctness-of-iteration.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/classof-raw.js +13 -0
- package/dist/esm/node_modules/core-js/internals/classof-raw.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/classof.js +37 -0
- package/dist/esm/node_modules/core-js/internals/classof.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/copy-constructor-properties.js +26 -0
- package/dist/esm/node_modules/core-js/internals/copy-constructor-properties.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/correct-is-regexp-logic.js +20 -0
- package/dist/esm/node_modules/core-js/internals/correct-is-regexp-logic.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/correct-prototype-getter.js +13 -0
- package/dist/esm/node_modules/core-js/internals/correct-prototype-getter.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/create-iter-result-object.js +8 -0
- package/dist/esm/node_modules/core-js/internals/create-iter-result-object.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/create-non-enumerable-property.js +18 -0
- package/dist/esm/node_modules/core-js/internals/create-non-enumerable-property.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/create-property-descriptor.js +11 -0
- package/dist/esm/node_modules/core-js/internals/create-property-descriptor.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/define-built-in-accessor.js +15 -0
- package/dist/esm/node_modules/core-js/internals/define-built-in-accessor.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/define-built-in.js +36 -0
- package/dist/esm/node_modules/core-js/internals/define-built-in.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/define-global-property.js +17 -0
- package/dist/esm/node_modules/core-js/internals/define-global-property.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/descriptors.js +12 -0
- package/dist/esm/node_modules/core-js/internals/descriptors.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/document-create-element.js +16 -0
- package/dist/esm/node_modules/core-js/internals/document-create-element.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/dom-iterables.js +38 -0
- package/dist/esm/node_modules/core-js/internals/dom-iterables.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/dom-token-list-prototype.js +12 -0
- package/dist/esm/node_modules/core-js/internals/dom-token-list-prototype.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/enum-bug-keys.js +13 -0
- package/dist/esm/node_modules/core-js/internals/enum-bug-keys.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/environment-is-ios-pebble.js +8 -0
- package/dist/esm/node_modules/core-js/internals/environment-is-ios-pebble.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/environment-is-ios.js +9 -0
- package/dist/esm/node_modules/core-js/internals/environment-is-ios.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/environment-is-node.js +8 -0
- package/dist/esm/node_modules/core-js/internals/environment-is-node.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/environment-is-webos-webkit.js +8 -0
- package/dist/esm/node_modules/core-js/internals/environment-is-webos-webkit.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/environment-user-agent.js +11 -0
- package/dist/esm/node_modules/core-js/internals/environment-user-agent.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/environment-v8-version.js +33 -0
- package/dist/esm/node_modules/core-js/internals/environment-v8-version.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/environment.js +27 -0
- package/dist/esm/node_modules/core-js/internals/environment.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/export.js +66 -0
- package/dist/esm/node_modules/core-js/internals/export.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/fails.js +10 -0
- package/dist/esm/node_modules/core-js/internals/fails.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/fix-regexp-well-known-symbol-logic.js +88 -0
- package/dist/esm/node_modules/core-js/internals/fix-regexp-well-known-symbol-logic.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/function-apply.js +15 -0
- package/dist/esm/node_modules/core-js/internals/function-apply.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/function-bind-context.js +20 -0
- package/dist/esm/node_modules/core-js/internals/function-bind-context.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/function-bind-native.js +13 -0
- package/dist/esm/node_modules/core-js/internals/function-bind-native.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/function-call.js +12 -0
- package/dist/esm/node_modules/core-js/internals/function-call.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/function-name.js +22 -0
- package/dist/esm/node_modules/core-js/internals/function-name.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/function-uncurry-this-accessor.js +15 -0
- package/dist/esm/node_modules/core-js/internals/function-uncurry-this-accessor.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/function-uncurry-this-clause.js +15 -0
- package/dist/esm/node_modules/core-js/internals/function-uncurry-this-clause.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/function-uncurry-this.js +17 -0
- package/dist/esm/node_modules/core-js/internals/function-uncurry-this.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/get-built-in.js +16 -0
- package/dist/esm/node_modules/core-js/internals/get-built-in.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/get-iterator-method.js +22 -0
- package/dist/esm/node_modules/core-js/internals/get-iterator-method.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/get-iterator.js +22 -0
- package/dist/esm/node_modules/core-js/internals/get-iterator.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/get-method.js +15 -0
- package/dist/esm/node_modules/core-js/internals/get-method.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/get-substitution.js +51 -0
- package/dist/esm/node_modules/core-js/internals/get-substitution.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/global-this.js +20 -0
- package/dist/esm/node_modules/core-js/internals/global-this.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/has-own-property.js +17 -0
- package/dist/esm/node_modules/core-js/internals/has-own-property.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/hidden-keys.js +4 -0
- package/dist/esm/node_modules/core-js/internals/hidden-keys.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/host-report-errors.js +9 -0
- package/dist/esm/node_modules/core-js/internals/host-report-errors.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/html.js +8 -0
- package/dist/esm/node_modules/core-js/internals/html.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/ie8-dom-define.js +18 -0
- package/dist/esm/node_modules/core-js/internals/ie8-dom-define.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/indexed-object.js +22 -0
- package/dist/esm/node_modules/core-js/internals/indexed-object.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/inspect-source.js +21 -0
- package/dist/esm/node_modules/core-js/internals/inspect-source.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/internal-state.js +82 -0
- package/dist/esm/node_modules/core-js/internals/internal-state.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/is-array-iterator-method.js +16 -0
- package/dist/esm/node_modules/core-js/internals/is-array-iterator-method.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/is-array.js +13 -0
- package/dist/esm/node_modules/core-js/internals/is-array.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/is-callable.js +14 -0
- package/dist/esm/node_modules/core-js/internals/is-callable.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/is-constructor.js +61 -0
- package/dist/esm/node_modules/core-js/internals/is-constructor.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/is-forced.js +28 -0
- package/dist/esm/node_modules/core-js/internals/is-forced.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/is-null-or-undefined.js +8 -0
- package/dist/esm/node_modules/core-js/internals/is-null-or-undefined.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/is-object.js +10 -0
- package/dist/esm/node_modules/core-js/internals/is-object.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/is-possible-prototype.js +10 -0
- package/dist/esm/node_modules/core-js/internals/is-possible-prototype.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/is-regexp.js +19 -0
- package/dist/esm/node_modules/core-js/internals/is-regexp.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/is-symbol.js +21 -0
- package/dist/esm/node_modules/core-js/internals/is-symbol.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/iterate.js +82 -0
- package/dist/esm/node_modules/core-js/internals/iterate.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/iterator-close.js +30 -0
- package/dist/esm/node_modules/core-js/internals/iterator-close.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/iterator-create-constructor.js +24 -0
- package/dist/esm/node_modules/core-js/internals/iterator-create-constructor.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/iterator-define.js +116 -0
- package/dist/esm/node_modules/core-js/internals/iterator-define.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/iterators-core.js +56 -0
- package/dist/esm/node_modules/core-js/internals/iterators-core.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/iterators.js +4 -0
- package/dist/esm/node_modules/core-js/internals/iterators.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/length-of-array-like.js +12 -0
- package/dist/esm/node_modules/core-js/internals/length-of-array-like.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/make-built-in.js +69 -0
- package/dist/esm/node_modules/core-js/internals/make-built-in.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/math-trunc.js +13 -0
- package/dist/esm/node_modules/core-js/internals/math-trunc.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/microtask.js +91 -0
- package/dist/esm/node_modules/core-js/internals/microtask.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/new-promise-capability.js +26 -0
- package/dist/esm/node_modules/core-js/internals/new-promise-capability.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/not-a-regexp.js +14 -0
- package/dist/esm/node_modules/core-js/internals/not-a-regexp.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/object-create.js +96 -0
- package/dist/esm/node_modules/core-js/internals/object-create.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/object-define-properties.js +32 -0
- package/dist/esm/node_modules/core-js/internals/object-define-properties.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/object-define-property.js +53 -0
- package/dist/esm/node_modules/core-js/internals/object-define-property.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/object-get-own-property-descriptor.js +36 -0
- package/dist/esm/node_modules/core-js/internals/object-get-own-property-descriptor.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/object-get-own-property-names.js +18 -0
- package/dist/esm/node_modules/core-js/internals/object-get-own-property-names.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/object-get-own-property-symbols.js +7 -0
- package/dist/esm/node_modules/core-js/internals/object-get-own-property-symbols.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/object-get-prototype-of.js +30 -0
- package/dist/esm/node_modules/core-js/internals/object-get-prototype-of.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/object-is-prototype-of.js +8 -0
- package/dist/esm/node_modules/core-js/internals/object-is-prototype-of.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/object-keys-internal.js +29 -0
- package/dist/esm/node_modules/core-js/internals/object-keys-internal.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/object-keys.js +15 -0
- package/dist/esm/node_modules/core-js/internals/object-keys.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/object-property-is-enumerable.js +18 -0
- package/dist/esm/node_modules/core-js/internals/object-property-is-enumerable.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/object-set-prototype-of.js +36 -0
- package/dist/esm/node_modules/core-js/internals/object-set-prototype-of.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/ordinary-to-primitive.js +22 -0
- package/dist/esm/node_modules/core-js/internals/ordinary-to-primitive.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/own-keys.js +25 -0
- package/dist/esm/node_modules/core-js/internals/own-keys.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/path.js +8 -0
- package/dist/esm/node_modules/core-js/internals/path.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/perform.js +10 -0
- package/dist/esm/node_modules/core-js/internals/perform.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/promise-constructor-detection.js +55 -0
- package/dist/esm/node_modules/core-js/internals/promise-constructor-detection.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/promise-native-constructor.js +8 -0
- package/dist/esm/node_modules/core-js/internals/promise-native-constructor.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/promise-resolve.js +20 -0
- package/dist/esm/node_modules/core-js/internals/promise-resolve.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/promise-statics-incorrect-iteration.js +14 -0
- package/dist/esm/node_modules/core-js/internals/promise-statics-incorrect-iteration.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/queue.js +27 -0
- package/dist/esm/node_modules/core-js/internals/queue.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/regexp-exec-abstract.js +29 -0
- package/dist/esm/node_modules/core-js/internals/regexp-exec-abstract.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/regexp-exec.js +130 -0
- package/dist/esm/node_modules/core-js/internals/regexp-exec.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/regexp-flags-detection.js +52 -0
- package/dist/esm/node_modules/core-js/internals/regexp-flags-detection.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/regexp-flags.js +22 -0
- package/dist/esm/node_modules/core-js/internals/regexp-flags.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/regexp-get-flags.js +24 -0
- package/dist/esm/node_modules/core-js/internals/regexp-get-flags.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/regexp-sticky-helpers.js +35 -0
- package/dist/esm/node_modules/core-js/internals/regexp-sticky-helpers.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/regexp-unsupported-dot-all.js +16 -0
- package/dist/esm/node_modules/core-js/internals/regexp-unsupported-dot-all.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/regexp-unsupported-ncg.js +17 -0
- package/dist/esm/node_modules/core-js/internals/regexp-unsupported-ncg.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/require-object-coercible.js +15 -0
- package/dist/esm/node_modules/core-js/internals/require-object-coercible.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/safe-get-built-in.js +18 -0
- package/dist/esm/node_modules/core-js/internals/safe-get-built-in.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/set-species.js +25 -0
- package/dist/esm/node_modules/core-js/internals/set-species.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/set-to-string-tag.js +20 -0
- package/dist/esm/node_modules/core-js/internals/set-to-string-tag.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/shared-key.js +14 -0
- package/dist/esm/node_modules/core-js/internals/shared-key.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/shared-store.js +22 -0
- package/dist/esm/node_modules/core-js/internals/shared-store.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/shared.js +10 -0
- package/dist/esm/node_modules/core-js/internals/shared.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/species-constructor.js +22 -0
- package/dist/esm/node_modules/core-js/internals/species-constructor.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/string-multibyte.js +41 -0
- package/dist/esm/node_modules/core-js/internals/string-multibyte.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/string-trim-forced.js +22 -0
- package/dist/esm/node_modules/core-js/internals/string-trim-forced.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/string-trim.js +32 -0
- package/dist/esm/node_modules/core-js/internals/string-trim.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/symbol-constructor-detection.js +25 -0
- package/dist/esm/node_modules/core-js/internals/symbol-constructor-detection.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/task.js +130 -0
- package/dist/esm/node_modules/core-js/internals/task.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/to-absolute-index.js +17 -0
- package/dist/esm/node_modules/core-js/internals/to-absolute-index.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/to-indexed-object.js +13 -0
- package/dist/esm/node_modules/core-js/internals/to-indexed-object.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/to-integer-or-infinity.js +14 -0
- package/dist/esm/node_modules/core-js/internals/to-integer-or-infinity.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/to-length.js +15 -0
- package/dist/esm/node_modules/core-js/internals/to-length.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/to-object.js +14 -0
- package/dist/esm/node_modules/core-js/internals/to-object.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/to-primitive.js +35 -0
- package/dist/esm/node_modules/core-js/internals/to-primitive.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/to-property-key.js +15 -0
- package/dist/esm/node_modules/core-js/internals/to-property-key.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/to-string-tag-support.js +13 -0
- package/dist/esm/node_modules/core-js/internals/to-string-tag-support.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/to-string.js +13 -0
- package/dist/esm/node_modules/core-js/internals/to-string.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/try-to-string.js +12 -0
- package/dist/esm/node_modules/core-js/internals/try-to-string.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/uid.js +14 -0
- package/dist/esm/node_modules/core-js/internals/uid.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/use-symbol-as-uid.js +11 -0
- package/dist/esm/node_modules/core-js/internals/use-symbol-as-uid.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/v8-prototype-define-bug.js +18 -0
- package/dist/esm/node_modules/core-js/internals/v8-prototype-define-bug.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/validate-arguments-length.js +9 -0
- package/dist/esm/node_modules/core-js/internals/validate-arguments-length.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/weak-map-basic-detection.js +12 -0
- package/dist/esm/node_modules/core-js/internals/weak-map-basic-detection.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/well-known-symbol.js +28 -0
- package/dist/esm/node_modules/core-js/internals/well-known-symbol.js.map +1 -0
- package/dist/esm/node_modules/core-js/internals/whitespaces.js +6 -0
- package/dist/esm/node_modules/core-js/internals/whitespaces.js.map +1 -0
- package/dist/esm/node_modules/core-js/modules/es.array.index-of.js +28 -0
- package/dist/esm/node_modules/core-js/modules/es.array.index-of.js.map +1 -0
- package/dist/esm/node_modules/core-js/modules/es.array.iterator.js +73 -0
- package/dist/esm/node_modules/core-js/modules/es.array.iterator.js.map +1 -0
- package/dist/esm/node_modules/core-js/modules/es.array.reduce.js +26 -0
- package/dist/esm/node_modules/core-js/modules/es.array.reduce.js.map +1 -0
- package/dist/esm/node_modules/core-js/modules/es.array.reverse.js +23 -0
- package/dist/esm/node_modules/core-js/modules/es.array.reverse.js.map +1 -0
- package/dist/esm/node_modules/core-js/modules/es.promise.all.js +48 -0
- package/dist/esm/node_modules/core-js/modules/es.promise.all.js.map +1 -0
- package/dist/esm/node_modules/core-js/modules/es.promise.catch.js +32 -0
- package/dist/esm/node_modules/core-js/modules/es.promise.catch.js.map +1 -0
- package/dist/esm/node_modules/core-js/modules/es.promise.constructor.js +317 -0
- package/dist/esm/node_modules/core-js/modules/es.promise.constructor.js.map +1 -0
- package/dist/esm/node_modules/core-js/modules/es.promise.race.js +35 -0
- package/dist/esm/node_modules/core-js/modules/es.promise.race.js.map +1 -0
- package/dist/esm/node_modules/core-js/modules/es.promise.reject.js +20 -0
- package/dist/esm/node_modules/core-js/modules/es.promise.reject.js.map +1 -0
- package/dist/esm/node_modules/core-js/modules/es.promise.resolve.js +21 -0
- package/dist/esm/node_modules/core-js/modules/es.promise.resolve.js.map +1 -0
- package/dist/esm/node_modules/core-js/modules/es.regexp.exec.js +12 -0
- package/dist/esm/node_modules/core-js/modules/es.regexp.exec.js.map +1 -0
- package/dist/esm/node_modules/core-js/modules/es.regexp.to-string.js +33 -0
- package/dist/esm/node_modules/core-js/modules/es.regexp.to-string.js.map +1 -0
- package/dist/esm/node_modules/core-js/modules/es.string.ends-with.js +43 -0
- package/dist/esm/node_modules/core-js/modules/es.string.ends-with.js.map +1 -0
- package/dist/esm/node_modules/core-js/modules/es.string.includes.js +28 -0
- package/dist/esm/node_modules/core-js/modules/es.string.includes.js.map +1 -0
- package/dist/esm/node_modules/core-js/modules/es.string.match.js +67 -0
- package/dist/esm/node_modules/core-js/modules/es.string.match.js.map +1 -0
- package/dist/esm/node_modules/core-js/modules/es.string.replace.js +163 -0
- package/dist/esm/node_modules/core-js/modules/es.string.replace.js.map +1 -0
- package/dist/esm/node_modules/core-js/modules/es.string.split.js +126 -0
- package/dist/esm/node_modules/core-js/modules/es.string.split.js.map +1 -0
- package/dist/esm/node_modules/core-js/modules/es.string.starts-with.js +41 -0
- package/dist/esm/node_modules/core-js/modules/es.string.starts-with.js.map +1 -0
- package/dist/esm/node_modules/core-js/modules/es.string.trim.js +16 -0
- package/dist/esm/node_modules/core-js/modules/es.string.trim.js.map +1 -0
- package/dist/esm/node_modules/core-js/modules/web.dom-collections.iterator.js +45 -0
- package/dist/esm/node_modules/core-js/modules/web.dom-collections.iterator.js.map +1 -0
- package/dist/esm/node_modules/dompurify/dist/purify.es.js +1531 -0
- package/dist/esm/node_modules/dompurify/dist/purify.es.js.map +1 -0
- package/dist/esm/node_modules/fflate/esm/browser.js +804 -0
- package/dist/esm/node_modules/fflate/esm/browser.js.map +1 -0
- package/dist/esm/node_modules/html2canvas/dist/html2canvas.esm.js +7822 -0
- package/dist/esm/node_modules/html2canvas/dist/html2canvas.esm.js.map +1 -0
- package/dist/esm/node_modules/jspdf/dist/jspdf.es.min.js +337 -0
- package/dist/esm/node_modules/jspdf/dist/jspdf.es.min.js.map +1 -0
- package/dist/esm/node_modules/performance-now/lib/performance-now.js +44 -0
- package/dist/esm/node_modules/performance-now/lib/performance-now.js.map +1 -0
- package/dist/esm/node_modules/qrious/dist/qrious.js +2372 -0
- package/dist/esm/node_modules/qrious/dist/qrious.js.map +1 -0
- package/dist/esm/node_modules/raf/index.js +85 -0
- package/dist/esm/node_modules/raf/index.js.map +1 -0
- package/dist/esm/node_modules/rgbcolor/index.js +309 -0
- package/dist/esm/node_modules/rgbcolor/index.js.map +1 -0
- package/dist/esm/node_modules/stackblur-canvas/dist/stackblur-es.js +380 -0
- package/dist/esm/node_modules/stackblur-canvas/dist/stackblur-es.js.map +1 -0
- package/dist/esm/node_modules/svg-pathdata/lib/SVGPathData.module.js +18 -0
- package/dist/esm/node_modules/svg-pathdata/lib/SVGPathData.module.js.map +1 -0
- package/dist/esm/storage/templateStorage.js +144 -0
- package/dist/esm/storage/templateStorage.js.map +1 -0
- package/dist/esm/styles.css +1 -0
- package/dist/esm/utils/styleUtils.js +91 -0
- package/dist/esm/utils/styleUtils.js.map +1 -0
- package/dist/esm/utils/validators.js +139 -0
- package/dist/esm/utils/validators.js.map +1 -0
- package/dist/types/components/IDCardDesigner.d.ts +18 -0
- package/dist/types/components/IDCardGenerator.d.ts +19 -0
- package/dist/types/components/IDCardPreview.d.ts +15 -0
- package/dist/types/core/exportUtils.d.ts +34 -0
- package/dist/types/core/qrUtils.d.ts +27 -0
- package/dist/types/hooks/useFieldMapping.d.ts +10 -0
- package/dist/types/hooks/useIDCardExport.d.ts +10 -0
- package/dist/types/hooks/useIDCardTemplate.d.ts +10 -0
- package/dist/types/index.d.ts +33 -0
- package/dist/types/storage/templateStorage.d.ts +53 -0
- package/dist/types/types/index.d.ts +235 -0
- package/dist/types/utils/styleUtils.d.ts +34 -0
- package/dist/types/utils/validators.d.ts +27 -0
- package/package.json +65 -0
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import { useMemo } from 'react';
|
|
3
|
+
import { positionToStyle, fieldStyleToCSS } from '../utils/styleUtils.js';
|
|
4
|
+
import { generateQrCodeFromFields } from '../core/qrUtils.js';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* IDCardGenerator - Renders a completed ID card
|
|
8
|
+
*
|
|
9
|
+
* Takes a template and user data, then renders the filled card.
|
|
10
|
+
* This is the component used to display actual ID cards for individual users.
|
|
11
|
+
*
|
|
12
|
+
* Example:
|
|
13
|
+
* ```tsx
|
|
14
|
+
* <IDCardGenerator
|
|
15
|
+
* template={myTemplate}
|
|
16
|
+
* data={{ name: 'John Doe', photo: '...' }}
|
|
17
|
+
* side="front"
|
|
18
|
+
* />
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
const IDCardGenerator = ({ template, data, side = 'front', scale = 1, className = '', style = {}, onFieldClick, editable = false, }) => {
|
|
22
|
+
// Get fields for the current side only
|
|
23
|
+
const fieldsToRender = useMemo(() => {
|
|
24
|
+
return template.fields.filter((field) => field.side === side);
|
|
25
|
+
}, [template.fields, side]);
|
|
26
|
+
// Get background for current side
|
|
27
|
+
const backgroundImage = side === 'front' ? template.backgrounds.front : template.backgrounds.back;
|
|
28
|
+
// Render a single field
|
|
29
|
+
const renderField = (field) => {
|
|
30
|
+
const posStyle = positionToStyle(field.position);
|
|
31
|
+
const fieldStyle = fieldStyleToCSS(field.style);
|
|
32
|
+
const combinedStyle = {
|
|
33
|
+
...posStyle,
|
|
34
|
+
...fieldStyle,
|
|
35
|
+
zIndex: field.zIndex || 1,
|
|
36
|
+
boxSizing: 'border-box',
|
|
37
|
+
overflow: 'hidden',
|
|
38
|
+
cursor: editable ? 'pointer' : 'default',
|
|
39
|
+
};
|
|
40
|
+
const handleClick = (e) => {
|
|
41
|
+
if (onFieldClick) {
|
|
42
|
+
e.stopPropagation();
|
|
43
|
+
onFieldClick(field);
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
const value = getFieldValue(field, data);
|
|
47
|
+
switch (field.type) {
|
|
48
|
+
case 'text':
|
|
49
|
+
return (jsxs("div", { id: field.id, style: combinedStyle, onClick: handleClick, className: "idcard-field idcard-field-text", children: [field.label && (jsx("span", { className: "idcard-field-label", style: { fontSize: '0.8em', display: 'block' }, children: field.label })), jsx("span", { className: "idcard-field-value", children: String(value || field.placeholder || '') })] }, field.id));
|
|
50
|
+
case 'label':
|
|
51
|
+
return (jsx("div", { id: field.id, style: combinedStyle, onClick: handleClick, className: "idcard-field idcard-field-label", children: field.staticText || field.label || '' }, field.id));
|
|
52
|
+
case 'image':
|
|
53
|
+
return (jsx("div", { id: field.id, style: {
|
|
54
|
+
...combinedStyle,
|
|
55
|
+
display: 'flex',
|
|
56
|
+
alignItems: 'center',
|
|
57
|
+
justifyContent: 'center',
|
|
58
|
+
}, onClick: handleClick, className: "idcard-field idcard-field-image", children: value ? (jsx("img", { src: String(value), alt: field.label || 'Image', style: {
|
|
59
|
+
width: '100%',
|
|
60
|
+
height: '100%',
|
|
61
|
+
objectFit: 'cover',
|
|
62
|
+
objectPosition: 'center top',
|
|
63
|
+
} })) : (jsx("div", { style: {
|
|
64
|
+
width: '100%',
|
|
65
|
+
height: '100%',
|
|
66
|
+
backgroundColor: '#e0e0e0',
|
|
67
|
+
display: 'flex',
|
|
68
|
+
alignItems: 'center',
|
|
69
|
+
justifyContent: 'center',
|
|
70
|
+
fontSize: '10px',
|
|
71
|
+
color: '#666',
|
|
72
|
+
}, children: field.label || 'Photo' })) }, field.id));
|
|
73
|
+
case 'qrcode':
|
|
74
|
+
const qrDataUrl = field.qrFields
|
|
75
|
+
? generateQrCodeFromFields(data, field.qrFields, Math.min(field.position.width, field.position.height) * 2)
|
|
76
|
+
: '';
|
|
77
|
+
return (jsx("div", { id: field.id, style: {
|
|
78
|
+
...combinedStyle,
|
|
79
|
+
backgroundColor: '#fff',
|
|
80
|
+
display: 'flex',
|
|
81
|
+
alignItems: 'center',
|
|
82
|
+
justifyContent: 'center',
|
|
83
|
+
}, onClick: handleClick, className: "idcard-field idcard-field-qrcode", children: qrDataUrl ? (jsx("img", { src: qrDataUrl, alt: "QR Code", style: { width: '100%', height: '100%', objectFit: 'contain' } })) : (jsx("div", { style: {
|
|
84
|
+
width: '100%',
|
|
85
|
+
height: '100%',
|
|
86
|
+
backgroundColor: '#f0f0f0',
|
|
87
|
+
display: 'flex',
|
|
88
|
+
alignItems: 'center',
|
|
89
|
+
justifyContent: 'center',
|
|
90
|
+
fontSize: '10px',
|
|
91
|
+
color: '#666',
|
|
92
|
+
}, children: "QR Code" })) }, field.id));
|
|
93
|
+
default:
|
|
94
|
+
return null;
|
|
95
|
+
}
|
|
96
|
+
};
|
|
97
|
+
// Card container style
|
|
98
|
+
const cardStyle = {
|
|
99
|
+
width: template.cardSize.width * scale,
|
|
100
|
+
height: template.cardSize.height * scale,
|
|
101
|
+
position: 'relative',
|
|
102
|
+
overflow: 'hidden',
|
|
103
|
+
backgroundColor: '#fff',
|
|
104
|
+
transform: `scale(${scale})`,
|
|
105
|
+
transformOrigin: 'top left',
|
|
106
|
+
...style,
|
|
107
|
+
};
|
|
108
|
+
return (jsxs("div", { id: side === 'front' ? 'idcardfront' : 'idcardback', className: `idcard-container idcard-${side} ${className}`, style: cardStyle, children: [backgroundImage && (jsx("img", { src: backgroundImage, alt: `${side} background`, style: {
|
|
109
|
+
position: 'absolute',
|
|
110
|
+
top: 0,
|
|
111
|
+
left: 0,
|
|
112
|
+
width: '100%',
|
|
113
|
+
height: '100%',
|
|
114
|
+
objectFit: 'cover',
|
|
115
|
+
zIndex: 0,
|
|
116
|
+
} })), fieldsToRender.map(renderField)] }));
|
|
117
|
+
};
|
|
118
|
+
/**
|
|
119
|
+
* Get field value from data based on field configuration
|
|
120
|
+
*/
|
|
121
|
+
function getFieldValue(field, data) {
|
|
122
|
+
if (field.type === 'label') {
|
|
123
|
+
return field.staticText;
|
|
124
|
+
}
|
|
125
|
+
const value = data[field.fieldKey];
|
|
126
|
+
// Handle array values (like department)
|
|
127
|
+
if (Array.isArray(value)) {
|
|
128
|
+
return value[0];
|
|
129
|
+
}
|
|
130
|
+
return value;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
export { IDCardGenerator, IDCardGenerator as default };
|
|
134
|
+
//# sourceMappingURL=IDCardGenerator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IDCardGenerator.js","sources":["../../../src/components/IDCardGenerator.tsx"],"sourcesContent":["import React, { useMemo } from 'react';\r\nimport type { IDCardGeneratorProps, FieldMapping, IDCardData, IDCardTemplate } from '../types';\r\nimport { fieldStyleToCSS, positionToStyle } from '../utils/styleUtils';\r\nimport { generateQrCodeFromFields } from '../core/qrUtils';\r\n\r\n/**\r\n * IDCardGenerator - Renders a completed ID card\r\n * \r\n * Takes a template and user data, then renders the filled card.\r\n * This is the component used to display actual ID cards for individual users.\r\n * \r\n * Example:\r\n * ```tsx\r\n * <IDCardGenerator \r\n * template={myTemplate}\r\n * data={{ name: 'John Doe', photo: '...' }}\r\n * side=\"front\"\r\n * />\r\n * ```\r\n */\r\nexport const IDCardGenerator: React.FC<IDCardGeneratorProps> = ({\r\n template,\r\n data,\r\n side = 'front',\r\n scale = 1,\r\n className = '',\r\n style = {},\r\n onFieldClick,\r\n editable = false,\r\n}: IDCardGeneratorProps) => {\r\n // Get fields for the current side only\r\n const fieldsToRender = useMemo(() => {\r\n return template.fields.filter((field: FieldMapping) => field.side === side);\r\n }, [template.fields, side]);\r\n\r\n // Get background for current side\r\n const backgroundImage = side === 'front' ? template.backgrounds.front : template.backgrounds.back;\r\n\r\n // Render a single field\r\n const renderField = (field: FieldMapping) => {\r\n const posStyle = positionToStyle(field.position);\r\n const fieldStyle = fieldStyleToCSS(field.style);\r\n const combinedStyle: React.CSSProperties = {\r\n ...posStyle,\r\n ...fieldStyle,\r\n zIndex: field.zIndex || 1,\r\n boxSizing: 'border-box',\r\n overflow: 'hidden',\r\n cursor: editable ? 'pointer' : 'default',\r\n };\r\n\r\n const handleClick = (e: React.MouseEvent) => {\r\n if (onFieldClick) {\r\n e.stopPropagation();\r\n onFieldClick(field);\r\n }\r\n };\r\n\r\n const value = getFieldValue(field, data);\r\n\r\n switch (field.type) {\r\n case 'text':\r\n return (\r\n <div\r\n key={field.id}\r\n id={field.id}\r\n style={combinedStyle}\r\n onClick={handleClick}\r\n className=\"idcard-field idcard-field-text\"\r\n >\r\n {field.label && (\r\n <span className=\"idcard-field-label\" style={{ fontSize: '0.8em', display: 'block' }}>\r\n {field.label}\r\n </span>\r\n )}\r\n <span className=\"idcard-field-value\">{String(value || field.placeholder || '')}</span>\r\n </div>\r\n );\r\n\r\n case 'label':\r\n return (\r\n <div\r\n key={field.id}\r\n id={field.id}\r\n style={combinedStyle}\r\n onClick={handleClick}\r\n className=\"idcard-field idcard-field-label\"\r\n >\r\n {field.staticText || field.label || ''}\r\n </div>\r\n );\r\n\r\n case 'image':\r\n return (\r\n <div\r\n key={field.id}\r\n id={field.id}\r\n style={{\r\n ...combinedStyle,\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n }}\r\n onClick={handleClick}\r\n className=\"idcard-field idcard-field-image\"\r\n >\r\n {value ? (\r\n <img\r\n src={String(value)}\r\n alt={field.label || 'Image'}\r\n style={{\r\n width: '100%',\r\n height: '100%',\r\n objectFit: 'cover',\r\n objectPosition: 'center top',\r\n }}\r\n />\r\n ) : (\r\n <div\r\n style={{\r\n width: '100%',\r\n height: '100%',\r\n backgroundColor: '#e0e0e0',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n fontSize: '10px',\r\n color: '#666',\r\n }}\r\n >\r\n {field.label || 'Photo'}\r\n </div>\r\n )}\r\n </div>\r\n );\r\n\r\n case 'qrcode':\r\n const qrDataUrl = field.qrFields\r\n ? generateQrCodeFromFields(data, field.qrFields, Math.min(field.position.width, field.position.height) * 2)\r\n : '';\r\n\r\n return (\r\n <div\r\n key={field.id}\r\n id={field.id}\r\n style={{\r\n ...combinedStyle,\r\n backgroundColor: '#fff',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n }}\r\n onClick={handleClick}\r\n className=\"idcard-field idcard-field-qrcode\"\r\n >\r\n {qrDataUrl ? (\r\n <img\r\n src={qrDataUrl}\r\n alt=\"QR Code\"\r\n style={{ width: '100%', height: '100%', objectFit: 'contain' }}\r\n />\r\n ) : (\r\n <div\r\n style={{\r\n width: '100%',\r\n height: '100%',\r\n backgroundColor: '#f0f0f0',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n fontSize: '10px',\r\n color: '#666',\r\n }}\r\n >\r\n QR Code\r\n </div>\r\n )}\r\n </div>\r\n );\r\n\r\n default:\r\n return null;\r\n }\r\n };\r\n\r\n // Card container style\r\n const cardStyle: React.CSSProperties = {\r\n width: template.cardSize.width * scale,\r\n height: template.cardSize.height * scale,\r\n position: 'relative',\r\n overflow: 'hidden',\r\n backgroundColor: '#fff',\r\n transform: `scale(${scale})`,\r\n transformOrigin: 'top left',\r\n ...style,\r\n };\r\n\r\n return (\r\n <div\r\n id={side === 'front' ? 'idcardfront' : 'idcardback'}\r\n className={`idcard-container idcard-${side} ${className}`}\r\n style={cardStyle}\r\n >\r\n {/* Background */}\r\n {backgroundImage && (\r\n <img\r\n src={backgroundImage}\r\n alt={`${side} background`}\r\n style={{\r\n position: 'absolute',\r\n top: 0,\r\n left: 0,\r\n width: '100%',\r\n height: '100%',\r\n objectFit: 'cover',\r\n zIndex: 0,\r\n }}\r\n />\r\n )}\r\n\r\n {/* Fields */}\r\n {fieldsToRender.map(renderField)}\r\n </div>\r\n );\r\n};\r\n\r\n/**\r\n * Get field value from data based on field configuration\r\n */\r\nfunction getFieldValue(field: FieldMapping, data: IDCardData): string | number | undefined {\r\n if (field.type === 'label') {\r\n return field.staticText;\r\n }\r\n\r\n const value = data[field.fieldKey];\r\n\r\n // Handle array values (like department)\r\n if (Array.isArray(value)) {\r\n return value[0];\r\n }\r\n\r\n return value as string | number | undefined;\r\n}\r\n\r\nexport default IDCardGenerator;\r\n"],"names":["_jsxs","_jsx"],"mappings":"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"}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
|
|
2
|
+
import { useMemo } from 'react';
|
|
3
|
+
import { positionToStyle, fieldStyleToCSS } from '../utils/styleUtils.js';
|
|
4
|
+
import { generateQrCodeFromFields } from '../core/qrUtils.js';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* IDCardPreview - Interactive card preview component
|
|
8
|
+
*
|
|
9
|
+
* Renders an ID card with:
|
|
10
|
+
* - Field selection and highlighting
|
|
11
|
+
* - Resize handles for selected fields
|
|
12
|
+
* - Grid overlay for alignment
|
|
13
|
+
* - Dynamic field rendering based on type
|
|
14
|
+
*
|
|
15
|
+
* Used inside the designer for visual editing
|
|
16
|
+
*/
|
|
17
|
+
const IDCardPreview = ({ template, data, side, scale = 1, showGrid = false, onFieldSelect, selectedFieldId, editable = true, onFieldUpdate, }) => {
|
|
18
|
+
// Get only fields that belong to the current side
|
|
19
|
+
const fieldsToRender = useMemo(() => {
|
|
20
|
+
return template.fields.filter((field) => field.side === side);
|
|
21
|
+
}, [template.fields, side]);
|
|
22
|
+
// Get background for current side
|
|
23
|
+
const backgroundImage = side === 'front' ? template.backgrounds.front : template.backgrounds.back;
|
|
24
|
+
// Render resize handles for selected field
|
|
25
|
+
const renderResizeHandles = (field) => {
|
|
26
|
+
if (field.id !== selectedFieldId || !editable)
|
|
27
|
+
return null;
|
|
28
|
+
const handles = ['n', 's', 'e', 'w', 'ne', 'nw', 'se', 'sw'];
|
|
29
|
+
const handleStyle = {
|
|
30
|
+
position: 'absolute',
|
|
31
|
+
width: '8px',
|
|
32
|
+
height: '8px',
|
|
33
|
+
backgroundColor: '#2196F3',
|
|
34
|
+
border: '1px solid #fff',
|
|
35
|
+
borderRadius: '2px',
|
|
36
|
+
zIndex: 1000,
|
|
37
|
+
};
|
|
38
|
+
const positions = {
|
|
39
|
+
n: { top: '-4px', left: '50%', transform: 'translateX(-50%)', cursor: 'n-resize' },
|
|
40
|
+
s: { bottom: '-4px', left: '50%', transform: 'translateX(-50%)', cursor: 's-resize' },
|
|
41
|
+
e: { right: '-4px', top: '50%', transform: 'translateY(-50%)', cursor: 'e-resize' },
|
|
42
|
+
w: { left: '-4px', top: '50%', transform: 'translateY(-50%)', cursor: 'w-resize' },
|
|
43
|
+
ne: { top: '-4px', right: '-4px', cursor: 'ne-resize' },
|
|
44
|
+
nw: { top: '-4px', left: '-4px', cursor: 'nw-resize' },
|
|
45
|
+
se: { bottom: '-4px', right: '-4px', cursor: 'se-resize' },
|
|
46
|
+
sw: { bottom: '-4px', left: '-4px', cursor: 'sw-resize' },
|
|
47
|
+
};
|
|
48
|
+
return handles.map((handle) => (jsx("div", { className: `resize-handle resize-handle-${handle}`, style: { ...handleStyle, ...positions[handle] }, "data-handle": handle }, handle)));
|
|
49
|
+
};
|
|
50
|
+
// Render a single field
|
|
51
|
+
const renderField = (field) => {
|
|
52
|
+
const posStyle = positionToStyle(field.position);
|
|
53
|
+
const fieldStyle = fieldStyleToCSS(field.style);
|
|
54
|
+
const isSelected = field.id === selectedFieldId;
|
|
55
|
+
const combinedStyle = {
|
|
56
|
+
...posStyle,
|
|
57
|
+
...fieldStyle,
|
|
58
|
+
zIndex: field.zIndex || 1,
|
|
59
|
+
boxSizing: 'border-box',
|
|
60
|
+
overflow: 'hidden',
|
|
61
|
+
cursor: editable ? 'move' : 'default',
|
|
62
|
+
outline: isSelected ? '2px solid #2196F3' : 'none',
|
|
63
|
+
outlineOffset: '1px',
|
|
64
|
+
};
|
|
65
|
+
const handleClick = (e) => {
|
|
66
|
+
e.stopPropagation();
|
|
67
|
+
onFieldSelect?.(field);
|
|
68
|
+
};
|
|
69
|
+
const value = data[field.fieldKey];
|
|
70
|
+
const content = (() => {
|
|
71
|
+
switch (field.type) {
|
|
72
|
+
case 'text':
|
|
73
|
+
return (jsxs(Fragment, { children: [field.label && (jsx("span", { style: { fontSize: '0.75em', display: 'block', opacity: 0.7 }, children: field.label })), jsx("span", { children: String(value || field.placeholder || field.fieldKey) })] }));
|
|
74
|
+
case 'label':
|
|
75
|
+
return jsx("span", { children: field.staticText || field.label || 'Label' });
|
|
76
|
+
case 'image':
|
|
77
|
+
return value ? (jsx("img", { src: String(value), alt: field.label || 'Image', style: {
|
|
78
|
+
width: '100%',
|
|
79
|
+
height: '100%',
|
|
80
|
+
objectFit: 'cover',
|
|
81
|
+
objectPosition: 'center top',
|
|
82
|
+
} })) : (jsxs("div", { style: {
|
|
83
|
+
width: '100%',
|
|
84
|
+
height: '100%',
|
|
85
|
+
backgroundColor: '#e0e0e0',
|
|
86
|
+
display: 'flex',
|
|
87
|
+
alignItems: 'center',
|
|
88
|
+
justifyContent: 'center',
|
|
89
|
+
fontSize: '10px',
|
|
90
|
+
color: '#666',
|
|
91
|
+
flexDirection: 'column',
|
|
92
|
+
}, children: [jsx("span", { children: "\uD83D\uDCF7" }), jsx("span", { children: field.label || 'Photo' })] }));
|
|
93
|
+
case 'qrcode':
|
|
94
|
+
const qrDataUrl = field.qrFields
|
|
95
|
+
? generateQrCodeFromFields(data, field.qrFields, 200)
|
|
96
|
+
: '';
|
|
97
|
+
return qrDataUrl ? (jsx("img", { src: qrDataUrl, alt: "QR Code", style: { width: '100%', height: '100%', objectFit: 'contain' } })) : (jsx("div", { style: {
|
|
98
|
+
width: '100%',
|
|
99
|
+
height: '100%',
|
|
100
|
+
backgroundColor: '#f0f0f0',
|
|
101
|
+
display: 'flex',
|
|
102
|
+
alignItems: 'center',
|
|
103
|
+
justifyContent: 'center',
|
|
104
|
+
fontSize: '10px',
|
|
105
|
+
color: '#666',
|
|
106
|
+
border: '1px dashed #ccc',
|
|
107
|
+
}, children: "QR Code" }));
|
|
108
|
+
default:
|
|
109
|
+
return null;
|
|
110
|
+
}
|
|
111
|
+
})();
|
|
112
|
+
return (jsxs("div", { id: `preview-${field.id}`, style: combinedStyle, onClick: handleClick, className: `preview-field preview-field-${field.type} ${isSelected ? 'selected' : ''}`, children: [content, renderResizeHandles(field)] }, field.id));
|
|
113
|
+
};
|
|
114
|
+
// Card container style
|
|
115
|
+
const cardStyle = {
|
|
116
|
+
width: template.cardSize.width,
|
|
117
|
+
height: template.cardSize.height,
|
|
118
|
+
position: 'relative',
|
|
119
|
+
overflow: 'hidden',
|
|
120
|
+
backgroundColor: backgroundImage ? 'transparent' : '#f5f5f5',
|
|
121
|
+
border: '1px solid #ddd',
|
|
122
|
+
transform: `scale(${scale})`,
|
|
123
|
+
transformOrigin: 'top left',
|
|
124
|
+
};
|
|
125
|
+
// Grid overlay style
|
|
126
|
+
const gridStyle = {
|
|
127
|
+
position: 'absolute',
|
|
128
|
+
top: 0,
|
|
129
|
+
left: 0,
|
|
130
|
+
width: '100%',
|
|
131
|
+
height: '100%',
|
|
132
|
+
backgroundImage: showGrid
|
|
133
|
+
? 'linear-gradient(to right, rgba(0,0,0,0.05) 1px, transparent 1px), linear-gradient(to bottom, rgba(0,0,0,0.05) 1px, transparent 1px)'
|
|
134
|
+
: 'none',
|
|
135
|
+
backgroundSize: '10px 10px',
|
|
136
|
+
pointerEvents: 'none',
|
|
137
|
+
zIndex: 999,
|
|
138
|
+
};
|
|
139
|
+
const handleContainerClick = () => {
|
|
140
|
+
onFieldSelect?.(null);
|
|
141
|
+
};
|
|
142
|
+
return (jsxs("div", { className: "idcard-preview-container", style: cardStyle, onClick: handleContainerClick, children: [backgroundImage && (jsx("img", { src: backgroundImage, alt: `${side} background`, style: {
|
|
143
|
+
position: 'absolute',
|
|
144
|
+
top: 0,
|
|
145
|
+
left: 0,
|
|
146
|
+
width: '100%',
|
|
147
|
+
height: '100%',
|
|
148
|
+
objectFit: 'cover',
|
|
149
|
+
zIndex: 0,
|
|
150
|
+
pointerEvents: 'none',
|
|
151
|
+
} })), fieldsToRender.map(renderField), showGrid && jsx("div", { style: gridStyle }), !backgroundImage && fieldsToRender.length === 0 && (jsxs("div", { style: {
|
|
152
|
+
position: 'absolute',
|
|
153
|
+
top: '50%',
|
|
154
|
+
left: '50%',
|
|
155
|
+
transform: 'translate(-50%, -50%)',
|
|
156
|
+
textAlign: 'center',
|
|
157
|
+
color: '#999',
|
|
158
|
+
fontSize: '14px',
|
|
159
|
+
}, children: [jsx("p", { children: "Upload a background image" }), jsx("p", { children: "and add fields to get started" })] }))] }));
|
|
160
|
+
};
|
|
161
|
+
|
|
162
|
+
export { IDCardPreview, IDCardPreview as default };
|
|
163
|
+
//# sourceMappingURL=IDCardPreview.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IDCardPreview.js","sources":["../../../src/components/IDCardPreview.tsx"],"sourcesContent":["import React, { useMemo } from 'react';\r\nimport type { IDCardPreviewProps, FieldMapping } from '../types';\r\nimport { fieldStyleToCSS, positionToStyle } from '../utils/styleUtils';\r\nimport { generateQrCodeFromFields } from '../core/qrUtils';\r\n\r\n/**\r\n * IDCardPreview - Interactive card preview component\r\n * \r\n * Renders an ID card with:\r\n * - Field selection and highlighting\r\n * - Resize handles for selected fields\r\n * - Grid overlay for alignment\r\n * - Dynamic field rendering based on type\r\n * \r\n * Used inside the designer for visual editing\r\n */\r\nexport const IDCardPreview: React.FC<IDCardPreviewProps> = ({\r\n template,\r\n data,\r\n side,\r\n scale = 1,\r\n showGrid = false,\r\n onFieldSelect,\r\n selectedFieldId,\r\n editable = true,\r\n onFieldUpdate,\r\n}: IDCardPreviewProps) => {\r\n // Get only fields that belong to the current side\r\n const fieldsToRender = useMemo(() => {\r\n return template.fields.filter((field: FieldMapping) => field.side === side);\r\n }, [template.fields, side]);\r\n\r\n // Get background for current side\r\n const backgroundImage = side === 'front' ? template.backgrounds.front : template.backgrounds.back;\r\n\r\n // Render resize handles for selected field\r\n const renderResizeHandles = (field: FieldMapping) => {\r\n if (field.id !== selectedFieldId || !editable) return null;\r\n\r\n const handles = ['n', 's', 'e', 'w', 'ne', 'nw', 'se', 'sw'];\r\n const handleStyle: React.CSSProperties = {\r\n position: 'absolute',\r\n width: '8px',\r\n height: '8px',\r\n backgroundColor: '#2196F3',\r\n border: '1px solid #fff',\r\n borderRadius: '2px',\r\n zIndex: 1000,\r\n };\r\n\r\n const positions: Record<string, React.CSSProperties> = {\r\n n: { top: '-4px', left: '50%', transform: 'translateX(-50%)', cursor: 'n-resize' },\r\n s: { bottom: '-4px', left: '50%', transform: 'translateX(-50%)', cursor: 's-resize' },\r\n e: { right: '-4px', top: '50%', transform: 'translateY(-50%)', cursor: 'e-resize' },\r\n w: { left: '-4px', top: '50%', transform: 'translateY(-50%)', cursor: 'w-resize' },\r\n ne: { top: '-4px', right: '-4px', cursor: 'ne-resize' },\r\n nw: { top: '-4px', left: '-4px', cursor: 'nw-resize' },\r\n se: { bottom: '-4px', right: '-4px', cursor: 'se-resize' },\r\n sw: { bottom: '-4px', left: '-4px', cursor: 'sw-resize' },\r\n };\r\n\r\n return handles.map((handle) => (\r\n <div\r\n key={handle}\r\n className={`resize-handle resize-handle-${handle}`}\r\n style={{ ...handleStyle, ...positions[handle] }}\r\n data-handle={handle}\r\n />\r\n ));\r\n };\r\n\r\n // Render a single field\r\n const renderField = (field: FieldMapping) => {\r\n const posStyle = positionToStyle(field.position);\r\n const fieldStyle = fieldStyleToCSS(field.style);\r\n const isSelected = field.id === selectedFieldId;\r\n\r\n const combinedStyle: React.CSSProperties = {\r\n ...posStyle,\r\n ...fieldStyle,\r\n zIndex: field.zIndex || 1,\r\n boxSizing: 'border-box',\r\n overflow: 'hidden',\r\n cursor: editable ? 'move' : 'default',\r\n outline: isSelected ? '2px solid #2196F3' : 'none',\r\n outlineOffset: '1px',\r\n };\r\n\r\n const handleClick = (e: React.MouseEvent) => {\r\n e.stopPropagation();\r\n onFieldSelect?.(field);\r\n };\r\n\r\n const value = data[field.fieldKey];\r\n\r\n const content = (() => {\r\n switch (field.type) {\r\n case 'text':\r\n return (\r\n <>\r\n {field.label && (\r\n <span style={{ fontSize: '0.75em', display: 'block', opacity: 0.7 }}>\r\n {field.label}\r\n </span>\r\n )}\r\n <span>{String(value || field.placeholder || field.fieldKey)}</span>\r\n </>\r\n );\r\n\r\n case 'label':\r\n return <span>{field.staticText || field.label || 'Label'}</span>;\r\n\r\n case 'image':\r\n return value ? (\r\n <img\r\n src={String(value)}\r\n alt={field.label || 'Image'}\r\n style={{\r\n width: '100%',\r\n height: '100%',\r\n objectFit: 'cover',\r\n objectPosition: 'center top',\r\n }}\r\n />\r\n ) : (\r\n <div\r\n style={{\r\n width: '100%',\r\n height: '100%',\r\n backgroundColor: '#e0e0e0',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n fontSize: '10px',\r\n color: '#666',\r\n flexDirection: 'column',\r\n }}\r\n >\r\n <span>📷</span>\r\n <span>{field.label || 'Photo'}</span>\r\n </div>\r\n );\r\n\r\n case 'qrcode':\r\n const qrDataUrl = field.qrFields\r\n ? generateQrCodeFromFields(data, field.qrFields, 200)\r\n : '';\r\n\r\n return qrDataUrl ? (\r\n <img\r\n src={qrDataUrl}\r\n alt=\"QR Code\"\r\n style={{ width: '100%', height: '100%', objectFit: 'contain' }}\r\n />\r\n ) : (\r\n <div\r\n style={{\r\n width: '100%',\r\n height: '100%',\r\n backgroundColor: '#f0f0f0',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n fontSize: '10px',\r\n color: '#666',\r\n border: '1px dashed #ccc',\r\n }}\r\n >\r\n QR Code\r\n </div>\r\n );\r\n\r\n default:\r\n return null;\r\n }\r\n })();\r\n\r\n return (\r\n <div\r\n key={field.id}\r\n id={`preview-${field.id}`}\r\n style={combinedStyle}\r\n onClick={handleClick}\r\n className={`preview-field preview-field-${field.type} ${isSelected ? 'selected' : ''}`}\r\n >\r\n {content}\r\n {renderResizeHandles(field)}\r\n </div>\r\n );\r\n };\r\n\r\n // Card container style\r\n const cardStyle: React.CSSProperties = {\r\n width: template.cardSize.width,\r\n height: template.cardSize.height,\r\n position: 'relative',\r\n overflow: 'hidden',\r\n backgroundColor: backgroundImage ? 'transparent' : '#f5f5f5',\r\n border: '1px solid #ddd',\r\n transform: `scale(${scale})`,\r\n transformOrigin: 'top left',\r\n };\r\n\r\n // Grid overlay style\r\n const gridStyle: React.CSSProperties = {\r\n position: 'absolute',\r\n top: 0,\r\n left: 0,\r\n width: '100%',\r\n height: '100%',\r\n backgroundImage: showGrid\r\n ? 'linear-gradient(to right, rgba(0,0,0,0.05) 1px, transparent 1px), linear-gradient(to bottom, rgba(0,0,0,0.05) 1px, transparent 1px)'\r\n : 'none',\r\n backgroundSize: '10px 10px',\r\n pointerEvents: 'none',\r\n zIndex: 999,\r\n };\r\n\r\n const handleContainerClick = () => {\r\n onFieldSelect?.(null);\r\n };\r\n\r\n return (\r\n <div\r\n className=\"idcard-preview-container\"\r\n style={cardStyle}\r\n onClick={handleContainerClick}\r\n >\r\n {/* Background */}\r\n {backgroundImage && (\r\n <img\r\n src={backgroundImage}\r\n alt={`${side} background`}\r\n style={{\r\n position: 'absolute',\r\n top: 0,\r\n left: 0,\r\n width: '100%',\r\n height: '100%',\r\n objectFit: 'cover',\r\n zIndex: 0,\r\n pointerEvents: 'none',\r\n }}\r\n />\r\n )}\r\n\r\n {/* Fields */}\r\n {fieldsToRender.map(renderField)}\r\n\r\n {/* Grid overlay */}\r\n {showGrid && <div style={gridStyle} />}\r\n\r\n {/* Empty state */}\r\n {!backgroundImage && fieldsToRender.length === 0 && (\r\n <div\r\n style={{\r\n position: 'absolute',\r\n top: '50%',\r\n left: '50%',\r\n transform: 'translate(-50%, -50%)',\r\n textAlign: 'center',\r\n color: '#999',\r\n fontSize: '14px',\r\n }}\r\n >\r\n <p>Upload a background image</p>\r\n <p>and add fields to get started</p>\r\n </div>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nexport default IDCardPreview;\r\n"],"names":["_jsx","_jsxs"],"mappings":"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"}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
import html2canvas from '../node_modules/html2canvas/dist/html2canvas.esm.js';
|
|
2
|
+
import E from '../node_modules/jspdf/dist/jspdf.es.min.js';
|
|
3
|
+
import { setQrCodeOnElement } from './qrUtils.js';
|
|
4
|
+
|
|
5
|
+
// High-quality canvas rendering defaults
|
|
6
|
+
const defaultCanvasOptions = {
|
|
7
|
+
scale: 10, // 10x resolution for crisp output
|
|
8
|
+
dpi: 1200,
|
|
9
|
+
imageTimeout: 15000,
|
|
10
|
+
letterRendering: true,
|
|
11
|
+
logging: false,
|
|
12
|
+
useCORS: true, // Allow cross-origin images
|
|
13
|
+
backgroundColor: null,
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Capture a DOM element as a high-resolution canvas
|
|
17
|
+
* Uses html2canvas to convert the element to an image
|
|
18
|
+
* @returns Canvas and the original element, or null if not found
|
|
19
|
+
*/
|
|
20
|
+
async function captureElement(elementId, scale = 10) {
|
|
21
|
+
const element = document.getElementById(elementId);
|
|
22
|
+
if (!element)
|
|
23
|
+
return null;
|
|
24
|
+
const canvas = await html2canvas(element, {
|
|
25
|
+
...defaultCanvasOptions,
|
|
26
|
+
scale,
|
|
27
|
+
});
|
|
28
|
+
return { canvas, element };
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Download ID card(s) as a PDF file
|
|
32
|
+
* Captures DOM elements and converts them to a multi-page PDF
|
|
33
|
+
* @param options - Configuration for PDF export
|
|
34
|
+
* @returns Export result with success status and any errors
|
|
35
|
+
*/
|
|
36
|
+
async function downloadIDCardAsPDF(options) {
|
|
37
|
+
try {
|
|
38
|
+
const { frontElementId = 'idcardfront', backElementId, filename = 'ID_Card', data, qrElementId, qrFields, scale = 10, } = options;
|
|
39
|
+
// Generate QR code if configured
|
|
40
|
+
if (qrElementId && data && qrFields && qrFields.length > 0) {
|
|
41
|
+
const qrData = {};
|
|
42
|
+
for (const field of qrFields) {
|
|
43
|
+
if (data[field] !== undefined) {
|
|
44
|
+
qrData[field] = data[field];
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
setQrCodeOnElement(qrElementId, qrData, 200);
|
|
48
|
+
}
|
|
49
|
+
// Wait for QR code and any images to fully render
|
|
50
|
+
await new Promise((resolve) => setTimeout(resolve, 100));
|
|
51
|
+
const pages = [];
|
|
52
|
+
// Capture front
|
|
53
|
+
const frontCapture = await captureElement(frontElementId, scale);
|
|
54
|
+
if (frontCapture)
|
|
55
|
+
pages.push(frontCapture);
|
|
56
|
+
// Capture back if exists
|
|
57
|
+
if (backElementId) {
|
|
58
|
+
const backCapture = await captureElement(backElementId, scale);
|
|
59
|
+
if (backCapture)
|
|
60
|
+
pages.push(backCapture);
|
|
61
|
+
}
|
|
62
|
+
if (pages.length === 0) {
|
|
63
|
+
return { success: false, error: 'No elements found to capture' };
|
|
64
|
+
}
|
|
65
|
+
let pdf;
|
|
66
|
+
for (let i = 0; i < pages.length; i++) {
|
|
67
|
+
const { canvas, element } = pages[i];
|
|
68
|
+
const imgData = canvas.toDataURL('image/jpeg', 1.0);
|
|
69
|
+
// Calculate PDF dimensions
|
|
70
|
+
const pdfWidth = parseInt(element.style.width) * 0.264583 || 85;
|
|
71
|
+
const aspectRatio = canvas.height / canvas.width;
|
|
72
|
+
const pdfHeight = pdfWidth * aspectRatio;
|
|
73
|
+
const orientation = pdfWidth >= pdfHeight ? 'landscape' : 'portrait';
|
|
74
|
+
if (i === 0) {
|
|
75
|
+
pdf = new E({
|
|
76
|
+
unit: 'mm',
|
|
77
|
+
format: [pdfWidth, pdfHeight],
|
|
78
|
+
orientation,
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
pdf.addPage([pdfWidth, pdfHeight], orientation);
|
|
83
|
+
}
|
|
84
|
+
pdf.addImage(imgData, 'JPEG', 0, 0, pdfWidth, pdfHeight);
|
|
85
|
+
}
|
|
86
|
+
if (pdf) {
|
|
87
|
+
const blob = pdf.output('blob');
|
|
88
|
+
pdf.save(`${filename}.pdf`);
|
|
89
|
+
return { success: true, blob };
|
|
90
|
+
}
|
|
91
|
+
return { success: false, error: 'Failed to generate PDF' };
|
|
92
|
+
}
|
|
93
|
+
catch (error) {
|
|
94
|
+
return {
|
|
95
|
+
success: false,
|
|
96
|
+
error: error instanceof Error ? error.message : 'Unknown error',
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Download ID card as image (PNG or JPEG)
|
|
102
|
+
*/
|
|
103
|
+
async function downloadIDCardAsImage(options) {
|
|
104
|
+
try {
|
|
105
|
+
const { frontElementId = 'idcardfront', filename = 'ID_Card', data, qrElementId, qrFields, format = 'png', scale = 10, quality = 1.0, } = options;
|
|
106
|
+
// Generate QR code if needed
|
|
107
|
+
if (qrElementId && data && qrFields && qrFields.length > 0) {
|
|
108
|
+
const qrData = {};
|
|
109
|
+
for (const field of qrFields) {
|
|
110
|
+
if (data[field] !== undefined) {
|
|
111
|
+
qrData[field] = data[field];
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
setQrCodeOnElement(qrElementId, qrData, 200);
|
|
115
|
+
}
|
|
116
|
+
await new Promise((resolve) => setTimeout(resolve, 100));
|
|
117
|
+
const capture = await captureElement(frontElementId, scale);
|
|
118
|
+
if (!capture) {
|
|
119
|
+
return { success: false, error: 'Element not found' };
|
|
120
|
+
}
|
|
121
|
+
const mimeType = format === 'jpeg' ? 'image/jpeg' : 'image/png';
|
|
122
|
+
const dataUrl = capture.canvas.toDataURL(mimeType, quality);
|
|
123
|
+
// Trigger download
|
|
124
|
+
const link = document.createElement('a');
|
|
125
|
+
link.download = `${filename}.${format}`;
|
|
126
|
+
link.href = dataUrl;
|
|
127
|
+
link.click();
|
|
128
|
+
return { success: true, dataUrl };
|
|
129
|
+
}
|
|
130
|
+
catch (error) {
|
|
131
|
+
return {
|
|
132
|
+
success: false,
|
|
133
|
+
error: error instanceof Error ? error.message : 'Unknown error',
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Export ID card with unified options
|
|
139
|
+
*/
|
|
140
|
+
async function exportIDCard(options) {
|
|
141
|
+
const { format, ...rest } = options;
|
|
142
|
+
if (format === 'pdf') {
|
|
143
|
+
return downloadIDCardAsPDF(rest);
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
return downloadIDCardAsImage({ ...rest, format });
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
export { downloadIDCardAsImage, downloadIDCardAsPDF, exportIDCard };
|
|
151
|
+
//# sourceMappingURL=exportUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"exportUtils.js","sources":["../../../src/core/exportUtils.ts"],"sourcesContent":["import html2canvas from 'html2canvas';\r\nimport jsPDF from 'jspdf';\r\nimport type { ExportOptions, ExportResult, IDCardData } from '../types';\r\nimport { setQrCodeOnElement } from './qrUtils';\r\n\r\ninterface DownloadIDCardOptions {\r\n frontElementId?: string;\r\n backElementId?: string;\r\n filename?: string;\r\n data?: IDCardData;\r\n qrElementId?: string;\r\n qrFields?: string[];\r\n format?: 'pdf' | 'png' | 'jpeg';\r\n scale?: number; // Canvas scale for quality (higher = better, but slower)\r\n quality?: number; // JPEG quality (0-1)\r\n}\r\n\r\n// High-quality canvas rendering defaults\r\nconst defaultCanvasOptions = {\r\n scale: 10, // 10x resolution for crisp output\r\n dpi: 1200,\r\n imageTimeout: 15000,\r\n letterRendering: true,\r\n logging: false,\r\n useCORS: true, // Allow cross-origin images\r\n backgroundColor: null,\r\n};\r\n\r\n/**\r\n * Capture a DOM element as a high-resolution canvas\r\n * Uses html2canvas to convert the element to an image\r\n * @returns Canvas and the original element, or null if not found\r\n */\r\nasync function captureElement(\r\n elementId: string,\r\n scale = 10\r\n): Promise<{ canvas: HTMLCanvasElement; element: HTMLElement } | null> {\r\n const element = document.getElementById(elementId);\r\n if (!element) return null;\r\n\r\n const canvas = await html2canvas(element, {\r\n ...defaultCanvasOptions,\r\n scale,\r\n });\r\n\r\n return { canvas, element };\r\n}\r\n\r\n/**\r\n * Download ID card(s) as a PDF file\r\n * Captures DOM elements and converts them to a multi-page PDF\r\n * @param options - Configuration for PDF export\r\n * @returns Export result with success status and any errors\r\n */\r\nexport async function downloadIDCardAsPDF(\r\n options: DownloadIDCardOptions\r\n): Promise<ExportResult> {\r\n try {\r\n const {\r\n frontElementId = 'idcardfront',\r\n backElementId,\r\n filename = 'ID_Card',\r\n data,\r\n qrElementId,\r\n qrFields,\r\n scale = 10,\r\n } = options;\r\n\r\n // Generate QR code if configured\r\n if (qrElementId && data && qrFields && qrFields.length > 0) {\r\n const qrData: Record<string, unknown> = {};\r\n for (const field of qrFields) {\r\n if (data[field] !== undefined) {\r\n qrData[field] = data[field];\r\n }\r\n }\r\n setQrCodeOnElement(qrElementId, qrData, 200);\r\n }\r\n\r\n // Wait for QR code and any images to fully render\r\n await new Promise((resolve) => setTimeout(resolve, 100));\r\n\r\n const pages: { canvas: HTMLCanvasElement; element: HTMLElement }[] = [];\r\n\r\n // Capture front\r\n const frontCapture = await captureElement(frontElementId, scale);\r\n if (frontCapture) pages.push(frontCapture);\r\n\r\n // Capture back if exists\r\n if (backElementId) {\r\n const backCapture = await captureElement(backElementId, scale);\r\n if (backCapture) pages.push(backCapture);\r\n }\r\n\r\n if (pages.length === 0) {\r\n return { success: false, error: 'No elements found to capture' };\r\n }\r\n\r\n let pdf: jsPDF | undefined;\r\n\r\n for (let i = 0; i < pages.length; i++) {\r\n const { canvas, element } = pages[i];\r\n const imgData = canvas.toDataURL('image/jpeg', 1.0);\r\n\r\n // Calculate PDF dimensions\r\n const pdfWidth = parseInt(element.style.width) * 0.264583 || 85;\r\n const aspectRatio = canvas.height / canvas.width;\r\n const pdfHeight = pdfWidth * aspectRatio;\r\n\r\n const orientation = pdfWidth >= pdfHeight ? 'landscape' : 'portrait';\r\n\r\n if (i === 0) {\r\n pdf = new jsPDF({\r\n unit: 'mm',\r\n format: [pdfWidth, pdfHeight],\r\n orientation,\r\n });\r\n } else {\r\n pdf!.addPage([pdfWidth, pdfHeight], orientation);\r\n }\r\n\r\n pdf!.addImage(imgData, 'JPEG', 0, 0, pdfWidth, pdfHeight);\r\n }\r\n\r\n if (pdf) {\r\n const blob = pdf.output('blob');\r\n pdf.save(`${filename}.pdf`);\r\n return { success: true, blob };\r\n }\r\n\r\n return { success: false, error: 'Failed to generate PDF' };\r\n } catch (error) {\r\n return {\r\n success: false,\r\n error: error instanceof Error ? error.message : 'Unknown error',\r\n };\r\n }\r\n}\r\n\r\n/**\r\n * Download ID card as image (PNG or JPEG)\r\n */\r\nexport async function downloadIDCardAsImage(\r\n options: DownloadIDCardOptions\r\n): Promise<ExportResult> {\r\n try {\r\n const {\r\n frontElementId = 'idcardfront',\r\n filename = 'ID_Card',\r\n data,\r\n qrElementId,\r\n qrFields,\r\n format = 'png',\r\n scale = 10,\r\n quality = 1.0,\r\n } = options;\r\n\r\n // Generate QR code if needed\r\n if (qrElementId && data && qrFields && qrFields.length > 0) {\r\n const qrData: Record<string, unknown> = {};\r\n for (const field of qrFields) {\r\n if (data[field] !== undefined) {\r\n qrData[field] = data[field];\r\n }\r\n }\r\n setQrCodeOnElement(qrElementId, qrData, 200);\r\n }\r\n\r\n await new Promise((resolve) => setTimeout(resolve, 100));\r\n\r\n const capture = await captureElement(frontElementId, scale);\r\n if (!capture) {\r\n return { success: false, error: 'Element not found' };\r\n }\r\n\r\n const mimeType = format === 'jpeg' ? 'image/jpeg' : 'image/png';\r\n const dataUrl = capture.canvas.toDataURL(mimeType, quality);\r\n\r\n // Trigger download\r\n const link = document.createElement('a');\r\n link.download = `${filename}.${format}`;\r\n link.href = dataUrl;\r\n link.click();\r\n\r\n return { success: true, dataUrl };\r\n } catch (error) {\r\n return {\r\n success: false,\r\n error: error instanceof Error ? error.message : 'Unknown error',\r\n };\r\n }\r\n}\r\n\r\n/**\r\n * Export ID card with unified options\r\n */\r\nexport async function exportIDCard(\r\n options: ExportOptions & {\r\n frontElementId?: string;\r\n backElementId?: string;\r\n data?: IDCardData;\r\n qrElementId?: string;\r\n qrFields?: string[];\r\n }\r\n): Promise<ExportResult> {\r\n const { format, ...rest } = options;\r\n\r\n if (format === 'pdf') {\r\n return downloadIDCardAsPDF(rest);\r\n } else {\r\n return downloadIDCardAsImage({ ...rest, format });\r\n }\r\n}\r\n"],"names":["jsPDF"],"mappings":"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"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import QRious from '../node_modules/qrious/dist/qrious.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Generate a QR code as a base64 data URL
|
|
5
|
+
* @param data - Data to encode in the QR code (will be JSON stringified)
|
|
6
|
+
* @param size - QR code size in pixels
|
|
7
|
+
* @param options - Customization options (error correction level, colors, etc.)
|
|
8
|
+
* @returns Base64 PNG data URL
|
|
9
|
+
*/
|
|
10
|
+
function generateQrCodeDataURL(data, size = 200, options) {
|
|
11
|
+
const qr = new QRious({
|
|
12
|
+
value: JSON.stringify(data),
|
|
13
|
+
size,
|
|
14
|
+
level: options?.level || 'H', // High error correction by default
|
|
15
|
+
padding: options?.padding ?? 0,
|
|
16
|
+
background: options?.background || 'white',
|
|
17
|
+
backgroundAlpha: 1,
|
|
18
|
+
foreground: options?.foreground || 'black',
|
|
19
|
+
foregroundAlpha: 1,
|
|
20
|
+
});
|
|
21
|
+
return qr.toDataURL('image/png');
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Generate QR code from specific fields in the card data
|
|
25
|
+
* Only includes fields that exist in the data object
|
|
26
|
+
* @param data - Full card data object
|
|
27
|
+
* @param fields - Array of field keys to include in QR code
|
|
28
|
+
* @param size - QR code size in pixels
|
|
29
|
+
* @returns Base64 PNG data URL
|
|
30
|
+
*/
|
|
31
|
+
function generateQrCodeFromFields(data, fields, size = 200) {
|
|
32
|
+
// Build object with only the specified fields
|
|
33
|
+
const qrData = {};
|
|
34
|
+
for (const field of fields) {
|
|
35
|
+
if (data[field] !== undefined) {
|
|
36
|
+
qrData[field] = data[field];
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return generateQrCodeDataURL(qrData, size);
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Set QR code image src on a DOM element
|
|
43
|
+
*/
|
|
44
|
+
function setQrCodeOnElement(elementId, data, size = 200, container = document) {
|
|
45
|
+
const qrDataURL = generateQrCodeDataURL(data, size);
|
|
46
|
+
const imgTag = (container === document
|
|
47
|
+
? document.getElementById(elementId)
|
|
48
|
+
: container.querySelector(`#${elementId}`));
|
|
49
|
+
if (imgTag) {
|
|
50
|
+
imgTag.setAttribute('src', qrDataURL);
|
|
51
|
+
imgTag.style.display = 'block';
|
|
52
|
+
imgTag.style.opacity = '1';
|
|
53
|
+
imgTag.style.visibility = 'visible';
|
|
54
|
+
return true;
|
|
55
|
+
}
|
|
56
|
+
return false;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
export { generateQrCodeDataURL, generateQrCodeFromFields, setQrCodeOnElement };
|
|
60
|
+
//# sourceMappingURL=qrUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"qrUtils.js","sources":["../../../src/core/qrUtils.ts"],"sourcesContent":["import QRious from 'qrious';\r\nimport type { IDCardData } from '../types';\r\n\r\n/**\r\n * Generate a QR code as a base64 data URL\r\n * @param data - Data to encode in the QR code (will be JSON stringified)\r\n * @param size - QR code size in pixels\r\n * @param options - Customization options (error correction level, colors, etc.)\r\n * @returns Base64 PNG data URL\r\n */\r\nexport function generateQrCodeDataURL(\r\n data: Record<string, unknown>,\r\n size = 200,\r\n options?: {\r\n level?: 'L' | 'M' | 'Q' | 'H'; // Error correction level\r\n padding?: number;\r\n background?: string;\r\n foreground?: string;\r\n }\r\n): string {\r\n const qr = new (QRious as any)({\r\n value: JSON.stringify(data),\r\n size,\r\n level: options?.level || 'H', // High error correction by default\r\n padding: options?.padding ?? 0,\r\n background: options?.background || 'white',\r\n backgroundAlpha: 1,\r\n foreground: options?.foreground || 'black',\r\n foregroundAlpha: 1,\r\n });\r\n return qr.toDataURL('image/png');\r\n}\r\n\r\n/**\r\n * Generate QR code from specific fields in the card data\r\n * Only includes fields that exist in the data object\r\n * @param data - Full card data object\r\n * @param fields - Array of field keys to include in QR code\r\n * @param size - QR code size in pixels\r\n * @returns Base64 PNG data URL\r\n */\r\nexport function generateQrCodeFromFields(\r\n data: IDCardData,\r\n fields: string[],\r\n size = 200\r\n): string {\r\n // Build object with only the specified fields\r\n const qrData: Record<string, unknown> = {};\r\n for (const field of fields) {\r\n if (data[field] !== undefined) {\r\n qrData[field] = data[field];\r\n }\r\n }\r\n return generateQrCodeDataURL(qrData, size);\r\n}\r\n\r\n/**\r\n * Set QR code image src on a DOM element\r\n */\r\nexport function setQrCodeOnElement(\r\n elementId: string,\r\n data: Record<string, unknown>,\r\n size = 200,\r\n container: Document | HTMLElement = document\r\n): boolean {\r\n const qrDataURL = generateQrCodeDataURL(data, size);\r\n const imgTag = (\r\n container === document\r\n ? document.getElementById(elementId)\r\n : (container as HTMLElement).querySelector(`#${elementId}`)\r\n ) as HTMLImageElement | null;\r\n\r\n if (imgTag) {\r\n imgTag.setAttribute('src', qrDataURL);\r\n imgTag.style.display = 'block';\r\n imgTag.style.opacity = '1';\r\n imgTag.style.visibility = 'visible';\r\n return true;\r\n }\r\n return false;\r\n}\r\n"],"names":[],"mappings":";;AAGA;;;;;;AAMG;AACG,SAAU,qBAAqB,CACnC,IAA6B,EAC7B,IAAI,GAAG,GAAG,EACV,OAKC,EAAA;AAED,IAAA,MAAM,EAAE,GAAG,IAAK,MAAc,CAAC;AAC7B,QAAA,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;QAC3B,IAAI;AACJ,QAAA,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI,GAAG;AAC5B,QAAA,OAAO,EAAE,OAAO,EAAE,OAAO,IAAI,CAAC;AAC9B,QAAA,UAAU,EAAE,OAAO,EAAE,UAAU,IAAI,OAAO;AAC1C,QAAA,eAAe,EAAE,CAAC;AAClB,QAAA,UAAU,EAAE,OAAO,EAAE,UAAU,IAAI,OAAO;AAC1C,QAAA,eAAe,EAAE,CAAC;AACnB,KAAA,CAAC;AACF,IAAA,OAAO,EAAE,CAAC,SAAS,CAAC,WAAW,CAAC;AAClC;AAEA;;;;;;;AAOG;AACG,SAAU,wBAAwB,CACtC,IAAgB,EAChB,MAAgB,EAChB,IAAI,GAAG,GAAG,EAAA;;IAGV,MAAM,MAAM,GAA4B,EAAE;AAC1C,IAAA,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;AAC1B,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,SAAS,EAAE;YAC7B,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;QAC7B;IACF;AACA,IAAA,OAAO,qBAAqB,CAAC,MAAM,EAAE,IAAI,CAAC;AAC5C;AAEA;;AAEG;AACG,SAAU,kBAAkB,CAChC,SAAiB,EACjB,IAA6B,EAC7B,IAAI,GAAG,GAAG,EACV,SAAA,GAAoC,QAAQ,EAAA;IAE5C,MAAM,SAAS,GAAG,qBAAqB,CAAC,IAAI,EAAE,IAAI,CAAC;AACnD,IAAA,MAAM,MAAM,IACV,SAAS,KAAK;AACZ,UAAE,QAAQ,CAAC,cAAc,CAAC,SAAS;UAChC,SAAyB,CAAC,aAAa,CAAC,IAAI,SAAS,CAAA,CAAE,CAAC,CACnC;IAE5B,IAAI,MAAM,EAAE;AACV,QAAA,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE,SAAS,CAAC;AACrC,QAAA,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO;AAC9B,QAAA,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG;AAC1B,QAAA,MAAM,CAAC,KAAK,CAAC,UAAU,GAAG,SAAS;AACnC,QAAA,OAAO,IAAI;IACb;AACA,IAAA,OAAO,KAAK;AACd;;;;"}
|