@pdfme/schemas 5.5.10-dev.13 → 5.5.10-dev.134

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 (399) hide show
  1. package/package.json +44 -60
  2. package/src/barcodes/helper.ts +2 -2
  3. package/src/barcodes/types.ts +2 -2
  4. package/src/builtins.ts +8 -0
  5. package/src/date/helper.ts +118 -70
  6. package/src/graphics/image.ts +3 -3
  7. package/src/graphics/signature.ts +136 -0
  8. package/src/index.ts +4 -4
  9. package/src/multiVariableText/propPanel.ts +17 -8
  10. package/src/multiVariableText/types.ts +2 -2
  11. package/src/multiVariableText/uiRender.ts +18 -31
  12. package/src/multiVariableText/variables.ts +63 -0
  13. package/src/shapes/rectAndEllipse.ts +2 -2
  14. package/src/tables/tableHelper.ts +3 -2
  15. package/src/tables/types.ts +2 -2
  16. package/src/tables/uiRender.ts +1 -1
  17. package/src/tables.ts +1 -0
  18. package/src/text/helper.ts +22 -5
  19. package/src/text/pdfRender.ts +2 -5
  20. package/src/text/types.ts +2 -2
  21. package/src/utils.ts +87 -14
  22. package/tsconfig.build.json +14 -0
  23. package/tsconfig.json +14 -4
  24. package/vite.config.mts +51 -0
  25. package/dist/cjs/__tests__/barcode.test.js +0 -354
  26. package/dist/cjs/__tests__/barcode.test.js.map +0 -1
  27. package/dist/cjs/__tests__/multiVariableText.test.js +0 -102
  28. package/dist/cjs/__tests__/multiVariableText.test.js.map +0 -1
  29. package/dist/cjs/__tests__/text.test.js +0 -419
  30. package/dist/cjs/__tests__/text.test.js.map +0 -1
  31. package/dist/cjs/__tests__/utils.test.js +0 -193
  32. package/dist/cjs/__tests__/utils.test.js.map +0 -1
  33. package/dist/cjs/src/barcodes/constants.js +0 -21
  34. package/dist/cjs/src/barcodes/constants.js.map +0 -1
  35. package/dist/cjs/src/barcodes/helper.js +0 -161
  36. package/dist/cjs/src/barcodes/helper.js.map +0 -1
  37. package/dist/cjs/src/barcodes/index.js +0 -18
  38. package/dist/cjs/src/barcodes/index.js.map +0 -1
  39. package/dist/cjs/src/barcodes/pdfRender.js +0 -29
  40. package/dist/cjs/src/barcodes/pdfRender.js.map +0 -1
  41. package/dist/cjs/src/barcodes/propPanel.js +0 -241
  42. package/dist/cjs/src/barcodes/propPanel.js.map +0 -1
  43. package/dist/cjs/src/barcodes/types.js +0 -3
  44. package/dist/cjs/src/barcodes/types.js.map +0 -1
  45. package/dist/cjs/src/barcodes/uiRender.js +0 -91
  46. package/dist/cjs/src/barcodes/uiRender.js.map +0 -1
  47. package/dist/cjs/src/checkbox/index.js +0 -62
  48. package/dist/cjs/src/checkbox/index.js.map +0 -1
  49. package/dist/cjs/src/constants.js +0 -6
  50. package/dist/cjs/src/constants.js.map +0 -1
  51. package/dist/cjs/src/date/date.js +0 -9
  52. package/dist/cjs/src/date/date.js.map +0 -1
  53. package/dist/cjs/src/date/dateTime.js +0 -9
  54. package/dist/cjs/src/date/dateTime.js.map +0 -1
  55. package/dist/cjs/src/date/helper.js +0 -462
  56. package/dist/cjs/src/date/helper.js.map +0 -1
  57. package/dist/cjs/src/date/time.js +0 -9
  58. package/dist/cjs/src/date/time.js.map +0 -1
  59. package/dist/cjs/src/date/types.js +0 -3
  60. package/dist/cjs/src/date/types.js.map +0 -1
  61. package/dist/cjs/src/graphics/image.js +0 -172
  62. package/dist/cjs/src/graphics/image.js.map +0 -1
  63. package/dist/cjs/src/graphics/imagehelper.js +0 -124
  64. package/dist/cjs/src/graphics/imagehelper.js.map +0 -1
  65. package/dist/cjs/src/graphics/svg.js +0 -112
  66. package/dist/cjs/src/graphics/svg.js.map +0 -1
  67. package/dist/cjs/src/index.js +0 -41
  68. package/dist/cjs/src/index.js.map +0 -1
  69. package/dist/cjs/src/multiVariableText/helper.js +0 -55
  70. package/dist/cjs/src/multiVariableText/helper.js.map +0 -1
  71. package/dist/cjs/src/multiVariableText/index.js +0 -16
  72. package/dist/cjs/src/multiVariableText/index.js.map +0 -1
  73. package/dist/cjs/src/multiVariableText/pdfRender.js +0 -20
  74. package/dist/cjs/src/multiVariableText/pdfRender.js.map +0 -1
  75. package/dist/cjs/src/multiVariableText/propPanel.js +0 -148
  76. package/dist/cjs/src/multiVariableText/propPanel.js.map +0 -1
  77. package/dist/cjs/src/multiVariableText/types.js +0 -3
  78. package/dist/cjs/src/multiVariableText/types.js.map +0 -1
  79. package/dist/cjs/src/multiVariableText/uiRender.js +0 -146
  80. package/dist/cjs/src/multiVariableText/uiRender.js.map +0 -1
  81. package/dist/cjs/src/radioGroup/index.js +0 -93
  82. package/dist/cjs/src/radioGroup/index.js.map +0 -1
  83. package/dist/cjs/src/sanitize.js +0 -57
  84. package/dist/cjs/src/sanitize.js.map +0 -1
  85. package/dist/cjs/src/select/index.js +0 -175
  86. package/dist/cjs/src/select/index.js.map +0 -1
  87. package/dist/cjs/src/shapes/line.js +0 -76
  88. package/dist/cjs/src/shapes/line.js.map +0 -1
  89. package/dist/cjs/src/shapes/rectAndEllipse.js +0 -140
  90. package/dist/cjs/src/shapes/rectAndEllipse.js.map +0 -1
  91. package/dist/cjs/src/tables/cell.js +0 -126
  92. package/dist/cjs/src/tables/cell.js.map +0 -1
  93. package/dist/cjs/src/tables/classes.js +0 -467
  94. package/dist/cjs/src/tables/classes.js.map +0 -1
  95. package/dist/cjs/src/tables/dynamicTemplate.js +0 -66
  96. package/dist/cjs/src/tables/dynamicTemplate.js.map +0 -1
  97. package/dist/cjs/src/tables/helper.js +0 -189
  98. package/dist/cjs/src/tables/helper.js.map +0 -1
  99. package/dist/cjs/src/tables/index.js +0 -15
  100. package/dist/cjs/src/tables/index.js.map +0 -1
  101. package/dist/cjs/src/tables/pdfRender.js +0 -109
  102. package/dist/cjs/src/tables/pdfRender.js.map +0 -1
  103. package/dist/cjs/src/tables/propPanel.js +0 -108
  104. package/dist/cjs/src/tables/propPanel.js.map +0 -1
  105. package/dist/cjs/src/tables/tableHelper.js +0 -200
  106. package/dist/cjs/src/tables/tableHelper.js.map +0 -1
  107. package/dist/cjs/src/tables/types.js +0 -3
  108. package/dist/cjs/src/tables/types.js.map +0 -1
  109. package/dist/cjs/src/tables/uiRender.js +0 -368
  110. package/dist/cjs/src/tables/uiRender.js.map +0 -1
  111. package/dist/cjs/src/text/constants.js +0 -97
  112. package/dist/cjs/src/text/constants.js.map +0 -1
  113. package/dist/cjs/src/text/extraFormatter.js +0 -49
  114. package/dist/cjs/src/text/extraFormatter.js.map +0 -1
  115. package/dist/cjs/src/text/helper.js +0 -504
  116. package/dist/cjs/src/text/helper.js.map +0 -1
  117. package/dist/cjs/src/text/icons/index.js +0 -16
  118. package/dist/cjs/src/text/icons/index.js.map +0 -1
  119. package/dist/cjs/src/text/index.js +0 -15
  120. package/dist/cjs/src/text/index.js.map +0 -1
  121. package/dist/cjs/src/text/pdfRender.js +0 -170
  122. package/dist/cjs/src/text/pdfRender.js.map +0 -1
  123. package/dist/cjs/src/text/propPanel.js +0 -161
  124. package/dist/cjs/src/text/propPanel.js.map +0 -1
  125. package/dist/cjs/src/text/types.js +0 -3
  126. package/dist/cjs/src/text/types.js.map +0 -1
  127. package/dist/cjs/src/text/uiRender.js +0 -231
  128. package/dist/cjs/src/text/uiRender.js.map +0 -1
  129. package/dist/cjs/src/utils.js +0 -230
  130. package/dist/cjs/src/utils.js.map +0 -1
  131. package/dist/esm/__tests__/barcode.test.js +0 -349
  132. package/dist/esm/__tests__/barcode.test.js.map +0 -1
  133. package/dist/esm/__tests__/multiVariableText.test.js +0 -100
  134. package/dist/esm/__tests__/multiVariableText.test.js.map +0 -1
  135. package/dist/esm/__tests__/text.test.js +0 -384
  136. package/dist/esm/__tests__/text.test.js.map +0 -1
  137. package/dist/esm/__tests__/utils.test.js +0 -191
  138. package/dist/esm/__tests__/utils.test.js.map +0 -1
  139. package/dist/esm/src/barcodes/constants.js +0 -18
  140. package/dist/esm/src/barcodes/constants.js.map +0 -1
  141. package/dist/esm/src/barcodes/helper.js +0 -151
  142. package/dist/esm/src/barcodes/helper.js.map +0 -1
  143. package/dist/esm/src/barcodes/index.js +0 -16
  144. package/dist/esm/src/barcodes/index.js.map +0 -1
  145. package/dist/esm/src/barcodes/pdfRender.js +0 -25
  146. package/dist/esm/src/barcodes/pdfRender.js.map +0 -1
  147. package/dist/esm/src/barcodes/propPanel.js +0 -237
  148. package/dist/esm/src/barcodes/propPanel.js.map +0 -1
  149. package/dist/esm/src/barcodes/types.js +0 -2
  150. package/dist/esm/src/barcodes/types.js.map +0 -1
  151. package/dist/esm/src/barcodes/uiRender.js +0 -87
  152. package/dist/esm/src/barcodes/uiRender.js.map +0 -1
  153. package/dist/esm/src/checkbox/index.js +0 -57
  154. package/dist/esm/src/checkbox/index.js.map +0 -1
  155. package/dist/esm/src/constants.js +0 -3
  156. package/dist/esm/src/constants.js.map +0 -1
  157. package/dist/esm/src/date/date.js +0 -7
  158. package/dist/esm/src/date/date.js.map +0 -1
  159. package/dist/esm/src/date/dateTime.js +0 -7
  160. package/dist/esm/src/date/dateTime.js.map +0 -1
  161. package/dist/esm/src/date/helper.js +0 -422
  162. package/dist/esm/src/date/helper.js.map +0 -1
  163. package/dist/esm/src/date/time.js +0 -7
  164. package/dist/esm/src/date/time.js.map +0 -1
  165. package/dist/esm/src/date/types.js +0 -2
  166. package/dist/esm/src/date/types.js.map +0 -1
  167. package/dist/esm/src/graphics/image.js +0 -170
  168. package/dist/esm/src/graphics/image.js.map +0 -1
  169. package/dist/esm/src/graphics/imagehelper.js +0 -120
  170. package/dist/esm/src/graphics/imagehelper.js.map +0 -1
  171. package/dist/esm/src/graphics/svg.js +0 -110
  172. package/dist/esm/src/graphics/svg.js.map +0 -1
  173. package/dist/esm/src/index.js +0 -21
  174. package/dist/esm/src/index.js.map +0 -1
  175. package/dist/esm/src/multiVariableText/helper.js +0 -50
  176. package/dist/esm/src/multiVariableText/helper.js.map +0 -1
  177. package/dist/esm/src/multiVariableText/index.js +0 -14
  178. package/dist/esm/src/multiVariableText/index.js.map +0 -1
  179. package/dist/esm/src/multiVariableText/pdfRender.js +0 -16
  180. package/dist/esm/src/multiVariableText/pdfRender.js.map +0 -1
  181. package/dist/esm/src/multiVariableText/propPanel.js +0 -145
  182. package/dist/esm/src/multiVariableText/propPanel.js.map +0 -1
  183. package/dist/esm/src/multiVariableText/types.js +0 -2
  184. package/dist/esm/src/multiVariableText/types.js.map +0 -1
  185. package/dist/esm/src/multiVariableText/uiRender.js +0 -142
  186. package/dist/esm/src/multiVariableText/uiRender.js.map +0 -1
  187. package/dist/esm/src/radioGroup/index.js +0 -88
  188. package/dist/esm/src/radioGroup/index.js.map +0 -1
  189. package/dist/esm/src/sanitize.js +0 -50
  190. package/dist/esm/src/sanitize.js.map +0 -1
  191. package/dist/esm/src/select/index.js +0 -170
  192. package/dist/esm/src/select/index.js.map +0 -1
  193. package/dist/esm/src/shapes/line.js +0 -74
  194. package/dist/esm/src/shapes/line.js.map +0 -1
  195. package/dist/esm/src/shapes/rectAndEllipse.js +0 -137
  196. package/dist/esm/src/shapes/rectAndEllipse.js.map +0 -1
  197. package/dist/esm/src/tables/cell.js +0 -121
  198. package/dist/esm/src/tables/cell.js.map +0 -1
  199. package/dist/esm/src/tables/classes.js +0 -460
  200. package/dist/esm/src/tables/classes.js.map +0 -1
  201. package/dist/esm/src/tables/dynamicTemplate.js +0 -62
  202. package/dist/esm/src/tables/dynamicTemplate.js.map +0 -1
  203. package/dist/esm/src/tables/helper.js +0 -181
  204. package/dist/esm/src/tables/helper.js.map +0 -1
  205. package/dist/esm/src/tables/index.js +0 -13
  206. package/dist/esm/src/tables/index.js.map +0 -1
  207. package/dist/esm/src/tables/pdfRender.js +0 -102
  208. package/dist/esm/src/tables/pdfRender.js.map +0 -1
  209. package/dist/esm/src/tables/propPanel.js +0 -105
  210. package/dist/esm/src/tables/propPanel.js.map +0 -1
  211. package/dist/esm/src/tables/tableHelper.js +0 -197
  212. package/dist/esm/src/tables/tableHelper.js.map +0 -1
  213. package/dist/esm/src/tables/types.js +0 -2
  214. package/dist/esm/src/tables/types.js.map +0 -1
  215. package/dist/esm/src/tables/uiRender.js +0 -361
  216. package/dist/esm/src/tables/uiRender.js.map +0 -1
  217. package/dist/esm/src/text/constants.js +0 -94
  218. package/dist/esm/src/text/constants.js.map +0 -1
  219. package/dist/esm/src/text/extraFormatter.js +0 -45
  220. package/dist/esm/src/text/extraFormatter.js.map +0 -1
  221. package/dist/esm/src/text/helper.js +0 -457
  222. package/dist/esm/src/text/helper.js.map +0 -1
  223. package/dist/esm/src/text/icons/index.js +0 -13
  224. package/dist/esm/src/text/icons/index.js.map +0 -1
  225. package/dist/esm/src/text/index.js +0 -13
  226. package/dist/esm/src/text/index.js.map +0 -1
  227. package/dist/esm/src/text/pdfRender.js +0 -166
  228. package/dist/esm/src/text/pdfRender.js.map +0 -1
  229. package/dist/esm/src/text/propPanel.js +0 -158
  230. package/dist/esm/src/text/propPanel.js.map +0 -1
  231. package/dist/esm/src/text/types.js +0 -2
  232. package/dist/esm/src/text/types.js.map +0 -1
  233. package/dist/esm/src/text/uiRender.js +0 -224
  234. package/dist/esm/src/text/uiRender.js.map +0 -1
  235. package/dist/esm/src/utils.js +0 -218
  236. package/dist/esm/src/utils.js.map +0 -1
  237. package/dist/node/__tests__/barcode.test.js +0 -354
  238. package/dist/node/__tests__/barcode.test.js.map +0 -1
  239. package/dist/node/__tests__/multiVariableText.test.js +0 -102
  240. package/dist/node/__tests__/multiVariableText.test.js.map +0 -1
  241. package/dist/node/__tests__/text.test.js +0 -419
  242. package/dist/node/__tests__/text.test.js.map +0 -1
  243. package/dist/node/__tests__/utils.test.js +0 -193
  244. package/dist/node/__tests__/utils.test.js.map +0 -1
  245. package/dist/node/src/barcodes/constants.js +0 -21
  246. package/dist/node/src/barcodes/constants.js.map +0 -1
  247. package/dist/node/src/barcodes/helper.js +0 -161
  248. package/dist/node/src/barcodes/helper.js.map +0 -1
  249. package/dist/node/src/barcodes/index.js +0 -18
  250. package/dist/node/src/barcodes/index.js.map +0 -1
  251. package/dist/node/src/barcodes/pdfRender.js +0 -29
  252. package/dist/node/src/barcodes/pdfRender.js.map +0 -1
  253. package/dist/node/src/barcodes/propPanel.js +0 -241
  254. package/dist/node/src/barcodes/propPanel.js.map +0 -1
  255. package/dist/node/src/barcodes/types.js +0 -3
  256. package/dist/node/src/barcodes/types.js.map +0 -1
  257. package/dist/node/src/barcodes/uiRender.js +0 -91
  258. package/dist/node/src/barcodes/uiRender.js.map +0 -1
  259. package/dist/node/src/checkbox/index.js +0 -62
  260. package/dist/node/src/checkbox/index.js.map +0 -1
  261. package/dist/node/src/constants.js +0 -6
  262. package/dist/node/src/constants.js.map +0 -1
  263. package/dist/node/src/date/date.js +0 -9
  264. package/dist/node/src/date/date.js.map +0 -1
  265. package/dist/node/src/date/dateTime.js +0 -9
  266. package/dist/node/src/date/dateTime.js.map +0 -1
  267. package/dist/node/src/date/helper.js +0 -462
  268. package/dist/node/src/date/helper.js.map +0 -1
  269. package/dist/node/src/date/time.js +0 -9
  270. package/dist/node/src/date/time.js.map +0 -1
  271. package/dist/node/src/date/types.js +0 -3
  272. package/dist/node/src/date/types.js.map +0 -1
  273. package/dist/node/src/graphics/image.js +0 -172
  274. package/dist/node/src/graphics/image.js.map +0 -1
  275. package/dist/node/src/graphics/imagehelper.js +0 -124
  276. package/dist/node/src/graphics/imagehelper.js.map +0 -1
  277. package/dist/node/src/graphics/svg.js +0 -112
  278. package/dist/node/src/graphics/svg.js.map +0 -1
  279. package/dist/node/src/index.js +0 -41
  280. package/dist/node/src/index.js.map +0 -1
  281. package/dist/node/src/multiVariableText/helper.js +0 -55
  282. package/dist/node/src/multiVariableText/helper.js.map +0 -1
  283. package/dist/node/src/multiVariableText/index.js +0 -16
  284. package/dist/node/src/multiVariableText/index.js.map +0 -1
  285. package/dist/node/src/multiVariableText/pdfRender.js +0 -20
  286. package/dist/node/src/multiVariableText/pdfRender.js.map +0 -1
  287. package/dist/node/src/multiVariableText/propPanel.js +0 -148
  288. package/dist/node/src/multiVariableText/propPanel.js.map +0 -1
  289. package/dist/node/src/multiVariableText/types.js +0 -3
  290. package/dist/node/src/multiVariableText/types.js.map +0 -1
  291. package/dist/node/src/multiVariableText/uiRender.js +0 -146
  292. package/dist/node/src/multiVariableText/uiRender.js.map +0 -1
  293. package/dist/node/src/radioGroup/index.js +0 -93
  294. package/dist/node/src/radioGroup/index.js.map +0 -1
  295. package/dist/node/src/sanitize.js +0 -57
  296. package/dist/node/src/sanitize.js.map +0 -1
  297. package/dist/node/src/select/index.js +0 -175
  298. package/dist/node/src/select/index.js.map +0 -1
  299. package/dist/node/src/shapes/line.js +0 -76
  300. package/dist/node/src/shapes/line.js.map +0 -1
  301. package/dist/node/src/shapes/rectAndEllipse.js +0 -140
  302. package/dist/node/src/shapes/rectAndEllipse.js.map +0 -1
  303. package/dist/node/src/tables/cell.js +0 -126
  304. package/dist/node/src/tables/cell.js.map +0 -1
  305. package/dist/node/src/tables/classes.js +0 -467
  306. package/dist/node/src/tables/classes.js.map +0 -1
  307. package/dist/node/src/tables/dynamicTemplate.js +0 -66
  308. package/dist/node/src/tables/dynamicTemplate.js.map +0 -1
  309. package/dist/node/src/tables/helper.js +0 -189
  310. package/dist/node/src/tables/helper.js.map +0 -1
  311. package/dist/node/src/tables/index.js +0 -15
  312. package/dist/node/src/tables/index.js.map +0 -1
  313. package/dist/node/src/tables/pdfRender.js +0 -109
  314. package/dist/node/src/tables/pdfRender.js.map +0 -1
  315. package/dist/node/src/tables/propPanel.js +0 -108
  316. package/dist/node/src/tables/propPanel.js.map +0 -1
  317. package/dist/node/src/tables/tableHelper.js +0 -200
  318. package/dist/node/src/tables/tableHelper.js.map +0 -1
  319. package/dist/node/src/tables/types.js +0 -3
  320. package/dist/node/src/tables/types.js.map +0 -1
  321. package/dist/node/src/tables/uiRender.js +0 -368
  322. package/dist/node/src/tables/uiRender.js.map +0 -1
  323. package/dist/node/src/text/constants.js +0 -97
  324. package/dist/node/src/text/constants.js.map +0 -1
  325. package/dist/node/src/text/extraFormatter.js +0 -49
  326. package/dist/node/src/text/extraFormatter.js.map +0 -1
  327. package/dist/node/src/text/helper.js +0 -504
  328. package/dist/node/src/text/helper.js.map +0 -1
  329. package/dist/node/src/text/icons/index.js +0 -16
  330. package/dist/node/src/text/icons/index.js.map +0 -1
  331. package/dist/node/src/text/index.js +0 -15
  332. package/dist/node/src/text/index.js.map +0 -1
  333. package/dist/node/src/text/pdfRender.js +0 -170
  334. package/dist/node/src/text/pdfRender.js.map +0 -1
  335. package/dist/node/src/text/propPanel.js +0 -161
  336. package/dist/node/src/text/propPanel.js.map +0 -1
  337. package/dist/node/src/text/types.js +0 -3
  338. package/dist/node/src/text/types.js.map +0 -1
  339. package/dist/node/src/text/uiRender.js +0 -231
  340. package/dist/node/src/text/uiRender.js.map +0 -1
  341. package/dist/node/src/utils.js +0 -230
  342. package/dist/node/src/utils.js.map +0 -1
  343. package/dist/types/__tests__/barcode.test.d.ts +0 -1
  344. package/dist/types/__tests__/multiVariableText.test.d.ts +0 -1
  345. package/dist/types/__tests__/text.test.d.ts +0 -1
  346. package/dist/types/__tests__/utils.test.d.ts +0 -1
  347. package/dist/types/src/barcodes/constants.d.ts +0 -4
  348. package/dist/types/src/barcodes/helper.d.ts +0 -21
  349. package/dist/types/src/barcodes/index.d.ts +0 -4
  350. package/dist/types/src/barcodes/pdfRender.d.ts +0 -3
  351. package/dist/types/src/barcodes/propPanel.d.ts +0 -3
  352. package/dist/types/src/barcodes/types.d.ts +0 -10
  353. package/dist/types/src/barcodes/uiRender.d.ts +0 -3
  354. package/dist/types/src/checkbox/index.d.ts +0 -6
  355. package/dist/types/src/constants.d.ts +0 -2
  356. package/dist/types/src/date/date.d.ts +0 -2
  357. package/dist/types/src/date/dateTime.d.ts +0 -2
  358. package/dist/types/src/date/helper.d.ts +0 -8
  359. package/dist/types/src/date/time.d.ts +0 -2
  360. package/dist/types/src/date/types.d.ts +0 -17
  361. package/dist/types/src/graphics/image.d.ts +0 -5
  362. package/dist/types/src/graphics/imagehelper.d.ts +0 -4
  363. package/dist/types/src/graphics/svg.d.ts +0 -4
  364. package/dist/types/src/index.d.ts +0 -19
  365. package/dist/types/src/multiVariableText/helper.d.ts +0 -3
  366. package/dist/types/src/multiVariableText/index.d.ts +0 -4
  367. package/dist/types/src/multiVariableText/pdfRender.d.ts +0 -3
  368. package/dist/types/src/multiVariableText/propPanel.d.ts +0 -3
  369. package/dist/types/src/multiVariableText/types.d.ts +0 -5
  370. package/dist/types/src/multiVariableText/uiRender.d.ts +0 -3
  371. package/dist/types/src/radioGroup/index.d.ts +0 -7
  372. package/dist/types/src/sanitize.d.ts +0 -1
  373. package/dist/types/src/select/index.d.ts +0 -7
  374. package/dist/types/src/shapes/line.d.ts +0 -6
  375. package/dist/types/src/shapes/rectAndEllipse.d.ts +0 -175
  376. package/dist/types/src/tables/cell.d.ts +0 -4
  377. package/dist/types/src/tables/classes.d.ts +0 -69
  378. package/dist/types/src/tables/dynamicTemplate.d.ts +0 -7
  379. package/dist/types/src/tables/helper.d.ts +0 -265
  380. package/dist/types/src/tables/index.d.ts +0 -4
  381. package/dist/types/src/tables/pdfRender.d.ts +0 -3
  382. package/dist/types/src/tables/propPanel.d.ts +0 -3
  383. package/dist/types/src/tables/tableHelper.d.ts +0 -10
  384. package/dist/types/src/tables/types.d.ts +0 -88
  385. package/dist/types/src/tables/uiRender.d.ts +0 -3
  386. package/dist/types/src/text/constants.d.ts +0 -23
  387. package/dist/types/src/text/extraFormatter.d.ts +0 -25
  388. package/dist/types/src/text/helper.d.ts +0 -39
  389. package/dist/types/src/text/icons/index.d.ts +0 -9
  390. package/dist/types/src/text/index.d.ts +0 -4
  391. package/dist/types/src/text/pdfRender.d.ts +0 -3
  392. package/dist/types/src/text/propPanel.d.ts +0 -3
  393. package/dist/types/src/text/types.d.ts +0 -28
  394. package/dist/types/src/text/uiRender.d.ts +0 -11
  395. package/dist/types/src/utils.d.ts +0 -40
  396. package/eslint.config.mjs +0 -22
  397. package/tsconfig.cjs.json +0 -10
  398. package/tsconfig.esm.json +0 -11
  399. package/tsconfig.node.json +0 -11
package/package.json CHANGED
@@ -1,99 +1,83 @@
1
1
  {
2
2
  "name": "@pdfme/schemas",
3
- "version": "5.5.10-dev.13",
4
- "sideEffects": false,
5
- "author": "hand-dot",
6
- "license": "MIT",
3
+ "version": "5.5.10-dev.134",
4
+ "description": "TypeScript base PDF generator and React base UI. Open source, developed by the community, and completely free to use under the MIT license!",
7
5
  "keywords": [
8
6
  "pdf",
9
- "pdf-generation",
10
7
  "pdf-designer",
8
+ "pdf-generation",
11
9
  "pdf-viewer",
12
- "typescript",
13
- "react"
10
+ "react",
11
+ "typescript"
14
12
  ],
15
- "description": "TypeScript base PDF generator and React base UI. Open source, developed by the community, and completely free to use under the MIT license!",
16
13
  "homepage": "https://pdfme.com",
14
+ "bugs": {
15
+ "url": "https://github.com/pdfme/pdfme/issues"
16
+ },
17
+ "license": "MIT",
18
+ "author": "hand-dot",
17
19
  "repository": {
18
20
  "type": "git",
19
21
  "url": "git@github.com:pdfme/pdfme.git"
20
22
  },
21
- "bugs": {
22
- "url": "https://github.com/pdfme/pdfme/issues"
23
- },
24
- "main": "dist/cjs/src/index.js",
25
- "module": "dist/esm/src/index.js",
26
- "types": "dist/types/src/index.d.ts",
23
+ "type": "module",
24
+ "sideEffects": false,
25
+ "main": "./dist/index.js",
26
+ "module": "./dist/index.js",
27
+ "types": "./dist/index.d.ts",
27
28
  "exports": {
28
29
  ".": {
29
- "import": {
30
- "node": "./dist/node/src/index.js",
31
- "default": "./dist/esm/src/index.js"
32
- },
33
- "require": "./dist/cjs/src/index.js",
34
- "types": "./dist/types/src/index.d.ts"
30
+ "types": "./dist/index.d.ts",
31
+ "import": "./dist/index.js",
32
+ "default": "./dist/index.js"
33
+ },
34
+ "./builtins": {
35
+ "types": "./dist/builtins.d.ts",
36
+ "import": "./dist/builtins.js",
37
+ "default": "./dist/builtins.js"
38
+ },
39
+ "./tables": {
40
+ "types": "./dist/tables.d.ts",
41
+ "import": "./dist/tables.js",
42
+ "default": "./dist/tables.js"
35
43
  },
36
44
  "./utils": {
37
- "import": {
38
- "node": "./dist/node/src/utils.js",
39
- "default": "./dist/esm/src/utils.js"
40
- },
41
- "require": "./dist/cjs/src/utils.js",
42
- "types": "./dist/types/src/utils.d.ts"
45
+ "types": "./dist/utils.d.ts",
46
+ "import": "./dist/utils.js",
47
+ "default": "./dist/utils.js"
43
48
  }
44
49
  },
50
+ "publishConfig": {
51
+ "access": "public"
52
+ },
45
53
  "scripts": {
46
- "dev": "tsc -p tsconfig.esm.json -w",
47
- "build": "run-p build:cjs build:esm build:node",
48
- "build:cjs": "tsc -p tsconfig.cjs.json",
49
- "build:esm": "tsc -p tsconfig.esm.json",
50
- "build:node": "tsc -p tsconfig.node.json",
54
+ "dev": "vite build --watch",
55
+ "build": "vite build && tsc -p tsconfig.build.json",
51
56
  "clean": "rimraf dist",
52
- "lint": "eslint --ext .ts src --config eslint.config.mjs",
53
- "test": "jest",
54
- "prune": "ts-prune src",
55
- "prettier": "prettier --write 'src/**/*.ts'"
57
+ "lint": "vp lint -c ../../.oxlintrc.json src",
58
+ "fmt": "vp fmt -c ../../.oxfmtrc.json src --write",
59
+ "test": "vitest run --config ../../vitest.config.ts"
56
60
  },
57
61
  "dependencies": {
58
62
  "@pdfme/pdf-lib": "*",
59
63
  "air-datepicker": "^3.6.0",
60
- "bwip-js": "^4.8.0",
64
+ "bwip-js": "^4.9.0",
61
65
  "date-fns": "^4.1.0",
62
- "fontkit": "^2.0.2",
63
66
  "dompurify": "^3.3.3",
64
- "lucide": "^0.577.0"
67
+ "fontkit": "^2.0.2",
68
+ "lucide": "^1.7.0",
69
+ "signature_pad": "^4.2.0"
65
70
  },
66
71
  "devDependencies": {
67
72
  "@pdfme/common": "*",
68
- "@types/dompurify": "^3.2.0",
69
73
  "@types/bwip-js": "^3.2.1",
70
74
  "@types/fontkit": "^2.0.9",
71
75
  "@types/pngjs": "^6.0.2",
76
+ "csstype": "^3.2.3",
72
77
  "jsqr": "^1.4.0",
73
78
  "pngjs": "^7.0.0"
74
79
  },
75
80
  "peerDependencies": {
76
81
  "@pdfme/common": "latest"
77
- },
78
- "jest": {
79
- "resolver": "ts-jest-resolver",
80
- "moduleFileExtensions": [
81
- "js",
82
- "ts"
83
- ],
84
- "transform": {
85
- "^.+\\.ts?$": [
86
- "ts-jest",
87
- {
88
- "tsconfig": "tsconfig.esm.json"
89
- }
90
- ]
91
- },
92
- "testMatch": [
93
- "**/*.test.ts"
94
- ]
95
- },
96
- "publishConfig": {
97
- "access": "public"
98
82
  }
99
83
  }
@@ -55,7 +55,7 @@ export const validateBarcodeInput = (type: BarcodeTypes, input: string) => {
55
55
  if (type === 'code39') {
56
56
  // For Code39: Valid characters are digits (0-9), uppercase alphabets (A-Z),
57
57
  // symbols (-, ., $, /, +, %), and space.
58
- const regexp = /^(\d|[A-Z]|\-|\.|\$|\/|\+|\%|\s)+$/;
58
+ const regexp = /^(\d|[A-Z]|[-.$/+%]|\s)+$/;
59
59
  return regexp.test(input);
60
60
  }
61
61
  if (type === 'code128') {
@@ -68,7 +68,7 @@ export const validateBarcodeInput = (type: BarcodeTypes, input: string) => {
68
68
  if (type === 'nw7') {
69
69
  // For NW-7: Valid characters are digits (0-9) and symbols (-, ., $, :, /, +).
70
70
  // The first and last characters must be one of the alphabets A-D (start/stop codes).
71
- const regexp = /^[A-Da-d]([0-9\-\.\$\:\/\+])+[A-Da-d]$/;
71
+ const regexp = /^[A-Da-d]([0-9.$:/+-])+[A-Da-d]$/;
72
72
  return regexp.test(input);
73
73
  }
74
74
  if (type === 'itf14') {
@@ -1,12 +1,12 @@
1
1
  import { Schema } from '@pdfme/common';
2
2
  import { BARCODE_TYPES } from './constants.js';
3
3
 
4
- export interface BarcodeSchema extends Schema {
4
+ export type BarcodeSchema = Schema & {
5
5
  type: (typeof BARCODE_TYPES)[number];
6
6
  backgroundColor: string;
7
7
  barColor: string;
8
8
  textColor?: string;
9
9
  includetext?: boolean;
10
- }
10
+ };
11
11
 
12
12
  export type BarcodeTypes = (typeof BARCODE_TYPES)[number];
@@ -0,0 +1,8 @@
1
+ import text from './text/index.js';
2
+
3
+ // The default built-in plugin surface is intentionally limited to text.
4
+ // Generator/UI consumers that need image, barcode, table, or other schema types
5
+ // must import and pass those plugins explicitly from `@pdfme/schemas`.
6
+ const builtInPlugins = { Text: text };
7
+
8
+ export { builtInPlugins };
@@ -70,43 +70,55 @@ interface Locale {
70
70
  formatLocale: dateFns.Locale;
71
71
  }
72
72
 
73
+ const normalizeAdLocale = (
74
+ locale: AirDatepickerLocale | { default: AirDatepickerLocale },
75
+ ): AirDatepickerLocale => {
76
+ // Air Datepicker locales can arrive as either the locale object itself or as an
77
+ // ESM default export shim when bundlers interop with the package's CJS build.
78
+ return 'default' in locale ? locale.default : locale;
79
+ };
80
+
73
81
  const LOCALE_MAP: Record<string, Locale> = {
74
- ar: { label: 'Arabic', adLocale: localeAr, formatLocale: dateFns.ar },
75
- bg: { label: 'Bulgarian', adLocale: localeBg, formatLocale: dateFns.bg },
76
- ca: { label: 'Catalan', adLocale: localeCa, formatLocale: dateFns.ca },
77
- cs: { label: 'Czech', adLocale: localeCs, formatLocale: dateFns.cs },
78
- da: { label: 'Danish', adLocale: localeDa, formatLocale: dateFns.da },
79
- de: { label: 'German', adLocale: localeDe, formatLocale: dateFns.de },
80
- el: { label: 'Greek', adLocale: localeEl, formatLocale: dateFns.el },
81
- en: { label: 'English', adLocale: localeEn, formatLocale: dateFns.enUS },
82
- es: { label: 'Spanish', adLocale: localeEs, formatLocale: dateFns.es },
83
- eu: { label: 'Basque', adLocale: localeEu, formatLocale: dateFns.eu },
84
- fi: { label: 'Finnish', adLocale: localeFi, formatLocale: dateFns.fi },
85
- fr: { label: 'French', adLocale: localeFr, formatLocale: dateFns.fr },
86
- hr: { label: 'Croatian', adLocale: localeHr, formatLocale: dateFns.hr },
87
- hu: { label: 'Hungarian', adLocale: localeHu, formatLocale: dateFns.hu },
88
- id: { label: 'Indonesian', adLocale: localeId, formatLocale: dateFns.id },
89
- it: { label: 'Italian', adLocale: localeIt, formatLocale: dateFns.it },
90
- ja: { label: 'Japanese', adLocale: localeJa, formatLocale: dateFns.ja },
91
- ko: { label: 'Korean', adLocale: localeKo, formatLocale: dateFns.ko },
92
- nb: { label: 'Norwegian Bokmål', adLocale: localeNb, formatLocale: dateFns.nb },
93
- nl: { label: 'Dutch', adLocale: localeNl, formatLocale: dateFns.nl },
94
- pl: { label: 'Polish', adLocale: localePl, formatLocale: dateFns.pl },
95
- 'pt-Br': { label: 'Portuguese', adLocale: localePtBR, formatLocale: dateFns.ptBR },
96
- pt: { label: 'Portuguese', adLocale: localePt, formatLocale: dateFns.pt },
97
- ro: { label: 'Romanian', adLocale: localeRo, formatLocale: dateFns.ro },
98
- ru: { label: 'Russian', adLocale: localeRu, formatLocale: dateFns.ru },
99
- si: { label: 'Sinhala', adLocale: localeSi, formatLocale: dateFns.enUS },
100
- sk: { label: 'Slovak', adLocale: localeSk, formatLocale: dateFns.sk },
101
- sl: { label: 'Slovenian', adLocale: localeSl, formatLocale: dateFns.sl },
102
- sv: { label: 'Swedish', adLocale: localeSv, formatLocale: dateFns.sv },
103
- th: { label: 'Thai', adLocale: localeTh, formatLocale: dateFns.th },
104
- tr: { label: 'Turkish', adLocale: localeTr, formatLocale: dateFns.tr },
105
- uk: { label: 'Ukrainian', adLocale: localeUk, formatLocale: dateFns.uk },
106
- zh: { label: 'Chinese', adLocale: localeZh, formatLocale: dateFns.zhCN },
82
+ ar: { label: 'Arabic', adLocale: normalizeAdLocale(localeAr), formatLocale: dateFns.ar },
83
+ bg: { label: 'Bulgarian', adLocale: normalizeAdLocale(localeBg), formatLocale: dateFns.bg },
84
+ ca: { label: 'Catalan', adLocale: normalizeAdLocale(localeCa), formatLocale: dateFns.ca },
85
+ cs: { label: 'Czech', adLocale: normalizeAdLocale(localeCs), formatLocale: dateFns.cs },
86
+ da: { label: 'Danish', adLocale: normalizeAdLocale(localeDa), formatLocale: dateFns.da },
87
+ de: { label: 'German', adLocale: normalizeAdLocale(localeDe), formatLocale: dateFns.de },
88
+ el: { label: 'Greek', adLocale: normalizeAdLocale(localeEl), formatLocale: dateFns.el },
89
+ en: { label: 'English', adLocale: normalizeAdLocale(localeEn), formatLocale: dateFns.enUS },
90
+ es: { label: 'Spanish', adLocale: normalizeAdLocale(localeEs), formatLocale: dateFns.es },
91
+ eu: { label: 'Basque', adLocale: normalizeAdLocale(localeEu), formatLocale: dateFns.eu },
92
+ fi: { label: 'Finnish', adLocale: normalizeAdLocale(localeFi), formatLocale: dateFns.fi },
93
+ fr: { label: 'French', adLocale: normalizeAdLocale(localeFr), formatLocale: dateFns.fr },
94
+ hr: { label: 'Croatian', adLocale: normalizeAdLocale(localeHr), formatLocale: dateFns.hr },
95
+ hu: { label: 'Hungarian', adLocale: normalizeAdLocale(localeHu), formatLocale: dateFns.hu },
96
+ id: { label: 'Indonesian', adLocale: normalizeAdLocale(localeId), formatLocale: dateFns.id },
97
+ it: { label: 'Italian', adLocale: normalizeAdLocale(localeIt), formatLocale: dateFns.it },
98
+ ja: { label: 'Japanese', adLocale: normalizeAdLocale(localeJa), formatLocale: dateFns.ja },
99
+ ko: { label: 'Korean', adLocale: normalizeAdLocale(localeKo), formatLocale: dateFns.ko },
100
+ nb: { label: 'Norwegian Bokmål', adLocale: normalizeAdLocale(localeNb), formatLocale: dateFns.nb },
101
+ nl: { label: 'Dutch', adLocale: normalizeAdLocale(localeNl), formatLocale: dateFns.nl },
102
+ pl: { label: 'Polish', adLocale: normalizeAdLocale(localePl), formatLocale: dateFns.pl },
103
+ 'pt-Br': {
104
+ label: 'Portuguese',
105
+ adLocale: normalizeAdLocale(localePtBR),
106
+ formatLocale: dateFns.ptBR,
107
+ },
108
+ pt: { label: 'Portuguese', adLocale: normalizeAdLocale(localePt), formatLocale: dateFns.pt },
109
+ ro: { label: 'Romanian', adLocale: normalizeAdLocale(localeRo), formatLocale: dateFns.ro },
110
+ ru: { label: 'Russian', adLocale: normalizeAdLocale(localeRu), formatLocale: dateFns.ru },
111
+ si: { label: 'Sinhala', adLocale: normalizeAdLocale(localeSi), formatLocale: dateFns.enUS },
112
+ sk: { label: 'Slovak', adLocale: normalizeAdLocale(localeSk), formatLocale: dateFns.sk },
113
+ sl: { label: 'Slovenian', adLocale: normalizeAdLocale(localeSl), formatLocale: dateFns.sl },
114
+ sv: { label: 'Swedish', adLocale: normalizeAdLocale(localeSv), formatLocale: dateFns.sv },
115
+ th: { label: 'Thai', adLocale: normalizeAdLocale(localeTh), formatLocale: dateFns.th },
116
+ tr: { label: 'Turkish', adLocale: normalizeAdLocale(localeTr), formatLocale: dateFns.tr },
117
+ uk: { label: 'Ukrainian', adLocale: normalizeAdLocale(localeUk), formatLocale: dateFns.uk },
118
+ zh: { label: 'Chinese', adLocale: normalizeAdLocale(localeZh), formatLocale: dateFns.zhCN },
107
119
  };
108
120
 
109
- const getAirDatepickerLocale = (locale: string) => {
121
+ export const getAirDatepickerLocale = (locale: string) => {
110
122
  const data = LOCALE_MAP[locale];
111
123
  if (!data) {
112
124
  throw new Error(`Unsupported locale: ${locale}`);
@@ -151,7 +163,7 @@ const strDateToDate = (strDate: string, type: PickerType): Date => {
151
163
  return new Date(strDate);
152
164
  };
153
165
 
154
- const getFormat = (type: PickerType, locale: Locale): string => {
166
+ export const getFormat = (type: PickerType, locale: Locale): string => {
155
167
  switch (type) {
156
168
  case 'date': {
157
169
  return locale.adLocale.dateFormat;
@@ -165,14 +177,49 @@ const getFormat = (type: PickerType, locale: Locale): string => {
165
177
  }
166
178
  };
167
179
 
168
- const getFmtValue = (
180
+ export const isValidDateFormat = (
181
+ formatString: string | undefined,
182
+ locale: Locale,
183
+ ): formatString is string => {
184
+ if (typeof formatString !== 'string') {
185
+ return false;
186
+ }
187
+
188
+ const normalizedFormat = formatString.trim();
189
+ if (!normalizedFormat || normalizedFormat === 'undefined') {
190
+ return false;
191
+ }
192
+
193
+ try {
194
+ format(new Date(0), normalizedFormat, {
195
+ locale: locale.formatLocale,
196
+ });
197
+ return true;
198
+ } catch {
199
+ return false;
200
+ }
201
+ };
202
+
203
+ export const getSafeFormat = (
204
+ type: PickerType,
205
+ schema: Pick<DateSchema, 'format'>,
206
+ locale: Locale,
207
+ ): string => {
208
+ return isValidDateFormat(schema.format, locale)
209
+ ? schema.format.trim()
210
+ : getFormat(type, locale);
211
+ };
212
+
213
+ export const getFmtValue = (
169
214
  value: string,
170
215
  type: PickerType,
171
216
  schema: DateSchema,
172
217
  locale: Locale,
173
218
  ): string => {
219
+ const formatString = getSafeFormat(type, schema, locale);
220
+
174
221
  return value
175
- ? format(strDateToDate(value, type), schema.format, {
222
+ ? format(strDateToDate(value, type), formatString, {
176
223
  locale: locale.formatLocale,
177
224
  })
178
225
  : '';
@@ -204,6 +251,7 @@ export const getPlugin = ({ type, icon }: { type: PickerType; icon: string }) =>
204
251
  const { schema, value, onChange, rootElement, mode, options, i18n } = arg;
205
252
 
206
253
  const locale = getAirDatepickerLocale(schema.locale || options.lang || defaultLocale);
254
+ const formatString = getSafeFormat(type, schema, locale);
207
255
 
208
256
  const textElement = document.createElement('div');
209
257
  const textElementStyle: CSS.Properties = {
@@ -270,14 +318,14 @@ export const getPlugin = ({ type, icon }: { type: PickerType; icon: string }) =>
270
318
  locale: locale.adLocale,
271
319
  selectedDates: value.trim() ? [strDateToDate(value, type)] : [],
272
320
  dateFormat: (date: AirDatepickerDate) =>
273
- format(date, schema.format, { locale: locale.formatLocale }),
321
+ format(date, formatString, { locale: locale.formatLocale }),
274
322
  timepicker: type !== 'date',
275
323
  onlyTimepicker: type === 'time',
276
324
  isMobile: window.innerWidth < 768,
277
325
  buttons: adButtons,
278
326
  position({ $datepicker, $target, $pointer, done }) {
279
327
  $datepicker.style.position = 'fixed';
280
- const offset = 5;
328
+ const offset = 5;
281
329
  const scrollY = window.scrollY;
282
330
  const scrollX = window.scrollX;
283
331
 
@@ -291,29 +339,29 @@ export const getPlugin = ({ type, icon }: { type: PickerType; icon: string }) =>
291
339
  const showAbove = spaceBelow < dpHeight + offset && spaceAbove > dpHeight;
292
340
 
293
341
  let top = showAbove
294
- ? targetRect.top + scrollY - dpHeight - offset
295
- : targetRect.bottom + scrollY + offset;
342
+ ? targetRect.top + scrollY - dpHeight - offset
343
+ : targetRect.bottom + scrollY + offset;
296
344
 
297
345
  let left = targetRect.left + scrollX;
298
346
 
299
347
  if (left + dpWidth > window.innerWidth) {
300
- left = window.innerWidth - dpWidth - 10;
348
+ left = window.innerWidth - dpWidth - 10;
301
349
  }
302
350
 
303
351
  $datepicker.style.position = 'absolute';
304
352
  $datepicker.style.top = `${top}px`;
305
353
  $datepicker.style.left = `${left}px`;
306
354
  if ($pointer) {
307
- $pointer.style.display = 'block';
308
- $pointer.style.position = 'absolute';
309
- $pointer.style.left = '10px';
310
- $pointer.style.top = showAbove ? 'calc(100% - 5px)' : '-5px';
311
- $pointer.style.transform = showAbove ? 'rotate(135deg)' : 'rotate(-45deg)';
355
+ $pointer.style.display = 'block';
356
+ $pointer.style.position = 'absolute';
357
+ $pointer.style.left = '10px';
358
+ $pointer.style.top = showAbove ? 'calc(100% - 5px)' : '-5px';
359
+ $pointer.style.transform = showAbove ? 'rotate(135deg)' : 'rotate(-45deg)';
312
360
  }
313
361
  return function completeHide() {
314
- done();
362
+ done();
315
363
  };
316
- },
364
+ },
317
365
  onSelect: ({ datepicker }: { datepicker: AirDatepickerInstance }) => {
318
366
  if (type === 'date') {
319
367
  commitChange(datepicker.selectedDates.length ? datepicker.selectedDates[0] : null);
@@ -355,19 +403,27 @@ export const getPlugin = ({ type, icon }: { type: PickerType; icon: string }) =>
355
403
  const font = options.font || { [DEFAULT_FONT_NAME]: { data: '', fallback: true } };
356
404
  const fontNames = Object.keys(font);
357
405
  const fallbackFontName = getFallbackFontName(font);
406
+ const activeDateSchema = activeSchema as { locale?: string; format?: string };
358
407
 
359
408
  const locale = getAirDatepickerLocale(
360
- (activeSchema as { locale?: string }).locale || options.lang || defaultLocale,
409
+ activeDateSchema.locale || options.lang || defaultLocale,
361
410
  );
411
+ const defaultFormat = getFormat(type, locale);
412
+ const safeFormat = getSafeFormat(
413
+ type,
414
+ activeDateSchema as Pick<DateSchema, 'format'>,
415
+ locale,
416
+ );
417
+ const schemaChanges = [];
362
418
 
363
- if (
364
- (activeSchema as { locale?: string }).locale === undefined &&
365
- (activeSchema as { locale?: string }).locale !== options.lang
366
- ) {
367
- changeSchemas([
368
- { schemaId: activeSchema.id, key: 'locale', value: options.lang },
369
- { schemaId: activeSchema.id, key: 'format', value: getFormat(type, locale) },
370
- ]);
419
+ if (activeDateSchema.locale === undefined && activeDateSchema.locale !== options.lang) {
420
+ schemaChanges.push({ schemaId: activeSchema.id, key: 'locale', value: options.lang });
421
+ }
422
+ if (activeDateSchema.format !== safeFormat) {
423
+ schemaChanges.push({ schemaId: activeSchema.id, key: 'format', value: safeFormat });
424
+ }
425
+ if (schemaChanges.length > 0) {
426
+ changeSchemas(schemaChanges);
371
427
  }
372
428
 
373
429
  const formatter = getExtraFormatterSchema(i18n);
@@ -375,16 +431,8 @@ export const getPlugin = ({ type, icon }: { type: PickerType; icon: string }) =>
375
431
  (button) => button.key === Formatter.ALIGNMENT,
376
432
  );
377
433
 
378
- const validateDateTimeFormat = (_rule: unknown, formatString: string): boolean => {
379
- try {
380
- format('Thu Jan 01 1970 00:00:00 GMT+0000', formatString, {
381
- locale: locale.formatLocale,
382
- });
383
- return true;
384
- } catch {
385
- return false;
386
- }
387
- };
434
+ const validateDateTimeFormat = (_rule: unknown, formatString: string): boolean =>
435
+ isValidDateFormat(formatString, locale);
388
436
 
389
437
  const localeOptions = Object.keys(LOCALE_MAP).map((lc) => ({
390
438
  label: `${lc} (${LOCALE_MAP[lc].label})`,
@@ -395,8 +443,8 @@ export const getPlugin = ({ type, icon }: { type: PickerType; icon: string }) =>
395
443
  format: {
396
444
  title: i18n('schemas.date.format'),
397
445
  type: 'string',
398
- default: getFormat(type, locale),
399
- placeholder: getFormat(type, locale),
446
+ default: safeFormat,
447
+ placeholder: defaultFormat,
400
448
  rules: [
401
449
  {
402
450
  validator: validateDateTimeFormat,
@@ -1,4 +1,3 @@
1
- import type { ChangeEvent } from 'react';
2
1
  import type { PDFImage } from '@pdfme/pdf-lib';
3
2
  import type { Plugin } from '@pdfme/common';
4
3
  import type { Schema } from '@pdfme/common';
@@ -165,8 +164,9 @@ const imageSchema: Plugin<ImageSchema> = {
165
164
  input.type = 'file';
166
165
  input.accept = 'image/jpeg, image/png';
167
166
  input.addEventListener('change', (event: Event) => {
168
- const changeEvent = event as unknown as ChangeEvent<HTMLInputElement>;
169
- readFile(changeEvent.target.files)
167
+ const target = event.target;
168
+ const files = target instanceof HTMLInputElement ? target.files : null;
169
+ readFile(files)
170
170
  .then((result) => {
171
171
  if (onChange) onChange({ key: 'content', value: result as string });
172
172
  })
@@ -0,0 +1,136 @@
1
+ import type { Plugin, Schema } from '@pdfme/common';
2
+ import { ZOOM } from '@pdfme/common';
3
+ import image from './image.js';
4
+
5
+ type SignatureSchema = Schema;
6
+
7
+ const createLoadErrorBadge = (message: string) => {
8
+ const badge = document.createElement('div');
9
+ badge.setAttribute('role', 'alert');
10
+ badge.textContent = message;
11
+ badge.style.position = 'absolute';
12
+ badge.style.left = '4px';
13
+ badge.style.right = '4px';
14
+ badge.style.bottom = '4px';
15
+ badge.style.zIndex = '2';
16
+ badge.style.padding = '4px 6px';
17
+ badge.style.borderRadius = '4px';
18
+ badge.style.background = 'rgba(176, 0, 32, 0.92)';
19
+ badge.style.color = '#ffffff';
20
+ badge.style.fontSize = '11px';
21
+ badge.style.lineHeight = '1.25';
22
+ badge.style.pointerEvents = 'none';
23
+ return badge;
24
+ };
25
+
26
+ const getEffectiveScale = (element: HTMLElement | null) => {
27
+ let scale = 1;
28
+ while (element && element !== document.body) {
29
+ const style = window.getComputedStyle(element);
30
+ const transform = style.transform;
31
+ if (transform && transform !== 'none') {
32
+ const localScale = parseFloat(transform.match(/matrix\((.+)\)/)?.[1].split(', ')[3] || '1');
33
+ scale *= localScale;
34
+ }
35
+ element = element.parentElement;
36
+ }
37
+ return scale;
38
+ };
39
+
40
+ const signature: Plugin<SignatureSchema> = {
41
+ ui: async (arg) => {
42
+ const { schema, value, onChange, rootElement, mode, i18n } = arg;
43
+ const { default: SignaturePad } = await import('signature_pad');
44
+
45
+ const canvas = document.createElement('canvas');
46
+ canvas.width = schema.width * ZOOM;
47
+ canvas.height = schema.height * ZOOM;
48
+
49
+ const context = canvas.getContext('2d');
50
+ if (context) {
51
+ const resetScale = 1 / getEffectiveScale(rootElement);
52
+ context.scale(resetScale, resetScale);
53
+
54
+ const signaturePad = new SignaturePad(canvas);
55
+ const loadErrorMessage =
56
+ i18n('signature.invalidData') || 'Saved signature could not be loaded.';
57
+ let loadErrorBadge: HTMLDivElement | null = null;
58
+ const clearLoadError = () => {
59
+ loadErrorBadge?.remove();
60
+ loadErrorBadge = null;
61
+ };
62
+ const showLoadError = () => {
63
+ if (loadErrorBadge) {
64
+ return;
65
+ }
66
+ loadErrorBadge = createLoadErrorBadge(loadErrorMessage);
67
+ rootElement.appendChild(loadErrorBadge);
68
+ };
69
+ const handleEndStroke = () => {
70
+ clearLoadError();
71
+ const data = signaturePad.toDataURL('image/png');
72
+ if (onChange && data) {
73
+ onChange({ key: 'content', value: data });
74
+ }
75
+ };
76
+
77
+ try {
78
+ if (value) {
79
+ signaturePad.fromDataURL(value, { ratio: resetScale });
80
+ } else {
81
+ signaturePad.clear();
82
+ }
83
+ } catch (error) {
84
+ signaturePad.clear();
85
+ showLoadError();
86
+ console.error('[@pdfme/schemas] Failed to restore saved signature data.', error);
87
+ }
88
+
89
+ if (mode === 'viewer' || (mode === 'form' && schema.readOnly)) {
90
+ signaturePad.off();
91
+ } else {
92
+ signaturePad.on();
93
+ const clearButton = document.createElement('button');
94
+ const handleClear = () => {
95
+ clearLoadError();
96
+ if (onChange) {
97
+ onChange({ key: 'content', value: '' });
98
+ }
99
+ };
100
+ const cleanup = () => {
101
+ clearLoadError();
102
+ signaturePad.off();
103
+ signaturePad.removeEventListener('endStroke', handleEndStroke);
104
+ clearButton.removeEventListener('click', handleClear);
105
+ clearButton.remove();
106
+ rootElement.removeEventListener('beforeRemove', cleanup);
107
+ };
108
+
109
+ rootElement.addEventListener('beforeRemove', cleanup);
110
+ clearButton.type = 'button';
111
+ clearButton.style.position = 'absolute';
112
+ clearButton.style.zIndex = '1';
113
+ clearButton.textContent = i18n('signature.clear') || 'x';
114
+ clearButton.addEventListener('click', handleClear);
115
+ rootElement.appendChild(clearButton);
116
+ signaturePad.addEventListener('endStroke', handleEndStroke);
117
+ }
118
+ }
119
+
120
+ rootElement.appendChild(canvas);
121
+ },
122
+ pdf: image.pdf,
123
+ propPanel: {
124
+ schema: {},
125
+ defaultSchema: {
126
+ name: '',
127
+ type: 'signature',
128
+ content: '',
129
+ position: { x: 0, y: 0 },
130
+ width: 62.5,
131
+ height: 37.5,
132
+ },
133
+ },
134
+ };
135
+
136
+ export default signature;
package/src/index.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  import multiVariableText from './multiVariableText/index.js';
2
2
  import text from './text/index.js';
3
3
  import image from './graphics/image.js';
4
+ import signature from './graphics/signature.js';
4
5
  import svg from './graphics/svg.js';
5
6
  import barcodes from './barcodes/index.js';
6
7
  import line from './shapes/line.js';
@@ -12,15 +13,14 @@ import time from './date/time.js';
12
13
  import select from './select/index.js';
13
14
  import radioGroup from './radioGroup/index.js';
14
15
  import checkbox from './checkbox/index.js';
15
-
16
- const builtInPlugins = { Text: text };
16
+ export { builtInPlugins } from './builtins.js';
17
17
 
18
18
  export {
19
- builtInPlugins,
20
19
  // schemas
21
20
  text,
22
21
  multiVariableText,
23
22
  image,
23
+ signature,
24
24
  svg,
25
25
  table,
26
26
  barcodes,
@@ -36,4 +36,4 @@ export {
36
36
  };
37
37
 
38
38
  // Export utility functions
39
- export { getDynamicHeightsForTable } from './tables/dynamicTemplate.js';
39
+ export { getDynamicHeightsForTable } from './tables.js';