@pdfme/schemas 5.5.9 → 5.5.10-dev.125

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 (398) hide show
  1. package/package.json +45 -61
  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 +23 -14
  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/tables/tableHelper.ts +3 -2
  14. package/src/tables/types.ts +2 -2
  15. package/src/tables/uiRender.ts +1 -1
  16. package/src/tables.ts +1 -0
  17. package/src/text/helper.ts +27 -4
  18. package/src/text/pdfRender.ts +2 -1
  19. package/src/text/types.ts +2 -2
  20. package/src/utils.ts +87 -14
  21. package/tsconfig.build.json +14 -0
  22. package/tsconfig.json +14 -4
  23. package/vite.config.mts +51 -0
  24. package/dist/cjs/__tests__/barcode.test.js +0 -354
  25. package/dist/cjs/__tests__/barcode.test.js.map +0 -1
  26. package/dist/cjs/__tests__/multiVariableText.test.js +0 -102
  27. package/dist/cjs/__tests__/multiVariableText.test.js.map +0 -1
  28. package/dist/cjs/__tests__/text.test.js +0 -419
  29. package/dist/cjs/__tests__/text.test.js.map +0 -1
  30. package/dist/cjs/__tests__/utils.test.js +0 -193
  31. package/dist/cjs/__tests__/utils.test.js.map +0 -1
  32. package/dist/cjs/src/barcodes/constants.js +0 -21
  33. package/dist/cjs/src/barcodes/constants.js.map +0 -1
  34. package/dist/cjs/src/barcodes/helper.js +0 -161
  35. package/dist/cjs/src/barcodes/helper.js.map +0 -1
  36. package/dist/cjs/src/barcodes/index.js +0 -18
  37. package/dist/cjs/src/barcodes/index.js.map +0 -1
  38. package/dist/cjs/src/barcodes/pdfRender.js +0 -29
  39. package/dist/cjs/src/barcodes/pdfRender.js.map +0 -1
  40. package/dist/cjs/src/barcodes/propPanel.js +0 -241
  41. package/dist/cjs/src/barcodes/propPanel.js.map +0 -1
  42. package/dist/cjs/src/barcodes/types.js +0 -3
  43. package/dist/cjs/src/barcodes/types.js.map +0 -1
  44. package/dist/cjs/src/barcodes/uiRender.js +0 -91
  45. package/dist/cjs/src/barcodes/uiRender.js.map +0 -1
  46. package/dist/cjs/src/checkbox/index.js +0 -62
  47. package/dist/cjs/src/checkbox/index.js.map +0 -1
  48. package/dist/cjs/src/constants.js +0 -6
  49. package/dist/cjs/src/constants.js.map +0 -1
  50. package/dist/cjs/src/date/date.js +0 -9
  51. package/dist/cjs/src/date/date.js.map +0 -1
  52. package/dist/cjs/src/date/dateTime.js +0 -9
  53. package/dist/cjs/src/date/dateTime.js.map +0 -1
  54. package/dist/cjs/src/date/helper.js +0 -462
  55. package/dist/cjs/src/date/helper.js.map +0 -1
  56. package/dist/cjs/src/date/time.js +0 -9
  57. package/dist/cjs/src/date/time.js.map +0 -1
  58. package/dist/cjs/src/date/types.js +0 -3
  59. package/dist/cjs/src/date/types.js.map +0 -1
  60. package/dist/cjs/src/graphics/image.js +0 -172
  61. package/dist/cjs/src/graphics/image.js.map +0 -1
  62. package/dist/cjs/src/graphics/imagehelper.js +0 -124
  63. package/dist/cjs/src/graphics/imagehelper.js.map +0 -1
  64. package/dist/cjs/src/graphics/svg.js +0 -112
  65. package/dist/cjs/src/graphics/svg.js.map +0 -1
  66. package/dist/cjs/src/index.js +0 -41
  67. package/dist/cjs/src/index.js.map +0 -1
  68. package/dist/cjs/src/multiVariableText/helper.js +0 -55
  69. package/dist/cjs/src/multiVariableText/helper.js.map +0 -1
  70. package/dist/cjs/src/multiVariableText/index.js +0 -16
  71. package/dist/cjs/src/multiVariableText/index.js.map +0 -1
  72. package/dist/cjs/src/multiVariableText/pdfRender.js +0 -20
  73. package/dist/cjs/src/multiVariableText/pdfRender.js.map +0 -1
  74. package/dist/cjs/src/multiVariableText/propPanel.js +0 -148
  75. package/dist/cjs/src/multiVariableText/propPanel.js.map +0 -1
  76. package/dist/cjs/src/multiVariableText/types.js +0 -3
  77. package/dist/cjs/src/multiVariableText/types.js.map +0 -1
  78. package/dist/cjs/src/multiVariableText/uiRender.js +0 -146
  79. package/dist/cjs/src/multiVariableText/uiRender.js.map +0 -1
  80. package/dist/cjs/src/radioGroup/index.js +0 -93
  81. package/dist/cjs/src/radioGroup/index.js.map +0 -1
  82. package/dist/cjs/src/sanitize.js +0 -57
  83. package/dist/cjs/src/sanitize.js.map +0 -1
  84. package/dist/cjs/src/select/index.js +0 -175
  85. package/dist/cjs/src/select/index.js.map +0 -1
  86. package/dist/cjs/src/shapes/line.js +0 -76
  87. package/dist/cjs/src/shapes/line.js.map +0 -1
  88. package/dist/cjs/src/shapes/rectAndEllipse.js +0 -140
  89. package/dist/cjs/src/shapes/rectAndEllipse.js.map +0 -1
  90. package/dist/cjs/src/tables/cell.js +0 -126
  91. package/dist/cjs/src/tables/cell.js.map +0 -1
  92. package/dist/cjs/src/tables/classes.js +0 -467
  93. package/dist/cjs/src/tables/classes.js.map +0 -1
  94. package/dist/cjs/src/tables/dynamicTemplate.js +0 -66
  95. package/dist/cjs/src/tables/dynamicTemplate.js.map +0 -1
  96. package/dist/cjs/src/tables/helper.js +0 -189
  97. package/dist/cjs/src/tables/helper.js.map +0 -1
  98. package/dist/cjs/src/tables/index.js +0 -15
  99. package/dist/cjs/src/tables/index.js.map +0 -1
  100. package/dist/cjs/src/tables/pdfRender.js +0 -109
  101. package/dist/cjs/src/tables/pdfRender.js.map +0 -1
  102. package/dist/cjs/src/tables/propPanel.js +0 -108
  103. package/dist/cjs/src/tables/propPanel.js.map +0 -1
  104. package/dist/cjs/src/tables/tableHelper.js +0 -200
  105. package/dist/cjs/src/tables/tableHelper.js.map +0 -1
  106. package/dist/cjs/src/tables/types.js +0 -3
  107. package/dist/cjs/src/tables/types.js.map +0 -1
  108. package/dist/cjs/src/tables/uiRender.js +0 -368
  109. package/dist/cjs/src/tables/uiRender.js.map +0 -1
  110. package/dist/cjs/src/text/constants.js +0 -97
  111. package/dist/cjs/src/text/constants.js.map +0 -1
  112. package/dist/cjs/src/text/extraFormatter.js +0 -49
  113. package/dist/cjs/src/text/extraFormatter.js.map +0 -1
  114. package/dist/cjs/src/text/helper.js +0 -498
  115. package/dist/cjs/src/text/helper.js.map +0 -1
  116. package/dist/cjs/src/text/icons/index.js +0 -16
  117. package/dist/cjs/src/text/icons/index.js.map +0 -1
  118. package/dist/cjs/src/text/index.js +0 -15
  119. package/dist/cjs/src/text/index.js.map +0 -1
  120. package/dist/cjs/src/text/pdfRender.js +0 -167
  121. package/dist/cjs/src/text/pdfRender.js.map +0 -1
  122. package/dist/cjs/src/text/propPanel.js +0 -161
  123. package/dist/cjs/src/text/propPanel.js.map +0 -1
  124. package/dist/cjs/src/text/types.js +0 -3
  125. package/dist/cjs/src/text/types.js.map +0 -1
  126. package/dist/cjs/src/text/uiRender.js +0 -231
  127. package/dist/cjs/src/text/uiRender.js.map +0 -1
  128. package/dist/cjs/src/utils.js +0 -230
  129. package/dist/cjs/src/utils.js.map +0 -1
  130. package/dist/esm/__tests__/barcode.test.js +0 -349
  131. package/dist/esm/__tests__/barcode.test.js.map +0 -1
  132. package/dist/esm/__tests__/multiVariableText.test.js +0 -100
  133. package/dist/esm/__tests__/multiVariableText.test.js.map +0 -1
  134. package/dist/esm/__tests__/text.test.js +0 -384
  135. package/dist/esm/__tests__/text.test.js.map +0 -1
  136. package/dist/esm/__tests__/utils.test.js +0 -191
  137. package/dist/esm/__tests__/utils.test.js.map +0 -1
  138. package/dist/esm/src/barcodes/constants.js +0 -18
  139. package/dist/esm/src/barcodes/constants.js.map +0 -1
  140. package/dist/esm/src/barcodes/helper.js +0 -151
  141. package/dist/esm/src/barcodes/helper.js.map +0 -1
  142. package/dist/esm/src/barcodes/index.js +0 -16
  143. package/dist/esm/src/barcodes/index.js.map +0 -1
  144. package/dist/esm/src/barcodes/pdfRender.js +0 -25
  145. package/dist/esm/src/barcodes/pdfRender.js.map +0 -1
  146. package/dist/esm/src/barcodes/propPanel.js +0 -237
  147. package/dist/esm/src/barcodes/propPanel.js.map +0 -1
  148. package/dist/esm/src/barcodes/types.js +0 -2
  149. package/dist/esm/src/barcodes/types.js.map +0 -1
  150. package/dist/esm/src/barcodes/uiRender.js +0 -87
  151. package/dist/esm/src/barcodes/uiRender.js.map +0 -1
  152. package/dist/esm/src/checkbox/index.js +0 -57
  153. package/dist/esm/src/checkbox/index.js.map +0 -1
  154. package/dist/esm/src/constants.js +0 -3
  155. package/dist/esm/src/constants.js.map +0 -1
  156. package/dist/esm/src/date/date.js +0 -7
  157. package/dist/esm/src/date/date.js.map +0 -1
  158. package/dist/esm/src/date/dateTime.js +0 -7
  159. package/dist/esm/src/date/dateTime.js.map +0 -1
  160. package/dist/esm/src/date/helper.js +0 -422
  161. package/dist/esm/src/date/helper.js.map +0 -1
  162. package/dist/esm/src/date/time.js +0 -7
  163. package/dist/esm/src/date/time.js.map +0 -1
  164. package/dist/esm/src/date/types.js +0 -2
  165. package/dist/esm/src/date/types.js.map +0 -1
  166. package/dist/esm/src/graphics/image.js +0 -170
  167. package/dist/esm/src/graphics/image.js.map +0 -1
  168. package/dist/esm/src/graphics/imagehelper.js +0 -120
  169. package/dist/esm/src/graphics/imagehelper.js.map +0 -1
  170. package/dist/esm/src/graphics/svg.js +0 -110
  171. package/dist/esm/src/graphics/svg.js.map +0 -1
  172. package/dist/esm/src/index.js +0 -21
  173. package/dist/esm/src/index.js.map +0 -1
  174. package/dist/esm/src/multiVariableText/helper.js +0 -50
  175. package/dist/esm/src/multiVariableText/helper.js.map +0 -1
  176. package/dist/esm/src/multiVariableText/index.js +0 -14
  177. package/dist/esm/src/multiVariableText/index.js.map +0 -1
  178. package/dist/esm/src/multiVariableText/pdfRender.js +0 -16
  179. package/dist/esm/src/multiVariableText/pdfRender.js.map +0 -1
  180. package/dist/esm/src/multiVariableText/propPanel.js +0 -145
  181. package/dist/esm/src/multiVariableText/propPanel.js.map +0 -1
  182. package/dist/esm/src/multiVariableText/types.js +0 -2
  183. package/dist/esm/src/multiVariableText/types.js.map +0 -1
  184. package/dist/esm/src/multiVariableText/uiRender.js +0 -142
  185. package/dist/esm/src/multiVariableText/uiRender.js.map +0 -1
  186. package/dist/esm/src/radioGroup/index.js +0 -88
  187. package/dist/esm/src/radioGroup/index.js.map +0 -1
  188. package/dist/esm/src/sanitize.js +0 -50
  189. package/dist/esm/src/sanitize.js.map +0 -1
  190. package/dist/esm/src/select/index.js +0 -170
  191. package/dist/esm/src/select/index.js.map +0 -1
  192. package/dist/esm/src/shapes/line.js +0 -74
  193. package/dist/esm/src/shapes/line.js.map +0 -1
  194. package/dist/esm/src/shapes/rectAndEllipse.js +0 -137
  195. package/dist/esm/src/shapes/rectAndEllipse.js.map +0 -1
  196. package/dist/esm/src/tables/cell.js +0 -121
  197. package/dist/esm/src/tables/cell.js.map +0 -1
  198. package/dist/esm/src/tables/classes.js +0 -460
  199. package/dist/esm/src/tables/classes.js.map +0 -1
  200. package/dist/esm/src/tables/dynamicTemplate.js +0 -62
  201. package/dist/esm/src/tables/dynamicTemplate.js.map +0 -1
  202. package/dist/esm/src/tables/helper.js +0 -181
  203. package/dist/esm/src/tables/helper.js.map +0 -1
  204. package/dist/esm/src/tables/index.js +0 -13
  205. package/dist/esm/src/tables/index.js.map +0 -1
  206. package/dist/esm/src/tables/pdfRender.js +0 -102
  207. package/dist/esm/src/tables/pdfRender.js.map +0 -1
  208. package/dist/esm/src/tables/propPanel.js +0 -105
  209. package/dist/esm/src/tables/propPanel.js.map +0 -1
  210. package/dist/esm/src/tables/tableHelper.js +0 -197
  211. package/dist/esm/src/tables/tableHelper.js.map +0 -1
  212. package/dist/esm/src/tables/types.js +0 -2
  213. package/dist/esm/src/tables/types.js.map +0 -1
  214. package/dist/esm/src/tables/uiRender.js +0 -361
  215. package/dist/esm/src/tables/uiRender.js.map +0 -1
  216. package/dist/esm/src/text/constants.js +0 -94
  217. package/dist/esm/src/text/constants.js.map +0 -1
  218. package/dist/esm/src/text/extraFormatter.js +0 -45
  219. package/dist/esm/src/text/extraFormatter.js.map +0 -1
  220. package/dist/esm/src/text/helper.js +0 -451
  221. package/dist/esm/src/text/helper.js.map +0 -1
  222. package/dist/esm/src/text/icons/index.js +0 -13
  223. package/dist/esm/src/text/icons/index.js.map +0 -1
  224. package/dist/esm/src/text/index.js +0 -13
  225. package/dist/esm/src/text/index.js.map +0 -1
  226. package/dist/esm/src/text/pdfRender.js +0 -163
  227. package/dist/esm/src/text/pdfRender.js.map +0 -1
  228. package/dist/esm/src/text/propPanel.js +0 -158
  229. package/dist/esm/src/text/propPanel.js.map +0 -1
  230. package/dist/esm/src/text/types.js +0 -2
  231. package/dist/esm/src/text/types.js.map +0 -1
  232. package/dist/esm/src/text/uiRender.js +0 -224
  233. package/dist/esm/src/text/uiRender.js.map +0 -1
  234. package/dist/esm/src/utils.js +0 -218
  235. package/dist/esm/src/utils.js.map +0 -1
  236. package/dist/node/__tests__/barcode.test.js +0 -354
  237. package/dist/node/__tests__/barcode.test.js.map +0 -1
  238. package/dist/node/__tests__/multiVariableText.test.js +0 -102
  239. package/dist/node/__tests__/multiVariableText.test.js.map +0 -1
  240. package/dist/node/__tests__/text.test.js +0 -419
  241. package/dist/node/__tests__/text.test.js.map +0 -1
  242. package/dist/node/__tests__/utils.test.js +0 -193
  243. package/dist/node/__tests__/utils.test.js.map +0 -1
  244. package/dist/node/src/barcodes/constants.js +0 -21
  245. package/dist/node/src/barcodes/constants.js.map +0 -1
  246. package/dist/node/src/barcodes/helper.js +0 -161
  247. package/dist/node/src/barcodes/helper.js.map +0 -1
  248. package/dist/node/src/barcodes/index.js +0 -18
  249. package/dist/node/src/barcodes/index.js.map +0 -1
  250. package/dist/node/src/barcodes/pdfRender.js +0 -29
  251. package/dist/node/src/barcodes/pdfRender.js.map +0 -1
  252. package/dist/node/src/barcodes/propPanel.js +0 -241
  253. package/dist/node/src/barcodes/propPanel.js.map +0 -1
  254. package/dist/node/src/barcodes/types.js +0 -3
  255. package/dist/node/src/barcodes/types.js.map +0 -1
  256. package/dist/node/src/barcodes/uiRender.js +0 -91
  257. package/dist/node/src/barcodes/uiRender.js.map +0 -1
  258. package/dist/node/src/checkbox/index.js +0 -62
  259. package/dist/node/src/checkbox/index.js.map +0 -1
  260. package/dist/node/src/constants.js +0 -6
  261. package/dist/node/src/constants.js.map +0 -1
  262. package/dist/node/src/date/date.js +0 -9
  263. package/dist/node/src/date/date.js.map +0 -1
  264. package/dist/node/src/date/dateTime.js +0 -9
  265. package/dist/node/src/date/dateTime.js.map +0 -1
  266. package/dist/node/src/date/helper.js +0 -462
  267. package/dist/node/src/date/helper.js.map +0 -1
  268. package/dist/node/src/date/time.js +0 -9
  269. package/dist/node/src/date/time.js.map +0 -1
  270. package/dist/node/src/date/types.js +0 -3
  271. package/dist/node/src/date/types.js.map +0 -1
  272. package/dist/node/src/graphics/image.js +0 -172
  273. package/dist/node/src/graphics/image.js.map +0 -1
  274. package/dist/node/src/graphics/imagehelper.js +0 -124
  275. package/dist/node/src/graphics/imagehelper.js.map +0 -1
  276. package/dist/node/src/graphics/svg.js +0 -112
  277. package/dist/node/src/graphics/svg.js.map +0 -1
  278. package/dist/node/src/index.js +0 -41
  279. package/dist/node/src/index.js.map +0 -1
  280. package/dist/node/src/multiVariableText/helper.js +0 -55
  281. package/dist/node/src/multiVariableText/helper.js.map +0 -1
  282. package/dist/node/src/multiVariableText/index.js +0 -16
  283. package/dist/node/src/multiVariableText/index.js.map +0 -1
  284. package/dist/node/src/multiVariableText/pdfRender.js +0 -20
  285. package/dist/node/src/multiVariableText/pdfRender.js.map +0 -1
  286. package/dist/node/src/multiVariableText/propPanel.js +0 -148
  287. package/dist/node/src/multiVariableText/propPanel.js.map +0 -1
  288. package/dist/node/src/multiVariableText/types.js +0 -3
  289. package/dist/node/src/multiVariableText/types.js.map +0 -1
  290. package/dist/node/src/multiVariableText/uiRender.js +0 -146
  291. package/dist/node/src/multiVariableText/uiRender.js.map +0 -1
  292. package/dist/node/src/radioGroup/index.js +0 -93
  293. package/dist/node/src/radioGroup/index.js.map +0 -1
  294. package/dist/node/src/sanitize.js +0 -57
  295. package/dist/node/src/sanitize.js.map +0 -1
  296. package/dist/node/src/select/index.js +0 -175
  297. package/dist/node/src/select/index.js.map +0 -1
  298. package/dist/node/src/shapes/line.js +0 -76
  299. package/dist/node/src/shapes/line.js.map +0 -1
  300. package/dist/node/src/shapes/rectAndEllipse.js +0 -140
  301. package/dist/node/src/shapes/rectAndEllipse.js.map +0 -1
  302. package/dist/node/src/tables/cell.js +0 -126
  303. package/dist/node/src/tables/cell.js.map +0 -1
  304. package/dist/node/src/tables/classes.js +0 -467
  305. package/dist/node/src/tables/classes.js.map +0 -1
  306. package/dist/node/src/tables/dynamicTemplate.js +0 -66
  307. package/dist/node/src/tables/dynamicTemplate.js.map +0 -1
  308. package/dist/node/src/tables/helper.js +0 -189
  309. package/dist/node/src/tables/helper.js.map +0 -1
  310. package/dist/node/src/tables/index.js +0 -15
  311. package/dist/node/src/tables/index.js.map +0 -1
  312. package/dist/node/src/tables/pdfRender.js +0 -109
  313. package/dist/node/src/tables/pdfRender.js.map +0 -1
  314. package/dist/node/src/tables/propPanel.js +0 -108
  315. package/dist/node/src/tables/propPanel.js.map +0 -1
  316. package/dist/node/src/tables/tableHelper.js +0 -200
  317. package/dist/node/src/tables/tableHelper.js.map +0 -1
  318. package/dist/node/src/tables/types.js +0 -3
  319. package/dist/node/src/tables/types.js.map +0 -1
  320. package/dist/node/src/tables/uiRender.js +0 -368
  321. package/dist/node/src/tables/uiRender.js.map +0 -1
  322. package/dist/node/src/text/constants.js +0 -97
  323. package/dist/node/src/text/constants.js.map +0 -1
  324. package/dist/node/src/text/extraFormatter.js +0 -49
  325. package/dist/node/src/text/extraFormatter.js.map +0 -1
  326. package/dist/node/src/text/helper.js +0 -498
  327. package/dist/node/src/text/helper.js.map +0 -1
  328. package/dist/node/src/text/icons/index.js +0 -16
  329. package/dist/node/src/text/icons/index.js.map +0 -1
  330. package/dist/node/src/text/index.js +0 -15
  331. package/dist/node/src/text/index.js.map +0 -1
  332. package/dist/node/src/text/pdfRender.js +0 -167
  333. package/dist/node/src/text/pdfRender.js.map +0 -1
  334. package/dist/node/src/text/propPanel.js +0 -161
  335. package/dist/node/src/text/propPanel.js.map +0 -1
  336. package/dist/node/src/text/types.js +0 -3
  337. package/dist/node/src/text/types.js.map +0 -1
  338. package/dist/node/src/text/uiRender.js +0 -231
  339. package/dist/node/src/text/uiRender.js.map +0 -1
  340. package/dist/node/src/utils.js +0 -230
  341. package/dist/node/src/utils.js.map +0 -1
  342. package/dist/types/__tests__/barcode.test.d.ts +0 -1
  343. package/dist/types/__tests__/multiVariableText.test.d.ts +0 -1
  344. package/dist/types/__tests__/text.test.d.ts +0 -1
  345. package/dist/types/__tests__/utils.test.d.ts +0 -1
  346. package/dist/types/src/barcodes/constants.d.ts +0 -4
  347. package/dist/types/src/barcodes/helper.d.ts +0 -21
  348. package/dist/types/src/barcodes/index.d.ts +0 -4
  349. package/dist/types/src/barcodes/pdfRender.d.ts +0 -3
  350. package/dist/types/src/barcodes/propPanel.d.ts +0 -3
  351. package/dist/types/src/barcodes/types.d.ts +0 -10
  352. package/dist/types/src/barcodes/uiRender.d.ts +0 -3
  353. package/dist/types/src/checkbox/index.d.ts +0 -6
  354. package/dist/types/src/constants.d.ts +0 -2
  355. package/dist/types/src/date/date.d.ts +0 -2
  356. package/dist/types/src/date/dateTime.d.ts +0 -2
  357. package/dist/types/src/date/helper.d.ts +0 -8
  358. package/dist/types/src/date/time.d.ts +0 -2
  359. package/dist/types/src/date/types.d.ts +0 -17
  360. package/dist/types/src/graphics/image.d.ts +0 -5
  361. package/dist/types/src/graphics/imagehelper.d.ts +0 -4
  362. package/dist/types/src/graphics/svg.d.ts +0 -4
  363. package/dist/types/src/index.d.ts +0 -19
  364. package/dist/types/src/multiVariableText/helper.d.ts +0 -3
  365. package/dist/types/src/multiVariableText/index.d.ts +0 -4
  366. package/dist/types/src/multiVariableText/pdfRender.d.ts +0 -3
  367. package/dist/types/src/multiVariableText/propPanel.d.ts +0 -3
  368. package/dist/types/src/multiVariableText/types.d.ts +0 -5
  369. package/dist/types/src/multiVariableText/uiRender.d.ts +0 -3
  370. package/dist/types/src/radioGroup/index.d.ts +0 -7
  371. package/dist/types/src/sanitize.d.ts +0 -1
  372. package/dist/types/src/select/index.d.ts +0 -7
  373. package/dist/types/src/shapes/line.d.ts +0 -6
  374. package/dist/types/src/shapes/rectAndEllipse.d.ts +0 -175
  375. package/dist/types/src/tables/cell.d.ts +0 -4
  376. package/dist/types/src/tables/classes.d.ts +0 -69
  377. package/dist/types/src/tables/dynamicTemplate.d.ts +0 -7
  378. package/dist/types/src/tables/helper.d.ts +0 -265
  379. package/dist/types/src/tables/index.d.ts +0 -4
  380. package/dist/types/src/tables/pdfRender.d.ts +0 -3
  381. package/dist/types/src/tables/propPanel.d.ts +0 -3
  382. package/dist/types/src/tables/tableHelper.d.ts +0 -10
  383. package/dist/types/src/tables/types.d.ts +0 -88
  384. package/dist/types/src/tables/uiRender.d.ts +0 -3
  385. package/dist/types/src/text/constants.d.ts +0 -23
  386. package/dist/types/src/text/extraFormatter.d.ts +0 -25
  387. package/dist/types/src/text/helper.d.ts +0 -39
  388. package/dist/types/src/text/icons/index.d.ts +0 -9
  389. package/dist/types/src/text/index.d.ts +0 -4
  390. package/dist/types/src/text/pdfRender.d.ts +0 -3
  391. package/dist/types/src/text/propPanel.d.ts +0 -3
  392. package/dist/types/src/text/types.d.ts +0 -28
  393. package/dist/types/src/text/uiRender.d.ts +0 -11
  394. package/dist/types/src/utils.d.ts +0 -40
  395. package/eslint.config.mjs +0 -22
  396. package/tsconfig.cjs.json +0 -10
  397. package/tsconfig.esm.json +0 -11
  398. 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.9",
4
- "sideEffects": false,
5
- "author": "hand-dot",
6
- "license": "MIT",
3
+ "version": "5.5.10-dev.125",
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",
66
+ "dompurify": "^3.3.3",
62
67
  "fontkit": "^2.0.2",
63
- "dompurify": "^3.3.1",
64
- "lucide": "^0.575.0"
68
+ "lucide": "^0.577.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
- "@types/fontkit": "^2.0.8",
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';