react-id-card-generator 1.0.17 → 1.0.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (774) hide show
  1. package/dist/cjs/components/IDCardDesigner.js +7 -1
  2. package/dist/cjs/components/IDCardDesigner.js.map +1 -1
  3. package/dist/cjs/components/IDCardGenerator.js +4 -6
  4. package/dist/cjs/components/IDCardGenerator.js.map +1 -1
  5. package/dist/cjs/components/IDCardPreview.js +10 -7
  6. package/dist/cjs/components/IDCardPreview.js.map +1 -1
  7. package/dist/cjs/core/exportUtils.js +17 -20
  8. package/dist/cjs/core/exportUtils.js.map +1 -1
  9. package/dist/cjs/core/qrUtils.js +70 -12
  10. package/dist/cjs/core/qrUtils.js.map +1 -1
  11. package/dist/cjs/utils/styleUtils.js +1 -1
  12. package/dist/cjs/utils/styleUtils.js.map +1 -1
  13. package/dist/esm/components/IDCardDesigner.js +7 -1
  14. package/dist/esm/components/IDCardDesigner.js.map +1 -1
  15. package/dist/esm/components/IDCardGenerator.js +5 -7
  16. package/dist/esm/components/IDCardGenerator.js.map +1 -1
  17. package/dist/esm/components/IDCardPreview.js +11 -8
  18. package/dist/esm/components/IDCardPreview.js.map +1 -1
  19. package/dist/esm/core/exportUtils.js +18 -21
  20. package/dist/esm/core/exportUtils.js.map +1 -1
  21. package/dist/esm/core/qrUtils.js +69 -13
  22. package/dist/esm/core/qrUtils.js.map +1 -1
  23. package/dist/esm/utils/styleUtils.js +1 -1
  24. package/dist/esm/utils/styleUtils.js.map +1 -1
  25. package/dist/types/core/qrUtils.d.ts +2 -0
  26. package/package.json +4 -4
  27. package/dist/cjs/_virtual/index.js +0 -6
  28. package/dist/cjs/_virtual/index.js.map +0 -1
  29. package/dist/cjs/_virtual/make-built-in.js +0 -6
  30. package/dist/cjs/_virtual/make-built-in.js.map +0 -1
  31. package/dist/cjs/_virtual/new-promise-capability.js +0 -6
  32. package/dist/cjs/_virtual/new-promise-capability.js.map +0 -1
  33. package/dist/cjs/_virtual/object-define-properties.js +0 -6
  34. package/dist/cjs/_virtual/object-define-properties.js.map +0 -1
  35. package/dist/cjs/_virtual/object-define-property.js +0 -6
  36. package/dist/cjs/_virtual/object-define-property.js.map +0 -1
  37. package/dist/cjs/_virtual/object-get-own-property-descriptor.js +0 -6
  38. package/dist/cjs/_virtual/object-get-own-property-descriptor.js.map +0 -1
  39. package/dist/cjs/_virtual/object-get-own-property-names.js +0 -6
  40. package/dist/cjs/_virtual/object-get-own-property-names.js.map +0 -1
  41. package/dist/cjs/_virtual/object-get-own-property-symbols.js +0 -6
  42. package/dist/cjs/_virtual/object-get-own-property-symbols.js.map +0 -1
  43. package/dist/cjs/_virtual/object-property-is-enumerable.js +0 -6
  44. package/dist/cjs/_virtual/object-property-is-enumerable.js.map +0 -1
  45. package/dist/cjs/_virtual/performance-now.js +0 -6
  46. package/dist/cjs/_virtual/performance-now.js.map +0 -1
  47. package/dist/cjs/_virtual/shared-store.js +0 -6
  48. package/dist/cjs/_virtual/shared-store.js.map +0 -1
  49. package/dist/cjs/node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js +0 -30
  50. package/dist/cjs/node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js.map +0 -1
  51. package/dist/cjs/node_modules/@babel/runtime/helpers/esm/defineProperty.js +0 -15
  52. package/dist/cjs/node_modules/@babel/runtime/helpers/esm/defineProperty.js.map +0 -1
  53. package/dist/cjs/node_modules/@babel/runtime/helpers/esm/toPrimitive.js +0 -17
  54. package/dist/cjs/node_modules/@babel/runtime/helpers/esm/toPrimitive.js.map +0 -1
  55. package/dist/cjs/node_modules/@babel/runtime/helpers/esm/toPropertyKey.js +0 -12
  56. package/dist/cjs/node_modules/@babel/runtime/helpers/esm/toPropertyKey.js.map +0 -1
  57. package/dist/cjs/node_modules/@babel/runtime/helpers/esm/typeof.js +0 -14
  58. package/dist/cjs/node_modules/@babel/runtime/helpers/esm/typeof.js.map +0 -1
  59. package/dist/cjs/node_modules/canvg/lib/index.es.js +0 -6645
  60. package/dist/cjs/node_modules/canvg/lib/index.es.js.map +0 -1
  61. package/dist/cjs/node_modules/core-js/internals/a-callable.js +0 -18
  62. package/dist/cjs/node_modules/core-js/internals/a-callable.js.map +0 -1
  63. package/dist/cjs/node_modules/core-js/internals/a-constructor.js +0 -18
  64. package/dist/cjs/node_modules/core-js/internals/a-constructor.js.map +0 -1
  65. package/dist/cjs/node_modules/core-js/internals/a-possible-prototype.js +0 -16
  66. package/dist/cjs/node_modules/core-js/internals/a-possible-prototype.js.map +0 -1
  67. package/dist/cjs/node_modules/core-js/internals/add-to-unscopables.js +0 -30
  68. package/dist/cjs/node_modules/core-js/internals/add-to-unscopables.js.map +0 -1
  69. package/dist/cjs/node_modules/core-js/internals/advance-string-index.js +0 -14
  70. package/dist/cjs/node_modules/core-js/internals/advance-string-index.js.map +0 -1
  71. package/dist/cjs/node_modules/core-js/internals/an-instance.js +0 -15
  72. package/dist/cjs/node_modules/core-js/internals/an-instance.js.map +0 -1
  73. package/dist/cjs/node_modules/core-js/internals/an-object.js +0 -17
  74. package/dist/cjs/node_modules/core-js/internals/an-object.js.map +0 -1
  75. package/dist/cjs/node_modules/core-js/internals/array-includes.js +0 -39
  76. package/dist/cjs/node_modules/core-js/internals/array-includes.js.map +0 -1
  77. package/dist/cjs/node_modules/core-js/internals/array-method-is-strict.js +0 -16
  78. package/dist/cjs/node_modules/core-js/internals/array-method-is-strict.js.map +0 -1
  79. package/dist/cjs/node_modules/core-js/internals/array-reduce.js +0 -51
  80. package/dist/cjs/node_modules/core-js/internals/array-reduce.js.map +0 -1
  81. package/dist/cjs/node_modules/core-js/internals/array-slice.js +0 -10
  82. package/dist/cjs/node_modules/core-js/internals/array-slice.js.map +0 -1
  83. package/dist/cjs/node_modules/core-js/internals/check-correctness-of-iteration.js +0 -49
  84. package/dist/cjs/node_modules/core-js/internals/check-correctness-of-iteration.js.map +0 -1
  85. package/dist/cjs/node_modules/core-js/internals/classof-raw.js +0 -15
  86. package/dist/cjs/node_modules/core-js/internals/classof-raw.js.map +0 -1
  87. package/dist/cjs/node_modules/core-js/internals/classof.js +0 -39
  88. package/dist/cjs/node_modules/core-js/internals/classof.js.map +0 -1
  89. package/dist/cjs/node_modules/core-js/internals/copy-constructor-properties.js +0 -28
  90. package/dist/cjs/node_modules/core-js/internals/copy-constructor-properties.js.map +0 -1
  91. package/dist/cjs/node_modules/core-js/internals/correct-is-regexp-logic.js +0 -22
  92. package/dist/cjs/node_modules/core-js/internals/correct-is-regexp-logic.js.map +0 -1
  93. package/dist/cjs/node_modules/core-js/internals/correct-prototype-getter.js +0 -15
  94. package/dist/cjs/node_modules/core-js/internals/correct-prototype-getter.js.map +0 -1
  95. package/dist/cjs/node_modules/core-js/internals/create-iter-result-object.js +0 -10
  96. package/dist/cjs/node_modules/core-js/internals/create-iter-result-object.js.map +0 -1
  97. package/dist/cjs/node_modules/core-js/internals/create-non-enumerable-property.js +0 -20
  98. package/dist/cjs/node_modules/core-js/internals/create-non-enumerable-property.js.map +0 -1
  99. package/dist/cjs/node_modules/core-js/internals/create-property-descriptor.js +0 -13
  100. package/dist/cjs/node_modules/core-js/internals/create-property-descriptor.js.map +0 -1
  101. package/dist/cjs/node_modules/core-js/internals/define-built-in-accessor.js +0 -17
  102. package/dist/cjs/node_modules/core-js/internals/define-built-in-accessor.js.map +0 -1
  103. package/dist/cjs/node_modules/core-js/internals/define-built-in.js +0 -38
  104. package/dist/cjs/node_modules/core-js/internals/define-built-in.js.map +0 -1
  105. package/dist/cjs/node_modules/core-js/internals/define-global-property.js +0 -19
  106. package/dist/cjs/node_modules/core-js/internals/define-global-property.js.map +0 -1
  107. package/dist/cjs/node_modules/core-js/internals/descriptors.js +0 -14
  108. package/dist/cjs/node_modules/core-js/internals/descriptors.js.map +0 -1
  109. package/dist/cjs/node_modules/core-js/internals/document-create-element.js +0 -18
  110. package/dist/cjs/node_modules/core-js/internals/document-create-element.js.map +0 -1
  111. package/dist/cjs/node_modules/core-js/internals/dom-iterables.js +0 -40
  112. package/dist/cjs/node_modules/core-js/internals/dom-iterables.js.map +0 -1
  113. package/dist/cjs/node_modules/core-js/internals/dom-token-list-prototype.js +0 -14
  114. package/dist/cjs/node_modules/core-js/internals/dom-token-list-prototype.js.map +0 -1
  115. package/dist/cjs/node_modules/core-js/internals/enum-bug-keys.js +0 -15
  116. package/dist/cjs/node_modules/core-js/internals/enum-bug-keys.js.map +0 -1
  117. package/dist/cjs/node_modules/core-js/internals/environment-is-ios-pebble.js +0 -10
  118. package/dist/cjs/node_modules/core-js/internals/environment-is-ios-pebble.js.map +0 -1
  119. package/dist/cjs/node_modules/core-js/internals/environment-is-ios.js +0 -11
  120. package/dist/cjs/node_modules/core-js/internals/environment-is-ios.js.map +0 -1
  121. package/dist/cjs/node_modules/core-js/internals/environment-is-node.js +0 -10
  122. package/dist/cjs/node_modules/core-js/internals/environment-is-node.js.map +0 -1
  123. package/dist/cjs/node_modules/core-js/internals/environment-is-webos-webkit.js +0 -10
  124. package/dist/cjs/node_modules/core-js/internals/environment-is-webos-webkit.js.map +0 -1
  125. package/dist/cjs/node_modules/core-js/internals/environment-user-agent.js +0 -13
  126. package/dist/cjs/node_modules/core-js/internals/environment-user-agent.js.map +0 -1
  127. package/dist/cjs/node_modules/core-js/internals/environment-v8-version.js +0 -35
  128. package/dist/cjs/node_modules/core-js/internals/environment-v8-version.js.map +0 -1
  129. package/dist/cjs/node_modules/core-js/internals/environment.js +0 -29
  130. package/dist/cjs/node_modules/core-js/internals/environment.js.map +0 -1
  131. package/dist/cjs/node_modules/core-js/internals/export.js +0 -68
  132. package/dist/cjs/node_modules/core-js/internals/export.js.map +0 -1
  133. package/dist/cjs/node_modules/core-js/internals/fails.js +0 -12
  134. package/dist/cjs/node_modules/core-js/internals/fails.js.map +0 -1
  135. package/dist/cjs/node_modules/core-js/internals/fix-regexp-well-known-symbol-logic.js +0 -90
  136. package/dist/cjs/node_modules/core-js/internals/fix-regexp-well-known-symbol-logic.js.map +0 -1
  137. package/dist/cjs/node_modules/core-js/internals/function-apply.js +0 -17
  138. package/dist/cjs/node_modules/core-js/internals/function-apply.js.map +0 -1
  139. package/dist/cjs/node_modules/core-js/internals/function-bind-context.js +0 -22
  140. package/dist/cjs/node_modules/core-js/internals/function-bind-context.js.map +0 -1
  141. package/dist/cjs/node_modules/core-js/internals/function-bind-native.js +0 -15
  142. package/dist/cjs/node_modules/core-js/internals/function-bind-native.js.map +0 -1
  143. package/dist/cjs/node_modules/core-js/internals/function-call.js +0 -14
  144. package/dist/cjs/node_modules/core-js/internals/function-call.js.map +0 -1
  145. package/dist/cjs/node_modules/core-js/internals/function-name.js +0 -24
  146. package/dist/cjs/node_modules/core-js/internals/function-name.js.map +0 -1
  147. package/dist/cjs/node_modules/core-js/internals/function-uncurry-this-accessor.js +0 -17
  148. package/dist/cjs/node_modules/core-js/internals/function-uncurry-this-accessor.js.map +0 -1
  149. package/dist/cjs/node_modules/core-js/internals/function-uncurry-this-clause.js +0 -17
  150. package/dist/cjs/node_modules/core-js/internals/function-uncurry-this-clause.js.map +0 -1
  151. package/dist/cjs/node_modules/core-js/internals/function-uncurry-this.js +0 -19
  152. package/dist/cjs/node_modules/core-js/internals/function-uncurry-this.js.map +0 -1
  153. package/dist/cjs/node_modules/core-js/internals/get-built-in.js +0 -18
  154. package/dist/cjs/node_modules/core-js/internals/get-built-in.js.map +0 -1
  155. package/dist/cjs/node_modules/core-js/internals/get-iterator-method.js +0 -24
  156. package/dist/cjs/node_modules/core-js/internals/get-iterator-method.js.map +0 -1
  157. package/dist/cjs/node_modules/core-js/internals/get-iterator.js +0 -24
  158. package/dist/cjs/node_modules/core-js/internals/get-iterator.js.map +0 -1
  159. package/dist/cjs/node_modules/core-js/internals/get-method.js +0 -17
  160. package/dist/cjs/node_modules/core-js/internals/get-method.js.map +0 -1
  161. package/dist/cjs/node_modules/core-js/internals/get-substitution.js +0 -53
  162. package/dist/cjs/node_modules/core-js/internals/get-substitution.js.map +0 -1
  163. package/dist/cjs/node_modules/core-js/internals/global-this.js +0 -22
  164. package/dist/cjs/node_modules/core-js/internals/global-this.js.map +0 -1
  165. package/dist/cjs/node_modules/core-js/internals/has-own-property.js +0 -19
  166. package/dist/cjs/node_modules/core-js/internals/has-own-property.js.map +0 -1
  167. package/dist/cjs/node_modules/core-js/internals/hidden-keys.js +0 -6
  168. package/dist/cjs/node_modules/core-js/internals/hidden-keys.js.map +0 -1
  169. package/dist/cjs/node_modules/core-js/internals/host-report-errors.js +0 -11
  170. package/dist/cjs/node_modules/core-js/internals/host-report-errors.js.map +0 -1
  171. package/dist/cjs/node_modules/core-js/internals/html.js +0 -10
  172. package/dist/cjs/node_modules/core-js/internals/html.js.map +0 -1
  173. package/dist/cjs/node_modules/core-js/internals/ie8-dom-define.js +0 -20
  174. package/dist/cjs/node_modules/core-js/internals/ie8-dom-define.js.map +0 -1
  175. package/dist/cjs/node_modules/core-js/internals/indexed-object.js +0 -24
  176. package/dist/cjs/node_modules/core-js/internals/indexed-object.js.map +0 -1
  177. package/dist/cjs/node_modules/core-js/internals/inspect-source.js +0 -23
  178. package/dist/cjs/node_modules/core-js/internals/inspect-source.js.map +0 -1
  179. package/dist/cjs/node_modules/core-js/internals/internal-state.js +0 -84
  180. package/dist/cjs/node_modules/core-js/internals/internal-state.js.map +0 -1
  181. package/dist/cjs/node_modules/core-js/internals/is-array-iterator-method.js +0 -18
  182. package/dist/cjs/node_modules/core-js/internals/is-array-iterator-method.js.map +0 -1
  183. package/dist/cjs/node_modules/core-js/internals/is-array.js +0 -15
  184. package/dist/cjs/node_modules/core-js/internals/is-array.js.map +0 -1
  185. package/dist/cjs/node_modules/core-js/internals/is-callable.js +0 -16
  186. package/dist/cjs/node_modules/core-js/internals/is-callable.js.map +0 -1
  187. package/dist/cjs/node_modules/core-js/internals/is-constructor.js +0 -63
  188. package/dist/cjs/node_modules/core-js/internals/is-constructor.js.map +0 -1
  189. package/dist/cjs/node_modules/core-js/internals/is-forced.js +0 -30
  190. package/dist/cjs/node_modules/core-js/internals/is-forced.js.map +0 -1
  191. package/dist/cjs/node_modules/core-js/internals/is-null-or-undefined.js +0 -10
  192. package/dist/cjs/node_modules/core-js/internals/is-null-or-undefined.js.map +0 -1
  193. package/dist/cjs/node_modules/core-js/internals/is-object.js +0 -12
  194. package/dist/cjs/node_modules/core-js/internals/is-object.js.map +0 -1
  195. package/dist/cjs/node_modules/core-js/internals/is-possible-prototype.js +0 -12
  196. package/dist/cjs/node_modules/core-js/internals/is-possible-prototype.js.map +0 -1
  197. package/dist/cjs/node_modules/core-js/internals/is-regexp.js +0 -21
  198. package/dist/cjs/node_modules/core-js/internals/is-regexp.js.map +0 -1
  199. package/dist/cjs/node_modules/core-js/internals/is-symbol.js +0 -23
  200. package/dist/cjs/node_modules/core-js/internals/is-symbol.js.map +0 -1
  201. package/dist/cjs/node_modules/core-js/internals/iterate.js +0 -84
  202. package/dist/cjs/node_modules/core-js/internals/iterate.js.map +0 -1
  203. package/dist/cjs/node_modules/core-js/internals/iterator-close.js +0 -32
  204. package/dist/cjs/node_modules/core-js/internals/iterator-close.js.map +0 -1
  205. package/dist/cjs/node_modules/core-js/internals/iterator-create-constructor.js +0 -26
  206. package/dist/cjs/node_modules/core-js/internals/iterator-create-constructor.js.map +0 -1
  207. package/dist/cjs/node_modules/core-js/internals/iterator-define.js +0 -118
  208. package/dist/cjs/node_modules/core-js/internals/iterator-define.js.map +0 -1
  209. package/dist/cjs/node_modules/core-js/internals/iterators-core.js +0 -58
  210. package/dist/cjs/node_modules/core-js/internals/iterators-core.js.map +0 -1
  211. package/dist/cjs/node_modules/core-js/internals/iterators.js +0 -6
  212. package/dist/cjs/node_modules/core-js/internals/iterators.js.map +0 -1
  213. package/dist/cjs/node_modules/core-js/internals/length-of-array-like.js +0 -14
  214. package/dist/cjs/node_modules/core-js/internals/length-of-array-like.js.map +0 -1
  215. package/dist/cjs/node_modules/core-js/internals/make-built-in.js +0 -71
  216. package/dist/cjs/node_modules/core-js/internals/make-built-in.js.map +0 -1
  217. package/dist/cjs/node_modules/core-js/internals/math-trunc.js +0 -15
  218. package/dist/cjs/node_modules/core-js/internals/math-trunc.js.map +0 -1
  219. package/dist/cjs/node_modules/core-js/internals/microtask.js +0 -93
  220. package/dist/cjs/node_modules/core-js/internals/microtask.js.map +0 -1
  221. package/dist/cjs/node_modules/core-js/internals/new-promise-capability.js +0 -28
  222. package/dist/cjs/node_modules/core-js/internals/new-promise-capability.js.map +0 -1
  223. package/dist/cjs/node_modules/core-js/internals/not-a-regexp.js +0 -16
  224. package/dist/cjs/node_modules/core-js/internals/not-a-regexp.js.map +0 -1
  225. package/dist/cjs/node_modules/core-js/internals/object-create.js +0 -98
  226. package/dist/cjs/node_modules/core-js/internals/object-create.js.map +0 -1
  227. package/dist/cjs/node_modules/core-js/internals/object-define-properties.js +0 -34
  228. package/dist/cjs/node_modules/core-js/internals/object-define-properties.js.map +0 -1
  229. package/dist/cjs/node_modules/core-js/internals/object-define-property.js +0 -55
  230. package/dist/cjs/node_modules/core-js/internals/object-define-property.js.map +0 -1
  231. package/dist/cjs/node_modules/core-js/internals/object-get-own-property-descriptor.js +0 -38
  232. package/dist/cjs/node_modules/core-js/internals/object-get-own-property-descriptor.js.map +0 -1
  233. package/dist/cjs/node_modules/core-js/internals/object-get-own-property-names.js +0 -20
  234. package/dist/cjs/node_modules/core-js/internals/object-get-own-property-names.js.map +0 -1
  235. package/dist/cjs/node_modules/core-js/internals/object-get-own-property-symbols.js +0 -9
  236. package/dist/cjs/node_modules/core-js/internals/object-get-own-property-symbols.js.map +0 -1
  237. package/dist/cjs/node_modules/core-js/internals/object-get-prototype-of.js +0 -32
  238. package/dist/cjs/node_modules/core-js/internals/object-get-prototype-of.js.map +0 -1
  239. package/dist/cjs/node_modules/core-js/internals/object-is-prototype-of.js +0 -10
  240. package/dist/cjs/node_modules/core-js/internals/object-is-prototype-of.js.map +0 -1
  241. package/dist/cjs/node_modules/core-js/internals/object-keys-internal.js +0 -31
  242. package/dist/cjs/node_modules/core-js/internals/object-keys-internal.js.map +0 -1
  243. package/dist/cjs/node_modules/core-js/internals/object-keys.js +0 -17
  244. package/dist/cjs/node_modules/core-js/internals/object-keys.js.map +0 -1
  245. package/dist/cjs/node_modules/core-js/internals/object-property-is-enumerable.js +0 -20
  246. package/dist/cjs/node_modules/core-js/internals/object-property-is-enumerable.js.map +0 -1
  247. package/dist/cjs/node_modules/core-js/internals/object-set-prototype-of.js +0 -38
  248. package/dist/cjs/node_modules/core-js/internals/object-set-prototype-of.js.map +0 -1
  249. package/dist/cjs/node_modules/core-js/internals/ordinary-to-primitive.js +0 -24
  250. package/dist/cjs/node_modules/core-js/internals/ordinary-to-primitive.js.map +0 -1
  251. package/dist/cjs/node_modules/core-js/internals/own-keys.js +0 -27
  252. package/dist/cjs/node_modules/core-js/internals/own-keys.js.map +0 -1
  253. package/dist/cjs/node_modules/core-js/internals/path.js +0 -10
  254. package/dist/cjs/node_modules/core-js/internals/path.js.map +0 -1
  255. package/dist/cjs/node_modules/core-js/internals/perform.js +0 -12
  256. package/dist/cjs/node_modules/core-js/internals/perform.js.map +0 -1
  257. package/dist/cjs/node_modules/core-js/internals/promise-constructor-detection.js +0 -57
  258. package/dist/cjs/node_modules/core-js/internals/promise-constructor-detection.js.map +0 -1
  259. package/dist/cjs/node_modules/core-js/internals/promise-native-constructor.js +0 -10
  260. package/dist/cjs/node_modules/core-js/internals/promise-native-constructor.js.map +0 -1
  261. package/dist/cjs/node_modules/core-js/internals/promise-resolve.js +0 -22
  262. package/dist/cjs/node_modules/core-js/internals/promise-resolve.js.map +0 -1
  263. package/dist/cjs/node_modules/core-js/internals/promise-statics-incorrect-iteration.js +0 -16
  264. package/dist/cjs/node_modules/core-js/internals/promise-statics-incorrect-iteration.js.map +0 -1
  265. package/dist/cjs/node_modules/core-js/internals/queue.js +0 -29
  266. package/dist/cjs/node_modules/core-js/internals/queue.js.map +0 -1
  267. package/dist/cjs/node_modules/core-js/internals/regexp-exec-abstract.js +0 -31
  268. package/dist/cjs/node_modules/core-js/internals/regexp-exec-abstract.js.map +0 -1
  269. package/dist/cjs/node_modules/core-js/internals/regexp-exec.js +0 -132
  270. package/dist/cjs/node_modules/core-js/internals/regexp-exec.js.map +0 -1
  271. package/dist/cjs/node_modules/core-js/internals/regexp-flags-detection.js +0 -54
  272. package/dist/cjs/node_modules/core-js/internals/regexp-flags-detection.js.map +0 -1
  273. package/dist/cjs/node_modules/core-js/internals/regexp-flags.js +0 -24
  274. package/dist/cjs/node_modules/core-js/internals/regexp-flags.js.map +0 -1
  275. package/dist/cjs/node_modules/core-js/internals/regexp-get-flags.js +0 -26
  276. package/dist/cjs/node_modules/core-js/internals/regexp-get-flags.js.map +0 -1
  277. package/dist/cjs/node_modules/core-js/internals/regexp-sticky-helpers.js +0 -37
  278. package/dist/cjs/node_modules/core-js/internals/regexp-sticky-helpers.js.map +0 -1
  279. package/dist/cjs/node_modules/core-js/internals/regexp-unsupported-dot-all.js +0 -18
  280. package/dist/cjs/node_modules/core-js/internals/regexp-unsupported-dot-all.js.map +0 -1
  281. package/dist/cjs/node_modules/core-js/internals/regexp-unsupported-ncg.js +0 -19
  282. package/dist/cjs/node_modules/core-js/internals/regexp-unsupported-ncg.js.map +0 -1
  283. package/dist/cjs/node_modules/core-js/internals/require-object-coercible.js +0 -17
  284. package/dist/cjs/node_modules/core-js/internals/require-object-coercible.js.map +0 -1
  285. package/dist/cjs/node_modules/core-js/internals/safe-get-built-in.js +0 -20
  286. package/dist/cjs/node_modules/core-js/internals/safe-get-built-in.js.map +0 -1
  287. package/dist/cjs/node_modules/core-js/internals/set-species.js +0 -27
  288. package/dist/cjs/node_modules/core-js/internals/set-species.js.map +0 -1
  289. package/dist/cjs/node_modules/core-js/internals/set-to-string-tag.js +0 -22
  290. package/dist/cjs/node_modules/core-js/internals/set-to-string-tag.js.map +0 -1
  291. package/dist/cjs/node_modules/core-js/internals/shared-key.js +0 -16
  292. package/dist/cjs/node_modules/core-js/internals/shared-key.js.map +0 -1
  293. package/dist/cjs/node_modules/core-js/internals/shared-store.js +0 -24
  294. package/dist/cjs/node_modules/core-js/internals/shared-store.js.map +0 -1
  295. package/dist/cjs/node_modules/core-js/internals/shared.js +0 -12
  296. package/dist/cjs/node_modules/core-js/internals/shared.js.map +0 -1
  297. package/dist/cjs/node_modules/core-js/internals/species-constructor.js +0 -24
  298. package/dist/cjs/node_modules/core-js/internals/species-constructor.js.map +0 -1
  299. package/dist/cjs/node_modules/core-js/internals/string-multibyte.js +0 -43
  300. package/dist/cjs/node_modules/core-js/internals/string-multibyte.js.map +0 -1
  301. package/dist/cjs/node_modules/core-js/internals/string-trim-forced.js +0 -24
  302. package/dist/cjs/node_modules/core-js/internals/string-trim-forced.js.map +0 -1
  303. package/dist/cjs/node_modules/core-js/internals/string-trim.js +0 -34
  304. package/dist/cjs/node_modules/core-js/internals/string-trim.js.map +0 -1
  305. package/dist/cjs/node_modules/core-js/internals/symbol-constructor-detection.js +0 -27
  306. package/dist/cjs/node_modules/core-js/internals/symbol-constructor-detection.js.map +0 -1
  307. package/dist/cjs/node_modules/core-js/internals/task.js +0 -132
  308. package/dist/cjs/node_modules/core-js/internals/task.js.map +0 -1
  309. package/dist/cjs/node_modules/core-js/internals/to-absolute-index.js +0 -19
  310. package/dist/cjs/node_modules/core-js/internals/to-absolute-index.js.map +0 -1
  311. package/dist/cjs/node_modules/core-js/internals/to-indexed-object.js +0 -15
  312. package/dist/cjs/node_modules/core-js/internals/to-indexed-object.js.map +0 -1
  313. package/dist/cjs/node_modules/core-js/internals/to-integer-or-infinity.js +0 -16
  314. package/dist/cjs/node_modules/core-js/internals/to-integer-or-infinity.js.map +0 -1
  315. package/dist/cjs/node_modules/core-js/internals/to-length.js +0 -17
  316. package/dist/cjs/node_modules/core-js/internals/to-length.js.map +0 -1
  317. package/dist/cjs/node_modules/core-js/internals/to-object.js +0 -16
  318. package/dist/cjs/node_modules/core-js/internals/to-object.js.map +0 -1
  319. package/dist/cjs/node_modules/core-js/internals/to-primitive.js +0 -37
  320. package/dist/cjs/node_modules/core-js/internals/to-primitive.js.map +0 -1
  321. package/dist/cjs/node_modules/core-js/internals/to-property-key.js +0 -17
  322. package/dist/cjs/node_modules/core-js/internals/to-property-key.js.map +0 -1
  323. package/dist/cjs/node_modules/core-js/internals/to-string-tag-support.js +0 -15
  324. package/dist/cjs/node_modules/core-js/internals/to-string-tag-support.js.map +0 -1
  325. package/dist/cjs/node_modules/core-js/internals/to-string.js +0 -15
  326. package/dist/cjs/node_modules/core-js/internals/to-string.js.map +0 -1
  327. package/dist/cjs/node_modules/core-js/internals/try-to-string.js +0 -14
  328. package/dist/cjs/node_modules/core-js/internals/try-to-string.js.map +0 -1
  329. package/dist/cjs/node_modules/core-js/internals/uid.js +0 -16
  330. package/dist/cjs/node_modules/core-js/internals/uid.js.map +0 -1
  331. package/dist/cjs/node_modules/core-js/internals/use-symbol-as-uid.js +0 -13
  332. package/dist/cjs/node_modules/core-js/internals/use-symbol-as-uid.js.map +0 -1
  333. package/dist/cjs/node_modules/core-js/internals/v8-prototype-define-bug.js +0 -20
  334. package/dist/cjs/node_modules/core-js/internals/v8-prototype-define-bug.js.map +0 -1
  335. package/dist/cjs/node_modules/core-js/internals/validate-arguments-length.js +0 -11
  336. package/dist/cjs/node_modules/core-js/internals/validate-arguments-length.js.map +0 -1
  337. package/dist/cjs/node_modules/core-js/internals/weak-map-basic-detection.js +0 -14
  338. package/dist/cjs/node_modules/core-js/internals/weak-map-basic-detection.js.map +0 -1
  339. package/dist/cjs/node_modules/core-js/internals/well-known-symbol.js +0 -30
  340. package/dist/cjs/node_modules/core-js/internals/well-known-symbol.js.map +0 -1
  341. package/dist/cjs/node_modules/core-js/internals/whitespaces.js +0 -8
  342. package/dist/cjs/node_modules/core-js/internals/whitespaces.js.map +0 -1
  343. package/dist/cjs/node_modules/core-js/modules/es.array.index-of.js +0 -30
  344. package/dist/cjs/node_modules/core-js/modules/es.array.index-of.js.map +0 -1
  345. package/dist/cjs/node_modules/core-js/modules/es.array.iterator.js +0 -75
  346. package/dist/cjs/node_modules/core-js/modules/es.array.iterator.js.map +0 -1
  347. package/dist/cjs/node_modules/core-js/modules/es.array.reduce.js +0 -28
  348. package/dist/cjs/node_modules/core-js/modules/es.array.reduce.js.map +0 -1
  349. package/dist/cjs/node_modules/core-js/modules/es.array.reverse.js +0 -25
  350. package/dist/cjs/node_modules/core-js/modules/es.array.reverse.js.map +0 -1
  351. package/dist/cjs/node_modules/core-js/modules/es.promise.all.js +0 -50
  352. package/dist/cjs/node_modules/core-js/modules/es.promise.all.js.map +0 -1
  353. package/dist/cjs/node_modules/core-js/modules/es.promise.catch.js +0 -34
  354. package/dist/cjs/node_modules/core-js/modules/es.promise.catch.js.map +0 -1
  355. package/dist/cjs/node_modules/core-js/modules/es.promise.constructor.js +0 -319
  356. package/dist/cjs/node_modules/core-js/modules/es.promise.constructor.js.map +0 -1
  357. package/dist/cjs/node_modules/core-js/modules/es.promise.race.js +0 -37
  358. package/dist/cjs/node_modules/core-js/modules/es.promise.race.js.map +0 -1
  359. package/dist/cjs/node_modules/core-js/modules/es.promise.reject.js +0 -22
  360. package/dist/cjs/node_modules/core-js/modules/es.promise.reject.js.map +0 -1
  361. package/dist/cjs/node_modules/core-js/modules/es.promise.resolve.js +0 -23
  362. package/dist/cjs/node_modules/core-js/modules/es.promise.resolve.js.map +0 -1
  363. package/dist/cjs/node_modules/core-js/modules/es.regexp.exec.js +0 -14
  364. package/dist/cjs/node_modules/core-js/modules/es.regexp.exec.js.map +0 -1
  365. package/dist/cjs/node_modules/core-js/modules/es.regexp.to-string.js +0 -35
  366. package/dist/cjs/node_modules/core-js/modules/es.regexp.to-string.js.map +0 -1
  367. package/dist/cjs/node_modules/core-js/modules/es.string.ends-with.js +0 -45
  368. package/dist/cjs/node_modules/core-js/modules/es.string.ends-with.js.map +0 -1
  369. package/dist/cjs/node_modules/core-js/modules/es.string.includes.js +0 -30
  370. package/dist/cjs/node_modules/core-js/modules/es.string.includes.js.map +0 -1
  371. package/dist/cjs/node_modules/core-js/modules/es.string.match.js +0 -69
  372. package/dist/cjs/node_modules/core-js/modules/es.string.match.js.map +0 -1
  373. package/dist/cjs/node_modules/core-js/modules/es.string.replace.js +0 -165
  374. package/dist/cjs/node_modules/core-js/modules/es.string.replace.js.map +0 -1
  375. package/dist/cjs/node_modules/core-js/modules/es.string.split.js +0 -128
  376. package/dist/cjs/node_modules/core-js/modules/es.string.split.js.map +0 -1
  377. package/dist/cjs/node_modules/core-js/modules/es.string.starts-with.js +0 -43
  378. package/dist/cjs/node_modules/core-js/modules/es.string.starts-with.js.map +0 -1
  379. package/dist/cjs/node_modules/core-js/modules/es.string.trim.js +0 -18
  380. package/dist/cjs/node_modules/core-js/modules/es.string.trim.js.map +0 -1
  381. package/dist/cjs/node_modules/core-js/modules/web.dom-collections.iterator.js +0 -47
  382. package/dist/cjs/node_modules/core-js/modules/web.dom-collections.iterator.js.map +0 -1
  383. package/dist/cjs/node_modules/dompurify/dist/purify.es.js +0 -1533
  384. package/dist/cjs/node_modules/dompurify/dist/purify.es.js.map +0 -1
  385. package/dist/cjs/node_modules/fflate/esm/browser.js +0 -807
  386. package/dist/cjs/node_modules/fflate/esm/browser.js.map +0 -1
  387. package/dist/cjs/node_modules/html2canvas/dist/html2canvas.esm.js +0 -7824
  388. package/dist/cjs/node_modules/html2canvas/dist/html2canvas.esm.js.map +0 -1
  389. package/dist/cjs/node_modules/jspdf/dist/jspdf.es.min.js +0 -358
  390. package/dist/cjs/node_modules/jspdf/dist/jspdf.es.min.js.map +0 -1
  391. package/dist/cjs/node_modules/performance-now/lib/performance-now.js +0 -46
  392. package/dist/cjs/node_modules/performance-now/lib/performance-now.js.map +0 -1
  393. package/dist/cjs/node_modules/raf/index.js +0 -87
  394. package/dist/cjs/node_modules/raf/index.js.map +0 -1
  395. package/dist/cjs/node_modules/rgbcolor/index.js +0 -311
  396. package/dist/cjs/node_modules/rgbcolor/index.js.map +0 -1
  397. package/dist/cjs/node_modules/stackblur-canvas/dist/stackblur-es.js +0 -384
  398. package/dist/cjs/node_modules/stackblur-canvas/dist/stackblur-es.js.map +0 -1
  399. package/dist/cjs/node_modules/svg-pathdata/lib/SVGPathData.module.js +0 -23
  400. package/dist/cjs/node_modules/svg-pathdata/lib/SVGPathData.module.js.map +0 -1
  401. package/dist/esm/_virtual/index.js +0 -4
  402. package/dist/esm/_virtual/index.js.map +0 -1
  403. package/dist/esm/_virtual/make-built-in.js +0 -4
  404. package/dist/esm/_virtual/make-built-in.js.map +0 -1
  405. package/dist/esm/_virtual/new-promise-capability.js +0 -4
  406. package/dist/esm/_virtual/new-promise-capability.js.map +0 -1
  407. package/dist/esm/_virtual/object-define-properties.js +0 -4
  408. package/dist/esm/_virtual/object-define-properties.js.map +0 -1
  409. package/dist/esm/_virtual/object-define-property.js +0 -4
  410. package/dist/esm/_virtual/object-define-property.js.map +0 -1
  411. package/dist/esm/_virtual/object-get-own-property-descriptor.js +0 -4
  412. package/dist/esm/_virtual/object-get-own-property-descriptor.js.map +0 -1
  413. package/dist/esm/_virtual/object-get-own-property-names.js +0 -4
  414. package/dist/esm/_virtual/object-get-own-property-names.js.map +0 -1
  415. package/dist/esm/_virtual/object-get-own-property-symbols.js +0 -4
  416. package/dist/esm/_virtual/object-get-own-property-symbols.js.map +0 -1
  417. package/dist/esm/_virtual/object-property-is-enumerable.js +0 -4
  418. package/dist/esm/_virtual/object-property-is-enumerable.js.map +0 -1
  419. package/dist/esm/_virtual/performance-now.js +0 -4
  420. package/dist/esm/_virtual/performance-now.js.map +0 -1
  421. package/dist/esm/_virtual/shared-store.js +0 -4
  422. package/dist/esm/_virtual/shared-store.js.map +0 -1
  423. package/dist/esm/node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js +0 -28
  424. package/dist/esm/node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js.map +0 -1
  425. package/dist/esm/node_modules/@babel/runtime/helpers/esm/defineProperty.js +0 -13
  426. package/dist/esm/node_modules/@babel/runtime/helpers/esm/defineProperty.js.map +0 -1
  427. package/dist/esm/node_modules/@babel/runtime/helpers/esm/toPrimitive.js +0 -15
  428. package/dist/esm/node_modules/@babel/runtime/helpers/esm/toPrimitive.js.map +0 -1
  429. package/dist/esm/node_modules/@babel/runtime/helpers/esm/toPropertyKey.js +0 -10
  430. package/dist/esm/node_modules/@babel/runtime/helpers/esm/toPropertyKey.js.map +0 -1
  431. package/dist/esm/node_modules/@babel/runtime/helpers/esm/typeof.js +0 -12
  432. package/dist/esm/node_modules/@babel/runtime/helpers/esm/typeof.js.map +0 -1
  433. package/dist/esm/node_modules/canvg/lib/index.es.js +0 -6556
  434. package/dist/esm/node_modules/canvg/lib/index.es.js.map +0 -1
  435. package/dist/esm/node_modules/core-js/internals/a-callable.js +0 -16
  436. package/dist/esm/node_modules/core-js/internals/a-callable.js.map +0 -1
  437. package/dist/esm/node_modules/core-js/internals/a-constructor.js +0 -16
  438. package/dist/esm/node_modules/core-js/internals/a-constructor.js.map +0 -1
  439. package/dist/esm/node_modules/core-js/internals/a-possible-prototype.js +0 -14
  440. package/dist/esm/node_modules/core-js/internals/a-possible-prototype.js.map +0 -1
  441. package/dist/esm/node_modules/core-js/internals/add-to-unscopables.js +0 -28
  442. package/dist/esm/node_modules/core-js/internals/add-to-unscopables.js.map +0 -1
  443. package/dist/esm/node_modules/core-js/internals/advance-string-index.js +0 -12
  444. package/dist/esm/node_modules/core-js/internals/advance-string-index.js.map +0 -1
  445. package/dist/esm/node_modules/core-js/internals/an-instance.js +0 -13
  446. package/dist/esm/node_modules/core-js/internals/an-instance.js.map +0 -1
  447. package/dist/esm/node_modules/core-js/internals/an-object.js +0 -15
  448. package/dist/esm/node_modules/core-js/internals/an-object.js.map +0 -1
  449. package/dist/esm/node_modules/core-js/internals/array-includes.js +0 -37
  450. package/dist/esm/node_modules/core-js/internals/array-includes.js.map +0 -1
  451. package/dist/esm/node_modules/core-js/internals/array-method-is-strict.js +0 -14
  452. package/dist/esm/node_modules/core-js/internals/array-method-is-strict.js.map +0 -1
  453. package/dist/esm/node_modules/core-js/internals/array-reduce.js +0 -49
  454. package/dist/esm/node_modules/core-js/internals/array-reduce.js.map +0 -1
  455. package/dist/esm/node_modules/core-js/internals/array-slice.js +0 -8
  456. package/dist/esm/node_modules/core-js/internals/array-slice.js.map +0 -1
  457. package/dist/esm/node_modules/core-js/internals/check-correctness-of-iteration.js +0 -47
  458. package/dist/esm/node_modules/core-js/internals/check-correctness-of-iteration.js.map +0 -1
  459. package/dist/esm/node_modules/core-js/internals/classof-raw.js +0 -13
  460. package/dist/esm/node_modules/core-js/internals/classof-raw.js.map +0 -1
  461. package/dist/esm/node_modules/core-js/internals/classof.js +0 -37
  462. package/dist/esm/node_modules/core-js/internals/classof.js.map +0 -1
  463. package/dist/esm/node_modules/core-js/internals/copy-constructor-properties.js +0 -26
  464. package/dist/esm/node_modules/core-js/internals/copy-constructor-properties.js.map +0 -1
  465. package/dist/esm/node_modules/core-js/internals/correct-is-regexp-logic.js +0 -20
  466. package/dist/esm/node_modules/core-js/internals/correct-is-regexp-logic.js.map +0 -1
  467. package/dist/esm/node_modules/core-js/internals/correct-prototype-getter.js +0 -13
  468. package/dist/esm/node_modules/core-js/internals/correct-prototype-getter.js.map +0 -1
  469. package/dist/esm/node_modules/core-js/internals/create-iter-result-object.js +0 -8
  470. package/dist/esm/node_modules/core-js/internals/create-iter-result-object.js.map +0 -1
  471. package/dist/esm/node_modules/core-js/internals/create-non-enumerable-property.js +0 -18
  472. package/dist/esm/node_modules/core-js/internals/create-non-enumerable-property.js.map +0 -1
  473. package/dist/esm/node_modules/core-js/internals/create-property-descriptor.js +0 -11
  474. package/dist/esm/node_modules/core-js/internals/create-property-descriptor.js.map +0 -1
  475. package/dist/esm/node_modules/core-js/internals/define-built-in-accessor.js +0 -15
  476. package/dist/esm/node_modules/core-js/internals/define-built-in-accessor.js.map +0 -1
  477. package/dist/esm/node_modules/core-js/internals/define-built-in.js +0 -36
  478. package/dist/esm/node_modules/core-js/internals/define-built-in.js.map +0 -1
  479. package/dist/esm/node_modules/core-js/internals/define-global-property.js +0 -17
  480. package/dist/esm/node_modules/core-js/internals/define-global-property.js.map +0 -1
  481. package/dist/esm/node_modules/core-js/internals/descriptors.js +0 -12
  482. package/dist/esm/node_modules/core-js/internals/descriptors.js.map +0 -1
  483. package/dist/esm/node_modules/core-js/internals/document-create-element.js +0 -16
  484. package/dist/esm/node_modules/core-js/internals/document-create-element.js.map +0 -1
  485. package/dist/esm/node_modules/core-js/internals/dom-iterables.js +0 -38
  486. package/dist/esm/node_modules/core-js/internals/dom-iterables.js.map +0 -1
  487. package/dist/esm/node_modules/core-js/internals/dom-token-list-prototype.js +0 -12
  488. package/dist/esm/node_modules/core-js/internals/dom-token-list-prototype.js.map +0 -1
  489. package/dist/esm/node_modules/core-js/internals/enum-bug-keys.js +0 -13
  490. package/dist/esm/node_modules/core-js/internals/enum-bug-keys.js.map +0 -1
  491. package/dist/esm/node_modules/core-js/internals/environment-is-ios-pebble.js +0 -8
  492. package/dist/esm/node_modules/core-js/internals/environment-is-ios-pebble.js.map +0 -1
  493. package/dist/esm/node_modules/core-js/internals/environment-is-ios.js +0 -9
  494. package/dist/esm/node_modules/core-js/internals/environment-is-ios.js.map +0 -1
  495. package/dist/esm/node_modules/core-js/internals/environment-is-node.js +0 -8
  496. package/dist/esm/node_modules/core-js/internals/environment-is-node.js.map +0 -1
  497. package/dist/esm/node_modules/core-js/internals/environment-is-webos-webkit.js +0 -8
  498. package/dist/esm/node_modules/core-js/internals/environment-is-webos-webkit.js.map +0 -1
  499. package/dist/esm/node_modules/core-js/internals/environment-user-agent.js +0 -11
  500. package/dist/esm/node_modules/core-js/internals/environment-user-agent.js.map +0 -1
  501. package/dist/esm/node_modules/core-js/internals/environment-v8-version.js +0 -33
  502. package/dist/esm/node_modules/core-js/internals/environment-v8-version.js.map +0 -1
  503. package/dist/esm/node_modules/core-js/internals/environment.js +0 -27
  504. package/dist/esm/node_modules/core-js/internals/environment.js.map +0 -1
  505. package/dist/esm/node_modules/core-js/internals/export.js +0 -66
  506. package/dist/esm/node_modules/core-js/internals/export.js.map +0 -1
  507. package/dist/esm/node_modules/core-js/internals/fails.js +0 -10
  508. package/dist/esm/node_modules/core-js/internals/fails.js.map +0 -1
  509. package/dist/esm/node_modules/core-js/internals/fix-regexp-well-known-symbol-logic.js +0 -88
  510. package/dist/esm/node_modules/core-js/internals/fix-regexp-well-known-symbol-logic.js.map +0 -1
  511. package/dist/esm/node_modules/core-js/internals/function-apply.js +0 -15
  512. package/dist/esm/node_modules/core-js/internals/function-apply.js.map +0 -1
  513. package/dist/esm/node_modules/core-js/internals/function-bind-context.js +0 -20
  514. package/dist/esm/node_modules/core-js/internals/function-bind-context.js.map +0 -1
  515. package/dist/esm/node_modules/core-js/internals/function-bind-native.js +0 -13
  516. package/dist/esm/node_modules/core-js/internals/function-bind-native.js.map +0 -1
  517. package/dist/esm/node_modules/core-js/internals/function-call.js +0 -12
  518. package/dist/esm/node_modules/core-js/internals/function-call.js.map +0 -1
  519. package/dist/esm/node_modules/core-js/internals/function-name.js +0 -22
  520. package/dist/esm/node_modules/core-js/internals/function-name.js.map +0 -1
  521. package/dist/esm/node_modules/core-js/internals/function-uncurry-this-accessor.js +0 -15
  522. package/dist/esm/node_modules/core-js/internals/function-uncurry-this-accessor.js.map +0 -1
  523. package/dist/esm/node_modules/core-js/internals/function-uncurry-this-clause.js +0 -15
  524. package/dist/esm/node_modules/core-js/internals/function-uncurry-this-clause.js.map +0 -1
  525. package/dist/esm/node_modules/core-js/internals/function-uncurry-this.js +0 -17
  526. package/dist/esm/node_modules/core-js/internals/function-uncurry-this.js.map +0 -1
  527. package/dist/esm/node_modules/core-js/internals/get-built-in.js +0 -16
  528. package/dist/esm/node_modules/core-js/internals/get-built-in.js.map +0 -1
  529. package/dist/esm/node_modules/core-js/internals/get-iterator-method.js +0 -22
  530. package/dist/esm/node_modules/core-js/internals/get-iterator-method.js.map +0 -1
  531. package/dist/esm/node_modules/core-js/internals/get-iterator.js +0 -22
  532. package/dist/esm/node_modules/core-js/internals/get-iterator.js.map +0 -1
  533. package/dist/esm/node_modules/core-js/internals/get-method.js +0 -15
  534. package/dist/esm/node_modules/core-js/internals/get-method.js.map +0 -1
  535. package/dist/esm/node_modules/core-js/internals/get-substitution.js +0 -51
  536. package/dist/esm/node_modules/core-js/internals/get-substitution.js.map +0 -1
  537. package/dist/esm/node_modules/core-js/internals/global-this.js +0 -20
  538. package/dist/esm/node_modules/core-js/internals/global-this.js.map +0 -1
  539. package/dist/esm/node_modules/core-js/internals/has-own-property.js +0 -17
  540. package/dist/esm/node_modules/core-js/internals/has-own-property.js.map +0 -1
  541. package/dist/esm/node_modules/core-js/internals/hidden-keys.js +0 -4
  542. package/dist/esm/node_modules/core-js/internals/hidden-keys.js.map +0 -1
  543. package/dist/esm/node_modules/core-js/internals/host-report-errors.js +0 -9
  544. package/dist/esm/node_modules/core-js/internals/host-report-errors.js.map +0 -1
  545. package/dist/esm/node_modules/core-js/internals/html.js +0 -8
  546. package/dist/esm/node_modules/core-js/internals/html.js.map +0 -1
  547. package/dist/esm/node_modules/core-js/internals/ie8-dom-define.js +0 -18
  548. package/dist/esm/node_modules/core-js/internals/ie8-dom-define.js.map +0 -1
  549. package/dist/esm/node_modules/core-js/internals/indexed-object.js +0 -22
  550. package/dist/esm/node_modules/core-js/internals/indexed-object.js.map +0 -1
  551. package/dist/esm/node_modules/core-js/internals/inspect-source.js +0 -21
  552. package/dist/esm/node_modules/core-js/internals/inspect-source.js.map +0 -1
  553. package/dist/esm/node_modules/core-js/internals/internal-state.js +0 -82
  554. package/dist/esm/node_modules/core-js/internals/internal-state.js.map +0 -1
  555. package/dist/esm/node_modules/core-js/internals/is-array-iterator-method.js +0 -16
  556. package/dist/esm/node_modules/core-js/internals/is-array-iterator-method.js.map +0 -1
  557. package/dist/esm/node_modules/core-js/internals/is-array.js +0 -13
  558. package/dist/esm/node_modules/core-js/internals/is-array.js.map +0 -1
  559. package/dist/esm/node_modules/core-js/internals/is-callable.js +0 -14
  560. package/dist/esm/node_modules/core-js/internals/is-callable.js.map +0 -1
  561. package/dist/esm/node_modules/core-js/internals/is-constructor.js +0 -61
  562. package/dist/esm/node_modules/core-js/internals/is-constructor.js.map +0 -1
  563. package/dist/esm/node_modules/core-js/internals/is-forced.js +0 -28
  564. package/dist/esm/node_modules/core-js/internals/is-forced.js.map +0 -1
  565. package/dist/esm/node_modules/core-js/internals/is-null-or-undefined.js +0 -8
  566. package/dist/esm/node_modules/core-js/internals/is-null-or-undefined.js.map +0 -1
  567. package/dist/esm/node_modules/core-js/internals/is-object.js +0 -10
  568. package/dist/esm/node_modules/core-js/internals/is-object.js.map +0 -1
  569. package/dist/esm/node_modules/core-js/internals/is-possible-prototype.js +0 -10
  570. package/dist/esm/node_modules/core-js/internals/is-possible-prototype.js.map +0 -1
  571. package/dist/esm/node_modules/core-js/internals/is-regexp.js +0 -19
  572. package/dist/esm/node_modules/core-js/internals/is-regexp.js.map +0 -1
  573. package/dist/esm/node_modules/core-js/internals/is-symbol.js +0 -21
  574. package/dist/esm/node_modules/core-js/internals/is-symbol.js.map +0 -1
  575. package/dist/esm/node_modules/core-js/internals/iterate.js +0 -82
  576. package/dist/esm/node_modules/core-js/internals/iterate.js.map +0 -1
  577. package/dist/esm/node_modules/core-js/internals/iterator-close.js +0 -30
  578. package/dist/esm/node_modules/core-js/internals/iterator-close.js.map +0 -1
  579. package/dist/esm/node_modules/core-js/internals/iterator-create-constructor.js +0 -24
  580. package/dist/esm/node_modules/core-js/internals/iterator-create-constructor.js.map +0 -1
  581. package/dist/esm/node_modules/core-js/internals/iterator-define.js +0 -116
  582. package/dist/esm/node_modules/core-js/internals/iterator-define.js.map +0 -1
  583. package/dist/esm/node_modules/core-js/internals/iterators-core.js +0 -56
  584. package/dist/esm/node_modules/core-js/internals/iterators-core.js.map +0 -1
  585. package/dist/esm/node_modules/core-js/internals/iterators.js +0 -4
  586. package/dist/esm/node_modules/core-js/internals/iterators.js.map +0 -1
  587. package/dist/esm/node_modules/core-js/internals/length-of-array-like.js +0 -12
  588. package/dist/esm/node_modules/core-js/internals/length-of-array-like.js.map +0 -1
  589. package/dist/esm/node_modules/core-js/internals/make-built-in.js +0 -69
  590. package/dist/esm/node_modules/core-js/internals/make-built-in.js.map +0 -1
  591. package/dist/esm/node_modules/core-js/internals/math-trunc.js +0 -13
  592. package/dist/esm/node_modules/core-js/internals/math-trunc.js.map +0 -1
  593. package/dist/esm/node_modules/core-js/internals/microtask.js +0 -91
  594. package/dist/esm/node_modules/core-js/internals/microtask.js.map +0 -1
  595. package/dist/esm/node_modules/core-js/internals/new-promise-capability.js +0 -26
  596. package/dist/esm/node_modules/core-js/internals/new-promise-capability.js.map +0 -1
  597. package/dist/esm/node_modules/core-js/internals/not-a-regexp.js +0 -14
  598. package/dist/esm/node_modules/core-js/internals/not-a-regexp.js.map +0 -1
  599. package/dist/esm/node_modules/core-js/internals/object-create.js +0 -96
  600. package/dist/esm/node_modules/core-js/internals/object-create.js.map +0 -1
  601. package/dist/esm/node_modules/core-js/internals/object-define-properties.js +0 -32
  602. package/dist/esm/node_modules/core-js/internals/object-define-properties.js.map +0 -1
  603. package/dist/esm/node_modules/core-js/internals/object-define-property.js +0 -53
  604. package/dist/esm/node_modules/core-js/internals/object-define-property.js.map +0 -1
  605. package/dist/esm/node_modules/core-js/internals/object-get-own-property-descriptor.js +0 -36
  606. package/dist/esm/node_modules/core-js/internals/object-get-own-property-descriptor.js.map +0 -1
  607. package/dist/esm/node_modules/core-js/internals/object-get-own-property-names.js +0 -18
  608. package/dist/esm/node_modules/core-js/internals/object-get-own-property-names.js.map +0 -1
  609. package/dist/esm/node_modules/core-js/internals/object-get-own-property-symbols.js +0 -7
  610. package/dist/esm/node_modules/core-js/internals/object-get-own-property-symbols.js.map +0 -1
  611. package/dist/esm/node_modules/core-js/internals/object-get-prototype-of.js +0 -30
  612. package/dist/esm/node_modules/core-js/internals/object-get-prototype-of.js.map +0 -1
  613. package/dist/esm/node_modules/core-js/internals/object-is-prototype-of.js +0 -8
  614. package/dist/esm/node_modules/core-js/internals/object-is-prototype-of.js.map +0 -1
  615. package/dist/esm/node_modules/core-js/internals/object-keys-internal.js +0 -29
  616. package/dist/esm/node_modules/core-js/internals/object-keys-internal.js.map +0 -1
  617. package/dist/esm/node_modules/core-js/internals/object-keys.js +0 -15
  618. package/dist/esm/node_modules/core-js/internals/object-keys.js.map +0 -1
  619. package/dist/esm/node_modules/core-js/internals/object-property-is-enumerable.js +0 -18
  620. package/dist/esm/node_modules/core-js/internals/object-property-is-enumerable.js.map +0 -1
  621. package/dist/esm/node_modules/core-js/internals/object-set-prototype-of.js +0 -36
  622. package/dist/esm/node_modules/core-js/internals/object-set-prototype-of.js.map +0 -1
  623. package/dist/esm/node_modules/core-js/internals/ordinary-to-primitive.js +0 -22
  624. package/dist/esm/node_modules/core-js/internals/ordinary-to-primitive.js.map +0 -1
  625. package/dist/esm/node_modules/core-js/internals/own-keys.js +0 -25
  626. package/dist/esm/node_modules/core-js/internals/own-keys.js.map +0 -1
  627. package/dist/esm/node_modules/core-js/internals/path.js +0 -8
  628. package/dist/esm/node_modules/core-js/internals/path.js.map +0 -1
  629. package/dist/esm/node_modules/core-js/internals/perform.js +0 -10
  630. package/dist/esm/node_modules/core-js/internals/perform.js.map +0 -1
  631. package/dist/esm/node_modules/core-js/internals/promise-constructor-detection.js +0 -55
  632. package/dist/esm/node_modules/core-js/internals/promise-constructor-detection.js.map +0 -1
  633. package/dist/esm/node_modules/core-js/internals/promise-native-constructor.js +0 -8
  634. package/dist/esm/node_modules/core-js/internals/promise-native-constructor.js.map +0 -1
  635. package/dist/esm/node_modules/core-js/internals/promise-resolve.js +0 -20
  636. package/dist/esm/node_modules/core-js/internals/promise-resolve.js.map +0 -1
  637. package/dist/esm/node_modules/core-js/internals/promise-statics-incorrect-iteration.js +0 -14
  638. package/dist/esm/node_modules/core-js/internals/promise-statics-incorrect-iteration.js.map +0 -1
  639. package/dist/esm/node_modules/core-js/internals/queue.js +0 -27
  640. package/dist/esm/node_modules/core-js/internals/queue.js.map +0 -1
  641. package/dist/esm/node_modules/core-js/internals/regexp-exec-abstract.js +0 -29
  642. package/dist/esm/node_modules/core-js/internals/regexp-exec-abstract.js.map +0 -1
  643. package/dist/esm/node_modules/core-js/internals/regexp-exec.js +0 -130
  644. package/dist/esm/node_modules/core-js/internals/regexp-exec.js.map +0 -1
  645. package/dist/esm/node_modules/core-js/internals/regexp-flags-detection.js +0 -52
  646. package/dist/esm/node_modules/core-js/internals/regexp-flags-detection.js.map +0 -1
  647. package/dist/esm/node_modules/core-js/internals/regexp-flags.js +0 -22
  648. package/dist/esm/node_modules/core-js/internals/regexp-flags.js.map +0 -1
  649. package/dist/esm/node_modules/core-js/internals/regexp-get-flags.js +0 -24
  650. package/dist/esm/node_modules/core-js/internals/regexp-get-flags.js.map +0 -1
  651. package/dist/esm/node_modules/core-js/internals/regexp-sticky-helpers.js +0 -35
  652. package/dist/esm/node_modules/core-js/internals/regexp-sticky-helpers.js.map +0 -1
  653. package/dist/esm/node_modules/core-js/internals/regexp-unsupported-dot-all.js +0 -16
  654. package/dist/esm/node_modules/core-js/internals/regexp-unsupported-dot-all.js.map +0 -1
  655. package/dist/esm/node_modules/core-js/internals/regexp-unsupported-ncg.js +0 -17
  656. package/dist/esm/node_modules/core-js/internals/regexp-unsupported-ncg.js.map +0 -1
  657. package/dist/esm/node_modules/core-js/internals/require-object-coercible.js +0 -15
  658. package/dist/esm/node_modules/core-js/internals/require-object-coercible.js.map +0 -1
  659. package/dist/esm/node_modules/core-js/internals/safe-get-built-in.js +0 -18
  660. package/dist/esm/node_modules/core-js/internals/safe-get-built-in.js.map +0 -1
  661. package/dist/esm/node_modules/core-js/internals/set-species.js +0 -25
  662. package/dist/esm/node_modules/core-js/internals/set-species.js.map +0 -1
  663. package/dist/esm/node_modules/core-js/internals/set-to-string-tag.js +0 -20
  664. package/dist/esm/node_modules/core-js/internals/set-to-string-tag.js.map +0 -1
  665. package/dist/esm/node_modules/core-js/internals/shared-key.js +0 -14
  666. package/dist/esm/node_modules/core-js/internals/shared-key.js.map +0 -1
  667. package/dist/esm/node_modules/core-js/internals/shared-store.js +0 -22
  668. package/dist/esm/node_modules/core-js/internals/shared-store.js.map +0 -1
  669. package/dist/esm/node_modules/core-js/internals/shared.js +0 -10
  670. package/dist/esm/node_modules/core-js/internals/shared.js.map +0 -1
  671. package/dist/esm/node_modules/core-js/internals/species-constructor.js +0 -22
  672. package/dist/esm/node_modules/core-js/internals/species-constructor.js.map +0 -1
  673. package/dist/esm/node_modules/core-js/internals/string-multibyte.js +0 -41
  674. package/dist/esm/node_modules/core-js/internals/string-multibyte.js.map +0 -1
  675. package/dist/esm/node_modules/core-js/internals/string-trim-forced.js +0 -22
  676. package/dist/esm/node_modules/core-js/internals/string-trim-forced.js.map +0 -1
  677. package/dist/esm/node_modules/core-js/internals/string-trim.js +0 -32
  678. package/dist/esm/node_modules/core-js/internals/string-trim.js.map +0 -1
  679. package/dist/esm/node_modules/core-js/internals/symbol-constructor-detection.js +0 -25
  680. package/dist/esm/node_modules/core-js/internals/symbol-constructor-detection.js.map +0 -1
  681. package/dist/esm/node_modules/core-js/internals/task.js +0 -130
  682. package/dist/esm/node_modules/core-js/internals/task.js.map +0 -1
  683. package/dist/esm/node_modules/core-js/internals/to-absolute-index.js +0 -17
  684. package/dist/esm/node_modules/core-js/internals/to-absolute-index.js.map +0 -1
  685. package/dist/esm/node_modules/core-js/internals/to-indexed-object.js +0 -13
  686. package/dist/esm/node_modules/core-js/internals/to-indexed-object.js.map +0 -1
  687. package/dist/esm/node_modules/core-js/internals/to-integer-or-infinity.js +0 -14
  688. package/dist/esm/node_modules/core-js/internals/to-integer-or-infinity.js.map +0 -1
  689. package/dist/esm/node_modules/core-js/internals/to-length.js +0 -15
  690. package/dist/esm/node_modules/core-js/internals/to-length.js.map +0 -1
  691. package/dist/esm/node_modules/core-js/internals/to-object.js +0 -14
  692. package/dist/esm/node_modules/core-js/internals/to-object.js.map +0 -1
  693. package/dist/esm/node_modules/core-js/internals/to-primitive.js +0 -35
  694. package/dist/esm/node_modules/core-js/internals/to-primitive.js.map +0 -1
  695. package/dist/esm/node_modules/core-js/internals/to-property-key.js +0 -15
  696. package/dist/esm/node_modules/core-js/internals/to-property-key.js.map +0 -1
  697. package/dist/esm/node_modules/core-js/internals/to-string-tag-support.js +0 -13
  698. package/dist/esm/node_modules/core-js/internals/to-string-tag-support.js.map +0 -1
  699. package/dist/esm/node_modules/core-js/internals/to-string.js +0 -13
  700. package/dist/esm/node_modules/core-js/internals/to-string.js.map +0 -1
  701. package/dist/esm/node_modules/core-js/internals/try-to-string.js +0 -12
  702. package/dist/esm/node_modules/core-js/internals/try-to-string.js.map +0 -1
  703. package/dist/esm/node_modules/core-js/internals/uid.js +0 -14
  704. package/dist/esm/node_modules/core-js/internals/uid.js.map +0 -1
  705. package/dist/esm/node_modules/core-js/internals/use-symbol-as-uid.js +0 -11
  706. package/dist/esm/node_modules/core-js/internals/use-symbol-as-uid.js.map +0 -1
  707. package/dist/esm/node_modules/core-js/internals/v8-prototype-define-bug.js +0 -18
  708. package/dist/esm/node_modules/core-js/internals/v8-prototype-define-bug.js.map +0 -1
  709. package/dist/esm/node_modules/core-js/internals/validate-arguments-length.js +0 -9
  710. package/dist/esm/node_modules/core-js/internals/validate-arguments-length.js.map +0 -1
  711. package/dist/esm/node_modules/core-js/internals/weak-map-basic-detection.js +0 -12
  712. package/dist/esm/node_modules/core-js/internals/weak-map-basic-detection.js.map +0 -1
  713. package/dist/esm/node_modules/core-js/internals/well-known-symbol.js +0 -28
  714. package/dist/esm/node_modules/core-js/internals/well-known-symbol.js.map +0 -1
  715. package/dist/esm/node_modules/core-js/internals/whitespaces.js +0 -6
  716. package/dist/esm/node_modules/core-js/internals/whitespaces.js.map +0 -1
  717. package/dist/esm/node_modules/core-js/modules/es.array.index-of.js +0 -28
  718. package/dist/esm/node_modules/core-js/modules/es.array.index-of.js.map +0 -1
  719. package/dist/esm/node_modules/core-js/modules/es.array.iterator.js +0 -73
  720. package/dist/esm/node_modules/core-js/modules/es.array.iterator.js.map +0 -1
  721. package/dist/esm/node_modules/core-js/modules/es.array.reduce.js +0 -26
  722. package/dist/esm/node_modules/core-js/modules/es.array.reduce.js.map +0 -1
  723. package/dist/esm/node_modules/core-js/modules/es.array.reverse.js +0 -23
  724. package/dist/esm/node_modules/core-js/modules/es.array.reverse.js.map +0 -1
  725. package/dist/esm/node_modules/core-js/modules/es.promise.all.js +0 -48
  726. package/dist/esm/node_modules/core-js/modules/es.promise.all.js.map +0 -1
  727. package/dist/esm/node_modules/core-js/modules/es.promise.catch.js +0 -32
  728. package/dist/esm/node_modules/core-js/modules/es.promise.catch.js.map +0 -1
  729. package/dist/esm/node_modules/core-js/modules/es.promise.constructor.js +0 -317
  730. package/dist/esm/node_modules/core-js/modules/es.promise.constructor.js.map +0 -1
  731. package/dist/esm/node_modules/core-js/modules/es.promise.race.js +0 -35
  732. package/dist/esm/node_modules/core-js/modules/es.promise.race.js.map +0 -1
  733. package/dist/esm/node_modules/core-js/modules/es.promise.reject.js +0 -20
  734. package/dist/esm/node_modules/core-js/modules/es.promise.reject.js.map +0 -1
  735. package/dist/esm/node_modules/core-js/modules/es.promise.resolve.js +0 -21
  736. package/dist/esm/node_modules/core-js/modules/es.promise.resolve.js.map +0 -1
  737. package/dist/esm/node_modules/core-js/modules/es.regexp.exec.js +0 -12
  738. package/dist/esm/node_modules/core-js/modules/es.regexp.exec.js.map +0 -1
  739. package/dist/esm/node_modules/core-js/modules/es.regexp.to-string.js +0 -33
  740. package/dist/esm/node_modules/core-js/modules/es.regexp.to-string.js.map +0 -1
  741. package/dist/esm/node_modules/core-js/modules/es.string.ends-with.js +0 -43
  742. package/dist/esm/node_modules/core-js/modules/es.string.ends-with.js.map +0 -1
  743. package/dist/esm/node_modules/core-js/modules/es.string.includes.js +0 -28
  744. package/dist/esm/node_modules/core-js/modules/es.string.includes.js.map +0 -1
  745. package/dist/esm/node_modules/core-js/modules/es.string.match.js +0 -67
  746. package/dist/esm/node_modules/core-js/modules/es.string.match.js.map +0 -1
  747. package/dist/esm/node_modules/core-js/modules/es.string.replace.js +0 -163
  748. package/dist/esm/node_modules/core-js/modules/es.string.replace.js.map +0 -1
  749. package/dist/esm/node_modules/core-js/modules/es.string.split.js +0 -126
  750. package/dist/esm/node_modules/core-js/modules/es.string.split.js.map +0 -1
  751. package/dist/esm/node_modules/core-js/modules/es.string.starts-with.js +0 -41
  752. package/dist/esm/node_modules/core-js/modules/es.string.starts-with.js.map +0 -1
  753. package/dist/esm/node_modules/core-js/modules/es.string.trim.js +0 -16
  754. package/dist/esm/node_modules/core-js/modules/es.string.trim.js.map +0 -1
  755. package/dist/esm/node_modules/core-js/modules/web.dom-collections.iterator.js +0 -45
  756. package/dist/esm/node_modules/core-js/modules/web.dom-collections.iterator.js.map +0 -1
  757. package/dist/esm/node_modules/dompurify/dist/purify.es.js +0 -1531
  758. package/dist/esm/node_modules/dompurify/dist/purify.es.js.map +0 -1
  759. package/dist/esm/node_modules/fflate/esm/browser.js +0 -804
  760. package/dist/esm/node_modules/fflate/esm/browser.js.map +0 -1
  761. package/dist/esm/node_modules/html2canvas/dist/html2canvas.esm.js +0 -7822
  762. package/dist/esm/node_modules/html2canvas/dist/html2canvas.esm.js.map +0 -1
  763. package/dist/esm/node_modules/jspdf/dist/jspdf.es.min.js +0 -337
  764. package/dist/esm/node_modules/jspdf/dist/jspdf.es.min.js.map +0 -1
  765. package/dist/esm/node_modules/performance-now/lib/performance-now.js +0 -44
  766. package/dist/esm/node_modules/performance-now/lib/performance-now.js.map +0 -1
  767. package/dist/esm/node_modules/raf/index.js +0 -85
  768. package/dist/esm/node_modules/raf/index.js.map +0 -1
  769. package/dist/esm/node_modules/rgbcolor/index.js +0 -309
  770. package/dist/esm/node_modules/rgbcolor/index.js.map +0 -1
  771. package/dist/esm/node_modules/stackblur-canvas/dist/stackblur-es.js +0 -380
  772. package/dist/esm/node_modules/stackblur-canvas/dist/stackblur-es.js.map +0 -1
  773. package/dist/esm/node_modules/svg-pathdata/lib/SVGPathData.module.js +0 -18
  774. package/dist/esm/node_modules/svg-pathdata/lib/SVGPathData.module.js.map +0 -1
@@ -1 +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 let fieldStyle = fieldStyleToCSS(field.style);\r\n \r\n // Determine flex direction and alignment for text fields\r\n let flexDirection: 'column' | 'row' = 'column';\r\n if (field.type === 'text' && field.style?.labelPosition === 'left') flexDirection = 'row';\r\n\r\n // Map verticalAlign and textAlign to flex properties\r\n let justifyContent: 'flex-start' | 'center' | 'flex-end' = 'flex-start';\r\n let alignItems: 'flex-start' | 'center' | 'flex-end' | undefined = 'flex-start';\r\n if (field.type === 'text') {\r\n const textAlign = field.style?.textTextAlign || field.style?.textAlign || 'left';\r\n const verticalAlign = field.style?.verticalAlign || 'top';\r\n \r\n if (flexDirection === 'column') {\r\n // For column: verticalAlign controls justifyContent (vertical), textAlign controls alignItems (horizontal)\r\n if (verticalAlign === 'middle') justifyContent = 'center';\r\n else if (verticalAlign === 'bottom') justifyContent = 'flex-end';\r\n else justifyContent = 'flex-start';\r\n \r\n if (textAlign === 'center') alignItems = 'center';\r\n else if (textAlign === 'right') alignItems = 'flex-end';\r\n else alignItems = 'flex-start';\r\n } else {\r\n // For row: don't set alignItems on container if individual alignments are specified\r\n // Let labelAlignSelf and textAlignSelf handle it\r\n if (field.style?.labelVerticalAlign || field.style?.textVerticalAlign) {\r\n alignItems = undefined;\r\n } else {\r\n // Fall back to general verticalAlign if individual ones aren't specified\r\n if (verticalAlign === 'middle') alignItems = 'center';\r\n else if (verticalAlign === 'bottom') alignItems = 'flex-end';\r\n else alignItems = 'flex-start';\r\n }\r\n }\r\n }\r\n\r\n // Remove fontSize for label fields so text field font size does not affect them\r\n if (field.type === 'label' && fieldStyle.fontSize) {\r\n const { fontSize, ...rest } = fieldStyle;\r\n fieldStyle = rest;\r\n }\r\n\r\n // Remove textTransform from container for text and label fields - applied directly to spans\r\n if ((field.type === 'text' || field.type === 'label') && fieldStyle.textTransform) {\r\n const { textTransform, ...rest } = fieldStyle;\r\n fieldStyle = rest;\r\n }\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 ? 'pointer' : 'default',\r\n display: field.type === 'text' ? 'flex' : undefined,\r\n flexDirection: field.type === 'text' ? flexDirection : undefined,\r\n justifyContent: field.type === 'text' ? justifyContent : undefined,\r\n alignItems: field.type === 'text' ? alignItems : undefined,\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 // Label style properties\r\n let labelFontSize = field.style?.labelFontSize;\r\n if (!labelFontSize || labelFontSize === '0.75em') {\r\n labelFontSize = '12px';\r\n } else if (!labelFontSize.endsWith('px')) {\r\n const num = parseFloat(labelFontSize);\r\n if (!isNaN(num)) labelFontSize = num + 'px';\r\n else labelFontSize = '12px';\r\n }\r\n const labelFontWeight = field.style?.labelFontWeight || 'normal';\r\n const labelColor = field.style?.labelColor || '#666666';\r\n const labelTextTransform = field.style?.labelTextTransform || 'none';\r\n const labelTextAlign = field.style?.labelTextAlign || 'left';\r\n \r\n // Text/value style properties (separate from label)\r\n const textFontSize = field.style?.textFontSize || field.style?.fontSize || '1em';\r\n const textFontWeight = field.style?.textFontWeight || field.style?.fontWeight || 'normal';\r\n const textColor = field.style?.textColor || field.style?.color || '#000000';\r\n const textTextTransform = field.style?.textTransform || 'none';\r\n const textTextAlign = field.style?.textTextAlign || field.style?.textAlign || 'left';\r\n \r\n // For row layout (label on left), use individual span alignment\r\n if (field.style?.labelPosition === 'left') {\r\n let labelAlignSelf: React.CSSProperties['alignSelf'] = 'flex-start';\r\n if (field.style?.labelVerticalAlign === 'middle') labelAlignSelf = 'center';\r\n else if (field.style?.labelVerticalAlign === 'bottom') labelAlignSelf = 'flex-end';\r\n \r\n let textAlignSelf: React.CSSProperties['alignSelf'] = 'flex-start';\r\n if (field.style?.textVerticalAlign === 'middle') textAlignSelf = 'center';\r\n else if (field.style?.textVerticalAlign === 'bottom') textAlignSelf = 'flex-end';\r\n \r\n const labelStyle: React.CSSProperties = { \r\n fontSize: labelFontSize, \r\n fontWeight: labelFontWeight, \r\n color: labelColor, \r\n opacity: 0.7, \r\n marginRight: 8, \r\n alignSelf: labelAlignSelf, \r\n whiteSpace: 'nowrap', \r\n textTransform: labelTextTransform \r\n };\r\n \r\n const textStyle: React.CSSProperties = { \r\n textTransform: textTextTransform, \r\n fontSize: textFontSize, \r\n fontWeight: textFontWeight, \r\n color: textColor, \r\n alignSelf: textAlignSelf\r\n };\r\n \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={labelStyle}>\r\n {field.label}\r\n </span>\r\n )}\r\n <span style={{ width: '100%', textAlign: textTextAlign }}>\r\n <span className=\"idcard-field-value\" style={textStyle}>{String(value || field.placeholder || '')}</span>\r\n </span>\r\n </div>\r\n );\r\n } else {\r\n // For column layout (label on top), let container alignment handle positioning\r\n const labelStyle: React.CSSProperties = { \r\n fontSize: labelFontSize, \r\n fontWeight: labelFontWeight, \r\n color: labelColor, \r\n opacity: 0.7, \r\n textTransform: labelTextTransform,\r\n width: '100%',\r\n textAlign: labelTextAlign\r\n };\r\n \r\n const textStyle: React.CSSProperties = { \r\n textTransform: textTextTransform, \r\n fontSize: textFontSize, \r\n fontWeight: textFontWeight, \r\n color: textColor,\r\n width: '100%',\r\n textAlign: textTextAlign\r\n };\r\n \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={labelStyle}>\r\n {field.label}\r\n </span>\r\n )}\r\n <span className=\"idcard-field-value\" style={textStyle}>{String(value || field.placeholder || '')}</span>\r\n </div>\r\n );\r\n }\r\n }\r\n\r\n case 'label': {\r\n const labelTextTransform = field.style?.labelTextTransform || 'none';\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 <span style={{ textTransform: labelTextTransform }}>{field.staticText || field.label || ''}</span>\r\n </div>\r\n );\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={combinedStyle}\r\n onClick={handleClick}\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 display: 'block',\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 }}\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%' }}\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: Math.round(template.cardSize.width),\r\n height: Math.round(template.cardSize.height),\r\n position: 'relative',\r\n overflow: 'hidden',\r\n backgroundColor: '#fff',\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: `${Math.round(template.cardSize.width)}px`,\r\n height: `${Math.round(template.cardSize.height)}px`,\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\n"],"names":["useMemo","positionToStyle","fieldStyleToCSS","_jsxs","_jsx","generateQrCodeFromFields"],"mappings":"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"}
1
+ {"version":3,"file":"IDCardGenerator.js","sources":["../../../src/components/IDCardGenerator.tsx"],"sourcesContent":["import React, { useMemo } from 'react';\nimport type { IDCardGeneratorProps, FieldMapping, IDCardData, IDCardTemplate } from '../types';\nimport { fieldStyleToCSS, positionToStyle } from '../utils/styleUtils';\nimport { generateQrCodeFromFields, getQrCodeSize } from '../core/qrUtils';\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 let fieldStyle = fieldStyleToCSS(field.style);\r\n \r\n // Determine flex direction and alignment for text fields\r\n let flexDirection: 'column' | 'row' = 'column';\r\n if (field.type === 'text' && field.style?.labelPosition === 'left') flexDirection = 'row';\r\n\r\n // Map verticalAlign and textAlign to flex properties\r\n let justifyContent: 'flex-start' | 'center' | 'flex-end' = 'flex-start';\r\n let alignItems: 'flex-start' | 'center' | 'flex-end' | undefined = 'flex-start';\r\n if (field.type === 'text') {\r\n const textAlign = field.style?.textTextAlign || field.style?.textAlign || 'left';\r\n const verticalAlign = field.style?.verticalAlign || 'top';\r\n \r\n if (flexDirection === 'column') {\r\n // For column: verticalAlign controls justifyContent (vertical), textAlign controls alignItems (horizontal)\r\n if (verticalAlign === 'middle') justifyContent = 'center';\r\n else if (verticalAlign === 'bottom') justifyContent = 'flex-end';\r\n else justifyContent = 'flex-start';\r\n \r\n if (textAlign === 'center') alignItems = 'center';\r\n else if (textAlign === 'right') alignItems = 'flex-end';\r\n else alignItems = 'flex-start';\r\n } else {\r\n // For row: don't set alignItems on container if individual alignments are specified\r\n // Let labelAlignSelf and textAlignSelf handle it\r\n if (field.style?.labelVerticalAlign || field.style?.textVerticalAlign) {\r\n alignItems = undefined;\r\n } else {\r\n // Fall back to general verticalAlign if individual ones aren't specified\r\n if (verticalAlign === 'middle') alignItems = 'center';\r\n else if (verticalAlign === 'bottom') alignItems = 'flex-end';\r\n else alignItems = 'flex-start';\r\n }\r\n }\r\n }\r\n\r\n // Remove fontSize for label fields so text field font size does not affect them\r\n if (field.type === 'label' && fieldStyle.fontSize) {\r\n const { fontSize, ...rest } = fieldStyle;\r\n fieldStyle = rest;\r\n }\r\n\r\n // Remove textTransform from container for text and label fields - applied directly to spans\r\n if ((field.type === 'text' || field.type === 'label') && fieldStyle.textTransform) {\r\n const { textTransform, ...rest } = fieldStyle;\r\n fieldStyle = rest;\r\n }\r\n\r\n const combinedStyle: React.CSSProperties = {\n ...posStyle,\n ...fieldStyle,\n backgroundColor: field.type === 'qrcode' ? 'transparent' : fieldStyle.backgroundColor,\n zIndex: field.zIndex || 1,\n boxSizing: 'border-box',\n overflow: 'hidden',\n cursor: editable ? 'pointer' : 'default',\r\n display: field.type === 'text' ? 'flex' : undefined,\r\n flexDirection: field.type === 'text' ? flexDirection : undefined,\r\n justifyContent: field.type === 'text' ? justifyContent : undefined,\r\n alignItems: field.type === 'text' ? alignItems : undefined,\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 // Label style properties\r\n let labelFontSize = field.style?.labelFontSize;\r\n if (!labelFontSize || labelFontSize === '0.75em') {\r\n labelFontSize = '12px';\r\n } else if (!labelFontSize.endsWith('px')) {\r\n const num = parseFloat(labelFontSize);\r\n if (!isNaN(num)) labelFontSize = num + 'px';\r\n else labelFontSize = '12px';\r\n }\r\n const labelFontWeight = field.style?.labelFontWeight || 'normal';\r\n const labelColor = field.style?.labelColor || '#666666';\r\n const labelTextTransform = field.style?.labelTextTransform || 'none';\r\n const labelTextAlign = field.style?.labelTextAlign || 'left';\r\n \r\n // Text/value style properties (separate from label)\r\n const textFontSize = field.style?.textFontSize || field.style?.fontSize || '1em';\r\n const textFontWeight = field.style?.textFontWeight || field.style?.fontWeight || 'normal';\r\n const textColor = field.style?.textColor || field.style?.color || '#000000';\r\n const textTextTransform = field.style?.textTransform || 'none';\r\n const textTextAlign = field.style?.textTextAlign || field.style?.textAlign || 'left';\r\n \r\n // For row layout (label on left), use individual span alignment\r\n if (field.style?.labelPosition === 'left') {\r\n let labelAlignSelf: React.CSSProperties['alignSelf'] = 'flex-start';\r\n if (field.style?.labelVerticalAlign === 'middle') labelAlignSelf = 'center';\r\n else if (field.style?.labelVerticalAlign === 'bottom') labelAlignSelf = 'flex-end';\r\n \r\n let textAlignSelf: React.CSSProperties['alignSelf'] = 'flex-start';\r\n if (field.style?.textVerticalAlign === 'middle') textAlignSelf = 'center';\r\n else if (field.style?.textVerticalAlign === 'bottom') textAlignSelf = 'flex-end';\r\n \r\n const labelStyle: React.CSSProperties = { \r\n fontSize: labelFontSize, \r\n fontWeight: labelFontWeight, \r\n color: labelColor, \r\n opacity: 0.7, \r\n marginRight: 8, \r\n alignSelf: labelAlignSelf, \r\n whiteSpace: 'nowrap', \r\n textTransform: labelTextTransform \r\n };\r\n \r\n const textStyle: React.CSSProperties = { \r\n textTransform: textTextTransform, \r\n fontSize: textFontSize, \r\n fontWeight: textFontWeight, \r\n color: textColor, \r\n alignSelf: textAlignSelf\r\n };\r\n \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={labelStyle}>\r\n {field.label}\r\n </span>\r\n )}\r\n <span style={{ width: '100%', textAlign: textTextAlign }}>\r\n <span className=\"idcard-field-value\" style={textStyle}>{String(value || field.placeholder || '')}</span>\r\n </span>\r\n </div>\r\n );\r\n } else {\r\n // For column layout (label on top), let container alignment handle positioning\r\n const labelStyle: React.CSSProperties = { \r\n fontSize: labelFontSize, \r\n fontWeight: labelFontWeight, \r\n color: labelColor, \r\n opacity: 0.7, \r\n textTransform: labelTextTransform,\r\n width: '100%',\r\n textAlign: labelTextAlign\r\n };\r\n \r\n const textStyle: React.CSSProperties = { \r\n textTransform: textTextTransform, \r\n fontSize: textFontSize, \r\n fontWeight: textFontWeight, \r\n color: textColor,\r\n width: '100%',\r\n textAlign: textTextAlign\r\n };\r\n \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={labelStyle}>\r\n {field.label}\r\n </span>\r\n )}\r\n <span className=\"idcard-field-value\" style={textStyle}>{String(value || field.placeholder || '')}</span>\r\n </div>\r\n );\r\n }\r\n }\r\n\r\n case 'label': {\r\n const labelTextTransform = field.style?.labelTextTransform || 'none';\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 <span style={{ textTransform: labelTextTransform }}>{field.staticText || field.label || ''}</span>\r\n </div>\r\n );\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={combinedStyle}\r\n onClick={handleClick}\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 display: 'block',\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\n case 'qrcode':\n const qrDataUrl = field.qrFields?.length\n ? generateQrCodeFromFields(\n data,\n field.qrFields,\n getQrCodeSize(field.position.width, field.position.height)\n )\n : '';\n\n return (\n <div\n key={field.id}\n id={field.id}\n style={combinedStyle}\n onClick={handleClick}\n className=\"idcard-field idcard-field-qrcode\"\n >\n {qrDataUrl ? (\n <img\n src={qrDataUrl}\n alt=\"QR Code\"\n data-qr-code-image=\"true\"\n style={{ width: '100%', height: '100%', display: 'block', backgroundColor: 'transparent' }}\n />\n ) : (\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: Math.round(template.cardSize.width),\r\n height: Math.round(template.cardSize.height),\r\n position: 'relative',\r\n overflow: 'hidden',\r\n backgroundColor: '#fff',\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: `${Math.round(template.cardSize.width)}px`,\r\n height: `${Math.round(template.cardSize.height)}px`,\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\n"],"names":["useMemo","positionToStyle","fieldStyleToCSS","_jsxs","_jsx","generateQrCodeFromFields","getQrCodeSize"],"mappings":"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"}
@@ -103,6 +103,7 @@ const IDCardPreview = ({ template, data, side, scale = 1, showGrid = false, onFi
103
103
  const combinedStyle = {
104
104
  ...posStyle,
105
105
  ...fieldStyle,
106
+ backgroundColor: field.type === 'qrcode' ? 'transparent' : fieldStyle.backgroundColor,
106
107
  zIndex: field.zIndex || 1,
107
108
  boxSizing: 'border-box',
108
109
  overflow: 'hidden',
@@ -218,15 +219,17 @@ const IDCardPreview = ({ template, data, side, scale = 1, showGrid = false, onFi
218
219
  flexDirection: 'column',
219
220
  }, children: [jsxRuntime.jsx("span", { children: "\uD83D\uDCF7" }), jsxRuntime.jsx("span", { children: field.label || 'Photo' })] }));
220
221
  case 'qrcode':
221
- // Use the field's rendered width/height (in px) for QR code size
222
- const qrWidth = Math.max(32, Math.round(field.position.width));
223
- const qrHeight = Math.max(32, Math.round(field.position.height));
224
- // Always generate QR code at the field's current size for smooth scaling
225
- const qrSize = Math.max(qrWidth, qrHeight);
226
- const qrDataUrl = field.qrFields
222
+ const qrSize = qrUtils.getQrCodeSize(field.position.width, field.position.height);
223
+ const qrDataUrl = field.qrFields?.length
227
224
  ? qrUtils.generateQrCodeFromFields(data, field.qrFields, qrSize)
228
225
  : '';
229
- return qrDataUrl ? (jsxRuntime.jsx("img", { src: qrDataUrl, alt: "QR Code", style: { width: '100%', height: '100%', display: 'block', pointerEvents: 'none' } })) : (jsxRuntime.jsx("div", { style: {
226
+ return qrDataUrl ? (jsxRuntime.jsx("img", { src: qrDataUrl, alt: "QR Code", "data-qr-code-image": "true", style: {
227
+ width: '100%',
228
+ height: '100%',
229
+ display: 'block',
230
+ pointerEvents: 'none',
231
+ backgroundColor: 'transparent',
232
+ } })) : (jsxRuntime.jsx("div", { style: {
230
233
  width: '100%',
231
234
  height: '100%',
232
235
  backgroundColor: '#f0f0f0',
@@ -1 +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 let fieldStyle = fieldStyleToCSS(field.style);\r\n const isSelected = field.id === selectedFieldId;\r\n\r\n // Determine flex direction and alignment for text fields\r\n let flexDirection: 'column' | 'row' = 'column';\r\n if (field.type === 'text' && field.style?.labelPosition === 'left') flexDirection = 'row';\r\n\r\n // Map verticalAlign and textAlign to flex properties\r\n let justifyContent: 'flex-start' | 'center' | 'flex-end' = 'flex-start';\r\n let alignItems: 'flex-start' | 'center' | 'flex-end' = 'flex-start';\r\n if (field.type === 'text') {\r\n const textAlign = field.style?.textTextAlign || field.style?.textAlign || 'left';\r\n const verticalAlign = field.style?.verticalAlign || 'top';\r\n \r\n if (flexDirection === 'column') {\r\n // For column: verticalAlign controls justifyContent (vertical), textAlign controls alignItems (horizontal)\r\n if (verticalAlign === 'middle') justifyContent = 'center';\r\n else if (verticalAlign === 'bottom') justifyContent = 'flex-end';\r\n else justifyContent = 'flex-start';\r\n \r\n if (textAlign === 'center') alignItems = 'center';\r\n else if (textAlign === 'right') alignItems = 'flex-end';\r\n else alignItems = 'flex-start';\r\n } else {\r\n // For row: verticalAlign controls alignItems (vertical)\r\n if (verticalAlign === 'middle') alignItems = 'center';\r\n else if (verticalAlign === 'bottom') alignItems = 'flex-end';\r\n else alignItems = 'flex-start';\r\n // justifyContent can be left as default for row\r\n }\r\n }\r\n\r\n // Remove fontSize for label fields so text field font size does not affect them\r\n if (field.type === 'label' && fieldStyle.fontSize) {\r\n const { fontSize, ...rest } = fieldStyle;\r\n fieldStyle = rest;\r\n }\r\n\r\n // Remove textTransform from container for text and label fields - applied directly to spans\r\n if ((field.type === 'text' || field.type === 'label') && fieldStyle.textTransform) {\r\n const { textTransform, ...rest } = fieldStyle;\r\n fieldStyle = rest;\r\n }\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 display: field.type === 'text' ? 'flex' : undefined,\r\n flexDirection: field.type === 'text' ? flexDirection : undefined,\r\n justifyContent: field.type === 'text' ? justifyContent : undefined,\r\n alignItems: field.type === 'text' ? alignItems : undefined,\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\r\n switch (field.type) {\r\n case 'text': {\r\n // Label style properties\r\n // Always use px for label font size, default 12px\r\n let labelFontSize = field.style?.labelFontSize;\r\n if (!labelFontSize || labelFontSize === '0.75em') {\r\n labelFontSize = '12px';\r\n } else if (!labelFontSize.endsWith('px')) {\r\n const num = parseFloat(labelFontSize);\r\n if (!isNaN(num)) labelFontSize = num + 'px';\r\n else labelFontSize = '12px';\r\n }\r\n const labelFontWeight = field.style?.labelFontWeight || 'normal';\r\n const labelColor = field.style?.labelColor || '#666666';\r\n const labelTextTransform = field.style?.labelTextTransform || 'none';\r\n const labelTextAlign = field.style?.labelTextAlign || 'left';\r\n \r\n // Text/value style properties (separate from label)\r\n const textFontSize = field.style?.textFontSize || field.style?.fontSize || '1em';\r\n const textFontWeight = field.style?.textFontWeight || field.style?.fontWeight || 'normal';\r\n const textColor = field.style?.textColor || field.style?.color || '#000000';\r\n const textTextTransform = field.style?.textTransform || 'none';\r\n const textTextAlign = field.style?.textTextAlign || field.style?.textAlign || 'left';\r\n \r\n // For row layout (label on left), use individual span alignment\r\n if (field.style?.labelPosition === 'left') {\r\n let labelAlignSelf: React.CSSProperties['alignSelf'] = 'flex-start';\r\n if (field.style?.labelVerticalAlign === 'middle') labelAlignSelf = 'center';\r\n else if (field.style?.labelVerticalAlign === 'bottom') labelAlignSelf = 'flex-end';\r\n \r\n let textAlignSelf: React.CSSProperties['alignSelf'] = 'flex-start';\r\n if (field.style?.textVerticalAlign === 'middle') textAlignSelf = 'center';\r\n else if (field.style?.textVerticalAlign === 'bottom') textAlignSelf = 'flex-end';\r\n \r\n const labelStyle: React.CSSProperties = { \r\n fontSize: labelFontSize, \r\n fontWeight: labelFontWeight, \r\n color: labelColor, \r\n opacity: 0.7, \r\n marginRight: 8, \r\n alignSelf: labelAlignSelf, \r\n whiteSpace: 'nowrap', \r\n textTransform: labelTextTransform \r\n };\r\n \r\n const textStyle: React.CSSProperties = { \r\n textTransform: textTextTransform, \r\n fontSize: textFontSize, \r\n fontWeight: textFontWeight, \r\n color: textColor, \r\n alignSelf: textAlignSelf\r\n };\r\n \r\n return (\r\n <>\r\n {field.label && (\r\n <span style={labelStyle}>\r\n {field.label}\r\n </span>\r\n )}\r\n <span style={{ width: '100%', textAlign: textTextAlign }}>\r\n <span style={textStyle}>{String(value || field.placeholder || field.fieldKey)}</span>\r\n </span>\r\n </>\r\n );\r\n } else {\r\n // For column layout (label on top), let container alignment handle positioning\r\n const labelStyle: React.CSSProperties = { \r\n fontSize: labelFontSize, \r\n fontWeight: labelFontWeight, \r\n color: labelColor, \r\n opacity: 0.7, \r\n textTransform: labelTextTransform,\r\n width: '100%',\r\n textAlign: labelTextAlign\r\n };\r\n \r\n const textStyle: React.CSSProperties = { \r\n textTransform: textTextTransform, \r\n fontSize: textFontSize, \r\n fontWeight: textFontWeight, \r\n color: textColor,\r\n width: '100%',\r\n textAlign: textTextAlign\r\n };\r\n \r\n return (\r\n <>\r\n {field.label && (\r\n <span style={labelStyle}>\r\n {field.label}\r\n </span>\r\n )}\r\n <span style={textStyle}>{String(value || field.placeholder || field.fieldKey)}</span>\r\n </>\r\n );\r\n }\r\n }\r\n\r\n case 'label': {\r\n const labelTextTransform = field.style?.labelTextTransform || 'none';\r\n return <span style={{ textTransform: labelTextTransform }}>{field.staticText || field.label || 'Label'}</span>;\r\n }\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 display: 'block',\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 // Use the field's rendered width/height (in px) for QR code size\r\n const qrWidth = Math.max(32, Math.round(field.position.width));\r\n const qrHeight = Math.max(32, Math.round(field.position.height));\r\n // Always generate QR code at the field's current size for smooth scaling\r\n const qrSize = Math.max(qrWidth, qrHeight);\r\n const qrDataUrl = field.qrFields\r\n ? generateQrCodeFromFields(data, field.qrFields, qrSize)\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%', display: 'block', pointerEvents: 'none' }}\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: Math.round(template.cardSize.width),\r\n height: Math.round(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 };\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: `${Math.round(template.cardSize.width)}px`,\r\n height: `${Math.round(template.cardSize.height)}px`,\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\n"],"names":["useMemo","_jsx","positionToStyle","fieldStyleToCSS","_jsxs","_Fragment","generateQrCodeFromFields"],"mappings":"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"}
1
+ {"version":3,"file":"IDCardPreview.js","sources":["../../../src/components/IDCardPreview.tsx"],"sourcesContent":["import React, { useMemo } from 'react';\nimport type { IDCardPreviewProps, FieldMapping } from '../types';\nimport { fieldStyleToCSS, positionToStyle } from '../utils/styleUtils';\nimport { generateQrCodeFromFields, getQrCodeSize } from '../core/qrUtils';\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 let fieldStyle = fieldStyleToCSS(field.style);\r\n const isSelected = field.id === selectedFieldId;\r\n\r\n // Determine flex direction and alignment for text fields\r\n let flexDirection: 'column' | 'row' = 'column';\r\n if (field.type === 'text' && field.style?.labelPosition === 'left') flexDirection = 'row';\r\n\r\n // Map verticalAlign and textAlign to flex properties\r\n let justifyContent: 'flex-start' | 'center' | 'flex-end' = 'flex-start';\r\n let alignItems: 'flex-start' | 'center' | 'flex-end' = 'flex-start';\r\n if (field.type === 'text') {\r\n const textAlign = field.style?.textTextAlign || field.style?.textAlign || 'left';\r\n const verticalAlign = field.style?.verticalAlign || 'top';\r\n \r\n if (flexDirection === 'column') {\r\n // For column: verticalAlign controls justifyContent (vertical), textAlign controls alignItems (horizontal)\r\n if (verticalAlign === 'middle') justifyContent = 'center';\r\n else if (verticalAlign === 'bottom') justifyContent = 'flex-end';\r\n else justifyContent = 'flex-start';\r\n \r\n if (textAlign === 'center') alignItems = 'center';\r\n else if (textAlign === 'right') alignItems = 'flex-end';\r\n else alignItems = 'flex-start';\r\n } else {\r\n // For row: verticalAlign controls alignItems (vertical)\r\n if (verticalAlign === 'middle') alignItems = 'center';\r\n else if (verticalAlign === 'bottom') alignItems = 'flex-end';\r\n else alignItems = 'flex-start';\r\n // justifyContent can be left as default for row\r\n }\r\n }\r\n\r\n // Remove fontSize for label fields so text field font size does not affect them\r\n if (field.type === 'label' && fieldStyle.fontSize) {\r\n const { fontSize, ...rest } = fieldStyle;\r\n fieldStyle = rest;\r\n }\r\n\r\n // Remove textTransform from container for text and label fields - applied directly to spans\r\n if ((field.type === 'text' || field.type === 'label') && fieldStyle.textTransform) {\r\n const { textTransform, ...rest } = fieldStyle;\r\n fieldStyle = rest;\r\n }\r\n\r\n const combinedStyle: React.CSSProperties = {\n ...posStyle,\n ...fieldStyle,\n backgroundColor: field.type === 'qrcode' ? 'transparent' : fieldStyle.backgroundColor,\n zIndex: field.zIndex || 1,\n boxSizing: 'border-box',\n overflow: 'hidden',\n cursor: editable ? 'move' : 'default',\r\n outline: isSelected ? '2px solid #2196F3' : 'none',\r\n outlineOffset: '1px',\r\n display: field.type === 'text' ? 'flex' : undefined,\r\n flexDirection: field.type === 'text' ? flexDirection : undefined,\r\n justifyContent: field.type === 'text' ? justifyContent : undefined,\r\n alignItems: field.type === 'text' ? alignItems : undefined,\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\r\n switch (field.type) {\r\n case 'text': {\r\n // Label style properties\r\n // Always use px for label font size, default 12px\r\n let labelFontSize = field.style?.labelFontSize;\r\n if (!labelFontSize || labelFontSize === '0.75em') {\r\n labelFontSize = '12px';\r\n } else if (!labelFontSize.endsWith('px')) {\r\n const num = parseFloat(labelFontSize);\r\n if (!isNaN(num)) labelFontSize = num + 'px';\r\n else labelFontSize = '12px';\r\n }\r\n const labelFontWeight = field.style?.labelFontWeight || 'normal';\r\n const labelColor = field.style?.labelColor || '#666666';\r\n const labelTextTransform = field.style?.labelTextTransform || 'none';\r\n const labelTextAlign = field.style?.labelTextAlign || 'left';\r\n \r\n // Text/value style properties (separate from label)\r\n const textFontSize = field.style?.textFontSize || field.style?.fontSize || '1em';\r\n const textFontWeight = field.style?.textFontWeight || field.style?.fontWeight || 'normal';\r\n const textColor = field.style?.textColor || field.style?.color || '#000000';\r\n const textTextTransform = field.style?.textTransform || 'none';\r\n const textTextAlign = field.style?.textTextAlign || field.style?.textAlign || 'left';\r\n \r\n // For row layout (label on left), use individual span alignment\r\n if (field.style?.labelPosition === 'left') {\r\n let labelAlignSelf: React.CSSProperties['alignSelf'] = 'flex-start';\r\n if (field.style?.labelVerticalAlign === 'middle') labelAlignSelf = 'center';\r\n else if (field.style?.labelVerticalAlign === 'bottom') labelAlignSelf = 'flex-end';\r\n \r\n let textAlignSelf: React.CSSProperties['alignSelf'] = 'flex-start';\r\n if (field.style?.textVerticalAlign === 'middle') textAlignSelf = 'center';\r\n else if (field.style?.textVerticalAlign === 'bottom') textAlignSelf = 'flex-end';\r\n \r\n const labelStyle: React.CSSProperties = { \r\n fontSize: labelFontSize, \r\n fontWeight: labelFontWeight, \r\n color: labelColor, \r\n opacity: 0.7, \r\n marginRight: 8, \r\n alignSelf: labelAlignSelf, \r\n whiteSpace: 'nowrap', \r\n textTransform: labelTextTransform \r\n };\r\n \r\n const textStyle: React.CSSProperties = { \r\n textTransform: textTextTransform, \r\n fontSize: textFontSize, \r\n fontWeight: textFontWeight, \r\n color: textColor, \r\n alignSelf: textAlignSelf\r\n };\r\n \r\n return (\r\n <>\r\n {field.label && (\r\n <span style={labelStyle}>\r\n {field.label}\r\n </span>\r\n )}\r\n <span style={{ width: '100%', textAlign: textTextAlign }}>\r\n <span style={textStyle}>{String(value || field.placeholder || field.fieldKey)}</span>\r\n </span>\r\n </>\r\n );\r\n } else {\r\n // For column layout (label on top), let container alignment handle positioning\r\n const labelStyle: React.CSSProperties = { \r\n fontSize: labelFontSize, \r\n fontWeight: labelFontWeight, \r\n color: labelColor, \r\n opacity: 0.7, \r\n textTransform: labelTextTransform,\r\n width: '100%',\r\n textAlign: labelTextAlign\r\n };\r\n \r\n const textStyle: React.CSSProperties = { \r\n textTransform: textTextTransform, \r\n fontSize: textFontSize, \r\n fontWeight: textFontWeight, \r\n color: textColor,\r\n width: '100%',\r\n textAlign: textTextAlign\r\n };\r\n \r\n return (\r\n <>\r\n {field.label && (\r\n <span style={labelStyle}>\r\n {field.label}\r\n </span>\r\n )}\r\n <span style={textStyle}>{String(value || field.placeholder || field.fieldKey)}</span>\r\n </>\r\n );\r\n }\r\n }\r\n\r\n case 'label': {\r\n const labelTextTransform = field.style?.labelTextTransform || 'none';\r\n return <span style={{ textTransform: labelTextTransform }}>{field.staticText || field.label || 'Label'}</span>;\r\n }\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 display: 'block',\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\n case 'qrcode':\n const qrSize = getQrCodeSize(field.position.width, field.position.height);\n const qrDataUrl = field.qrFields?.length\n ? generateQrCodeFromFields(data, field.qrFields, qrSize)\n : '';\n\r\n return qrDataUrl ? (\r\n <img\n src={qrDataUrl}\n alt=\"QR Code\"\n data-qr-code-image=\"true\"\n style={{\n width: '100%',\n height: '100%',\n display: 'block',\n pointerEvents: 'none',\n backgroundColor: 'transparent',\n }}\n />\n ) : (\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: Math.round(template.cardSize.width),\r\n height: Math.round(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 };\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: `${Math.round(template.cardSize.width)}px`,\r\n height: `${Math.round(template.cardSize.height)}px`,\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\n"],"names":["useMemo","_jsx","positionToStyle","fieldStyleToCSS","_jsxs","_Fragment","getQrCodeSize","generateQrCodeFromFields"],"mappings":"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"}
@@ -15,6 +15,21 @@ const defaultCanvasOptions = {
15
15
  backgroundColor: '#ffffff', // White background to prevent black screen
16
16
  foreignObjectRendering: false, // Disable foreign object rendering for better compatibility
17
17
  };
18
+ function refreshQrCodeForExport(qrElementId, data, qrFields, scale) {
19
+ if (!qrElementId || !data || !qrFields || qrFields.length === 0) {
20
+ return;
21
+ }
22
+ const qrElement = document.getElementById(qrElementId);
23
+ const qrRect = qrElement?.getBoundingClientRect();
24
+ const qrSize = qrRect
25
+ ? qrUtils.getQrCodeSize(qrRect.width, qrRect.height, scale)
26
+ : qrUtils.getQrCodeSize(0, 0, scale);
27
+ const qrData = qrUtils.getQrCodeDataFromFields(data, qrFields);
28
+ if (Object.keys(qrData).length === 0) {
29
+ return;
30
+ }
31
+ qrUtils.setQrCodeOnElement(qrElementId, qrData, qrSize);
32
+ }
18
33
  /**
19
34
  * Capture a DOM element as a high-resolution canvas
20
35
  * Uses html2canvas to convert the element to an image
@@ -61,16 +76,7 @@ async function captureElement(elementId, scale = 2) {
61
76
  async function downloadIDCardAsPDF(options) {
62
77
  try {
63
78
  const { frontElementId = 'idcardfront', backElementId, filename = 'ID_Card', data, qrElementId, qrFields, scale = 10, } = options;
64
- // Generate QR code if configured
65
- if (qrElementId && data && qrFields && qrFields.length > 0) {
66
- const qrData = {};
67
- for (const field of qrFields) {
68
- if (data[field] !== undefined) {
69
- qrData[field] = data[field];
70
- }
71
- }
72
- qrUtils.setQrCodeOnElement(qrElementId, qrData, 200);
73
- }
79
+ refreshQrCodeForExport(qrElementId, data, qrFields, scale);
74
80
  // Wait for QR code and any images to fully render
75
81
  await new Promise((resolve) => setTimeout(resolve, 100));
76
82
  const pages = [];
@@ -128,16 +134,7 @@ async function downloadIDCardAsPDF(options) {
128
134
  async function downloadIDCardAsImage(options) {
129
135
  try {
130
136
  const { frontElementId = 'idcardfront', filename = 'ID_Card', data, qrElementId, qrFields, format = 'png', scale = 2, quality = 1.0, } = options;
131
- // Generate QR code if needed
132
- if (qrElementId && data && qrFields && qrFields.length > 0) {
133
- const qrData = {};
134
- for (const field of qrFields) {
135
- if (data[field] !== undefined) {
136
- qrData[field] = data[field];
137
- }
138
- }
139
- qrUtils.setQrCodeOnElement(qrElementId, qrData, 200);
140
- }
137
+ refreshQrCodeForExport(qrElementId, data, qrFields, scale);
141
138
  await new Promise((resolve) => setTimeout(resolve, 100));
142
139
  const capture = await captureElement(frontElementId, scale);
143
140
  if (!capture) {
@@ -1 +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: 2, // 2x resolution for good quality without precision issues\r\n imageTimeout: 15000,\r\n letterRendering: true,\r\n logging: false,\r\n useCORS: true, // Allow cross-origin images\r\n allowTaint: true, // Allow cross-origin images to taint canvas\r\n backgroundColor: '#ffffff', // White background to prevent black screen\r\n foreignObjectRendering: false, // Disable foreign object rendering for better compatibility\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 * Captures the element directly as rendered on screen to preserve exact positioning\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 = 2\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 // Get actual rendered dimensions\r\n const rect = element.getBoundingClientRect();\r\n \r\n // Wait for images to load\r\n const images = element.querySelectorAll('img');\r\n await Promise.all(\r\n Array.from(images).map(\r\n (img) =>\r\n new Promise<void>((resolve) => {\r\n if (img.complete) {\r\n resolve();\r\n } else {\r\n img.onload = () => resolve();\r\n img.onerror = () => resolve();\r\n }\r\n })\r\n )\r\n );\r\n \r\n // Small delay to ensure styles are applied\r\n await new Promise((resolve) => setTimeout(resolve, 100));\r\n \r\n // Capture the element directly as it appears on screen\r\n // This preserves all styling exactly as rendered\r\n const canvas = await html2canvas(element, {\r\n ...defaultCanvasOptions,\r\n scale,\r\n width: rect.width,\r\n height: rect.height,\r\n windowWidth: element.scrollWidth,\r\n windowHeight: element.scrollHeight,\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 // Use getBoundingClientRect for accurate dimensions\r\n const rect = element.getBoundingClientRect();\r\n const pdfWidth = rect.width; // Convert px to mm\r\n const pdfHeight = rect.height;\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 = 2,\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}"],"names":["setQrCodeOnElement"],"mappings":"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"}
1
+ {"version":3,"file":"exportUtils.js","sources":["../../../src/core/exportUtils.ts"],"sourcesContent":["import html2canvas from 'html2canvas';\nimport jsPDF from 'jspdf';\nimport type { ExportOptions, ExportResult, IDCardData } from '../types';\nimport { getQrCodeDataFromFields, getQrCodeSize, setQrCodeOnElement } from './qrUtils';\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 = {\n scale: 2, // 2x resolution for good quality without precision issues\r\n imageTimeout: 15000,\r\n letterRendering: true,\r\n logging: false,\r\n useCORS: true, // Allow cross-origin images\r\n allowTaint: true, // Allow cross-origin images to taint canvas\r\n backgroundColor: '#ffffff', // White background to prevent black screen\r\n foreignObjectRendering: false, // Disable foreign object rendering for better compatibility\n};\n\nfunction refreshQrCodeForExport(\n qrElementId: string | undefined,\n data: IDCardData | undefined,\n qrFields: string[] | undefined,\n scale: number\n): void {\n if (!qrElementId || !data || !qrFields || qrFields.length === 0) {\n return;\n }\n\n const qrElement = document.getElementById(qrElementId);\n const qrRect = qrElement?.getBoundingClientRect();\n const qrSize = qrRect\n ? getQrCodeSize(qrRect.width, qrRect.height, scale)\n : getQrCodeSize(0, 0, scale);\n const qrData = getQrCodeDataFromFields(data, qrFields);\n\n if (Object.keys(qrData).length === 0) {\n return;\n }\n\n setQrCodeOnElement(\n qrElementId,\n qrData,\n qrSize\n );\n}\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 * Captures the element directly as rendered on screen to preserve exact positioning\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 = 2\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 // Get actual rendered dimensions\r\n const rect = element.getBoundingClientRect();\r\n \r\n // Wait for images to load\r\n const images = element.querySelectorAll('img');\r\n await Promise.all(\r\n Array.from(images).map(\r\n (img) =>\r\n new Promise<void>((resolve) => {\r\n if (img.complete) {\r\n resolve();\r\n } else {\r\n img.onload = () => resolve();\r\n img.onerror = () => resolve();\r\n }\r\n })\r\n )\r\n );\r\n \r\n // Small delay to ensure styles are applied\r\n await new Promise((resolve) => setTimeout(resolve, 100));\r\n \r\n // Capture the element directly as it appears on screen\r\n // This preserves all styling exactly as rendered\r\n const canvas = await html2canvas(element, {\r\n ...defaultCanvasOptions,\r\n scale,\r\n width: rect.width,\r\n height: rect.height,\r\n windowWidth: element.scrollWidth,\r\n windowHeight: element.scrollHeight,\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 refreshQrCodeForExport(qrElementId, data, qrFields, scale);\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 // Use getBoundingClientRect for accurate dimensions\r\n const rect = element.getBoundingClientRect();\r\n const pdfWidth = rect.width; // Convert px to mm\r\n const pdfHeight = rect.height;\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 = 2,\r\n quality = 1.0,\r\n } = options;\r\n\r\n refreshQrCodeForExport(qrElementId, data, qrFields, scale);\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}\n"],"names":["getQrCodeSize","getQrCodeDataFromFields","setQrCodeOnElement"],"mappings":"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"}
@@ -2,6 +2,48 @@
2
2
 
3
3
  var qrious = require('../_virtual/qrious.js');
4
4
 
5
+ const DEFAULT_QR_SIZE = 200;
6
+ const MIN_QR_SIZE = 32;
7
+ function normalizeQrScale(scale = 1) {
8
+ return Number.isFinite(scale) && scale > 0 ? scale : 1;
9
+ }
10
+ function resolveQrTargetElement(elementId, container) {
11
+ if (container instanceof HTMLElement) {
12
+ if (container.id === elementId) {
13
+ return container;
14
+ }
15
+ return container.querySelector(`#${elementId}`);
16
+ }
17
+ return container.getElementById(elementId);
18
+ }
19
+ function resolveQrImageElement(targetElement) {
20
+ if (!targetElement) {
21
+ return null;
22
+ }
23
+ if (targetElement instanceof HTMLImageElement) {
24
+ return targetElement;
25
+ }
26
+ return targetElement.querySelector('img[data-qr-code-image="true"], img');
27
+ }
28
+ function hasQrFieldValue(value) {
29
+ if (value === undefined) {
30
+ return false;
31
+ }
32
+ if (typeof value === 'string') {
33
+ return value.trim().length > 0;
34
+ }
35
+ if (Array.isArray(value)) {
36
+ return value.some((item) => String(item).trim().length > 0);
37
+ }
38
+ return true;
39
+ }
40
+ function getQrCodeSize(width, height = width, scale = 1) {
41
+ const scaledBaseSize = Math.max(Number.isFinite(width) ? width : 0, Number.isFinite(height) ? height : 0);
42
+ if (scaledBaseSize <= 0) {
43
+ return Math.max(MIN_QR_SIZE, Math.round(DEFAULT_QR_SIZE * normalizeQrScale(scale)));
44
+ }
45
+ return Math.max(MIN_QR_SIZE, Math.round(scaledBaseSize * normalizeQrScale(scale)));
46
+ }
5
47
  /**
6
48
  * Generate a QR code as a base64 data URL
7
49
  * @param data - Data to encode in the QR code (will be JSON stringified)
@@ -9,14 +51,16 @@ var qrious = require('../_virtual/qrious.js');
9
51
  * @param options - Customization options (error correction level, colors, etc.)
10
52
  * @returns Base64 PNG data URL
11
53
  */
12
- function generateQrCodeDataURL(data, size = 200, options) {
54
+ function generateQrCodeDataURL(data, size = DEFAULT_QR_SIZE, options) {
55
+ const background = options?.background ?? 'transparent';
56
+ const isTransparentBackground = background === 'transparent';
13
57
  const qr = new qrious({
14
58
  value: JSON.stringify(data),
15
59
  size,
16
60
  level: options?.level || 'H', // High error correction by default
17
61
  padding: options?.padding ?? 0,
18
- background: options?.background || 'white',
19
- backgroundAlpha: 1,
62
+ background,
63
+ backgroundAlpha: isTransparentBackground ? 0 : 1,
20
64
  foreground: options?.foreground || 'black',
21
65
  foregroundAlpha: 1,
22
66
  });
@@ -30,29 +74,41 @@ function generateQrCodeDataURL(data, size = 200, options) {
30
74
  * @param size - QR code size in pixels
31
75
  * @returns Base64 PNG data URL
32
76
  */
33
- function generateQrCodeFromFields(data, fields, size = 200) {
34
- // Build object with only the specified fields
77
+ function generateQrCodeFromFields(data, fields, size = DEFAULT_QR_SIZE) {
78
+ const qrData = getQrCodeDataFromFields(data, fields);
79
+ if (Object.keys(qrData).length === 0) {
80
+ return '';
81
+ }
82
+ return generateQrCodeDataURL(qrData, size);
83
+ }
84
+ function getQrCodeDataFromFields(data, fields) {
85
+ // Build object with only the specified fields that actually contain data
35
86
  const qrData = {};
36
87
  for (const field of fields) {
37
- if (data[field] !== undefined) {
38
- qrData[field] = data[field];
88
+ const value = data[field];
89
+ if (hasQrFieldValue(value)) {
90
+ qrData[field] = value;
39
91
  }
40
92
  }
41
- return generateQrCodeDataURL(qrData, size);
93
+ return qrData;
42
94
  }
43
95
  /**
44
96
  * Set QR code image src on a DOM element
45
97
  */
46
- function setQrCodeOnElement(elementId, data, size = 200, container = document) {
98
+ function setQrCodeOnElement(elementId, data, size = DEFAULT_QR_SIZE, container = document) {
47
99
  const qrDataURL = generateQrCodeDataURL(data, size);
48
- const imgTag = (container === document
49
- ? document.getElementById(elementId)
50
- : container.querySelector(`#${elementId}`));
100
+ const targetElement = resolveQrTargetElement(elementId, container);
101
+ const imgTag = resolveQrImageElement(targetElement);
51
102
  if (imgTag) {
52
103
  imgTag.setAttribute('src', qrDataURL);
104
+ imgTag.setAttribute('data-qr-code-image', 'true');
53
105
  imgTag.style.display = 'block';
54
106
  imgTag.style.opacity = '1';
55
107
  imgTag.style.visibility = 'visible';
108
+ imgTag.style.backgroundColor = 'transparent';
109
+ if (targetElement) {
110
+ targetElement.style.backgroundColor = 'transparent';
111
+ }
56
112
  return true;
57
113
  }
58
114
  return false;
@@ -60,5 +116,7 @@ function setQrCodeOnElement(elementId, data, size = 200, container = document) {
60
116
 
61
117
  exports.generateQrCodeDataURL = generateQrCodeDataURL;
62
118
  exports.generateQrCodeFromFields = generateQrCodeFromFields;
119
+ exports.getQrCodeDataFromFields = getQrCodeDataFromFields;
120
+ exports.getQrCodeSize = getQrCodeSize;
63
121
  exports.setQrCodeOnElement = setQrCodeOnElement;
64
122
  //# sourceMappingURL=qrUtils.js.map
@@ -1 +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":["QRious"],"mappings":";;;;AAGA;;;;;;AAMG;AACG,SAAU,qBAAqB,CACnC,IAA6B,EAC7B,IAAI,GAAG,GAAG,EACV,OAKC,EAAA;AAED,IAAA,MAAM,EAAE,GAAG,IAAKA,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;;;;;;"}
1
+ {"version":3,"file":"qrUtils.js","sources":["../../../src/core/qrUtils.ts"],"sourcesContent":["import QRious from 'qrious';\nimport type { IDCardData } from '../types';\n\nconst DEFAULT_QR_SIZE = 200;\nconst MIN_QR_SIZE = 32;\n\nfunction normalizeQrScale(scale = 1): number {\n return Number.isFinite(scale) && scale > 0 ? scale : 1;\n}\n\nfunction resolveQrTargetElement(\n elementId: string,\n container: Document | HTMLElement\n): HTMLElement | null {\n if (container instanceof HTMLElement) {\n if (container.id === elementId) {\n return container;\n }\n\n return container.querySelector<HTMLElement>(`#${elementId}`);\n }\n\n return container.getElementById(elementId);\n}\n\nfunction resolveQrImageElement(targetElement: HTMLElement | null): HTMLImageElement | null {\n if (!targetElement) {\n return null;\n }\n\n if (targetElement instanceof HTMLImageElement) {\n return targetElement;\n }\n\n return targetElement.querySelector<HTMLImageElement>('img[data-qr-code-image=\"true\"], img');\n}\n\nfunction hasQrFieldValue(value: IDCardData[string]): boolean {\n if (value === undefined) {\n return false;\n }\n\n if (typeof value === 'string') {\n return value.trim().length > 0;\n }\n\n if (Array.isArray(value)) {\n return value.some((item) => String(item).trim().length > 0);\n }\n\n return true;\n}\n\nexport function getQrCodeSize(\n width: number,\n height = width,\n scale = 1\n): number {\n const scaledBaseSize = Math.max(\n Number.isFinite(width) ? width : 0,\n Number.isFinite(height) ? height : 0\n );\n\n if (scaledBaseSize <= 0) {\n return Math.max(MIN_QR_SIZE, Math.round(DEFAULT_QR_SIZE * normalizeQrScale(scale)));\n }\n\n return Math.max(MIN_QR_SIZE, Math.round(scaledBaseSize * normalizeQrScale(scale)));\n}\n\n/**\n * Generate a QR code as a base64 data URL\n * @param data - Data to encode in the QR code (will be JSON stringified)\n * @param size - QR code size in pixels\n * @param options - Customization options (error correction level, colors, etc.)\r\n * @returns Base64 PNG data URL\r\n */\r\nexport function generateQrCodeDataURL(\n data: Record<string, unknown>,\n size = DEFAULT_QR_SIZE,\n options?: {\n level?: 'L' | 'M' | 'Q' | 'H'; // Error correction level\n padding?: number;\n background?: string;\n foreground?: string;\n }\n): string {\n const background = options?.background ?? 'transparent';\n const isTransparentBackground = background === 'transparent';\n const qr = new (QRious as any)({\n value: JSON.stringify(data),\n size,\n level: options?.level || 'H', // High error correction by default\n padding: options?.padding ?? 0,\n background,\n backgroundAlpha: isTransparentBackground ? 0 : 1,\n foreground: options?.foreground || 'black',\n foregroundAlpha: 1,\n });\n return qr.toDataURL('image/png');\n}\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(\n data: IDCardData,\n fields: string[],\n size = DEFAULT_QR_SIZE\n): string {\n const qrData = getQrCodeDataFromFields(data, fields);\n if (Object.keys(qrData).length === 0) {\n return '';\n }\n\n return generateQrCodeDataURL(qrData, size);\n}\n\nexport function getQrCodeDataFromFields(\n data: IDCardData,\n fields: string[]\n): Record<string, unknown> {\n // Build object with only the specified fields that actually contain data\n const qrData: Record<string, unknown> = {};\n\n for (const field of fields) {\n const value = data[field];\n if (hasQrFieldValue(value)) {\n qrData[field] = value;\n }\n }\n\n return qrData;\n}\n\r\n/**\r\n * Set QR code image src on a DOM element\r\n */\r\nexport function setQrCodeOnElement(\n elementId: string,\n data: Record<string, unknown>,\n size = DEFAULT_QR_SIZE,\n container: Document | HTMLElement = document\n): boolean {\n const qrDataURL = generateQrCodeDataURL(data, size);\n const targetElement = resolveQrTargetElement(elementId, container);\n const imgTag = resolveQrImageElement(targetElement);\n\n if (imgTag) {\n imgTag.setAttribute('src', qrDataURL);\n imgTag.setAttribute('data-qr-code-image', 'true');\n imgTag.style.display = 'block';\n imgTag.style.opacity = '1';\n imgTag.style.visibility = 'visible';\n imgTag.style.backgroundColor = 'transparent';\n if (targetElement) {\n targetElement.style.backgroundColor = 'transparent';\n }\n return true;\n }\n return false;\n}\n"],"names":["QRious"],"mappings":"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"}
@@ -81,7 +81,7 @@ const defaultFieldStyles = {
81
81
  },
82
82
  image: {},
83
83
  qrcode: {
84
- backgroundColor: '#ffffff',
84
+ backgroundColor: 'transparent',
85
85
  },
86
86
  };
87
87
  /**