@pdfme/schemas 5.5.10 → 6.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +44 -60
- package/src/barcodes/helper.ts +2 -2
- package/src/barcodes/types.ts +2 -2
- package/src/builtins.ts +8 -0
- package/src/date/helper.ts +118 -70
- package/src/graphics/image.ts +3 -3
- package/src/graphics/signature.ts +136 -0
- package/src/index.ts +4 -4
- package/src/multiVariableText/propPanel.ts +17 -8
- package/src/multiVariableText/types.ts +2 -2
- package/src/multiVariableText/uiRender.ts +18 -31
- package/src/multiVariableText/variables.ts +63 -0
- package/src/shapes/rectAndEllipse.ts +2 -2
- package/src/tables/tableHelper.ts +3 -2
- package/src/tables/types.ts +2 -2
- package/src/tables/uiRender.ts +1 -1
- package/src/tables.ts +1 -0
- package/src/text/helper.ts +22 -5
- package/src/text/pdfRender.ts +2 -5
- package/src/text/types.ts +2 -2
- package/src/utils.ts +87 -14
- package/tsconfig.build.json +14 -0
- package/tsconfig.json +14 -4
- package/vite.config.mts +51 -0
- package/dist/cjs/__tests__/barcode.test.js +0 -354
- package/dist/cjs/__tests__/barcode.test.js.map +0 -1
- package/dist/cjs/__tests__/multiVariableText.test.js +0 -102
- package/dist/cjs/__tests__/multiVariableText.test.js.map +0 -1
- package/dist/cjs/__tests__/text.test.js +0 -419
- package/dist/cjs/__tests__/text.test.js.map +0 -1
- package/dist/cjs/__tests__/utils.test.js +0 -193
- package/dist/cjs/__tests__/utils.test.js.map +0 -1
- package/dist/cjs/src/barcodes/constants.js +0 -21
- package/dist/cjs/src/barcodes/constants.js.map +0 -1
- package/dist/cjs/src/barcodes/helper.js +0 -161
- package/dist/cjs/src/barcodes/helper.js.map +0 -1
- package/dist/cjs/src/barcodes/index.js +0 -18
- package/dist/cjs/src/barcodes/index.js.map +0 -1
- package/dist/cjs/src/barcodes/pdfRender.js +0 -29
- package/dist/cjs/src/barcodes/pdfRender.js.map +0 -1
- package/dist/cjs/src/barcodes/propPanel.js +0 -241
- package/dist/cjs/src/barcodes/propPanel.js.map +0 -1
- package/dist/cjs/src/barcodes/types.js +0 -3
- package/dist/cjs/src/barcodes/types.js.map +0 -1
- package/dist/cjs/src/barcodes/uiRender.js +0 -91
- package/dist/cjs/src/barcodes/uiRender.js.map +0 -1
- package/dist/cjs/src/checkbox/index.js +0 -62
- package/dist/cjs/src/checkbox/index.js.map +0 -1
- package/dist/cjs/src/constants.js +0 -6
- package/dist/cjs/src/constants.js.map +0 -1
- package/dist/cjs/src/date/date.js +0 -9
- package/dist/cjs/src/date/date.js.map +0 -1
- package/dist/cjs/src/date/dateTime.js +0 -9
- package/dist/cjs/src/date/dateTime.js.map +0 -1
- package/dist/cjs/src/date/helper.js +0 -462
- package/dist/cjs/src/date/helper.js.map +0 -1
- package/dist/cjs/src/date/time.js +0 -9
- package/dist/cjs/src/date/time.js.map +0 -1
- package/dist/cjs/src/date/types.js +0 -3
- package/dist/cjs/src/date/types.js.map +0 -1
- package/dist/cjs/src/graphics/image.js +0 -172
- package/dist/cjs/src/graphics/image.js.map +0 -1
- package/dist/cjs/src/graphics/imagehelper.js +0 -124
- package/dist/cjs/src/graphics/imagehelper.js.map +0 -1
- package/dist/cjs/src/graphics/svg.js +0 -112
- package/dist/cjs/src/graphics/svg.js.map +0 -1
- package/dist/cjs/src/index.js +0 -41
- package/dist/cjs/src/index.js.map +0 -1
- package/dist/cjs/src/multiVariableText/helper.js +0 -55
- package/dist/cjs/src/multiVariableText/helper.js.map +0 -1
- package/dist/cjs/src/multiVariableText/index.js +0 -16
- package/dist/cjs/src/multiVariableText/index.js.map +0 -1
- package/dist/cjs/src/multiVariableText/pdfRender.js +0 -20
- package/dist/cjs/src/multiVariableText/pdfRender.js.map +0 -1
- package/dist/cjs/src/multiVariableText/propPanel.js +0 -148
- package/dist/cjs/src/multiVariableText/propPanel.js.map +0 -1
- package/dist/cjs/src/multiVariableText/types.js +0 -3
- package/dist/cjs/src/multiVariableText/types.js.map +0 -1
- package/dist/cjs/src/multiVariableText/uiRender.js +0 -146
- package/dist/cjs/src/multiVariableText/uiRender.js.map +0 -1
- package/dist/cjs/src/radioGroup/index.js +0 -93
- package/dist/cjs/src/radioGroup/index.js.map +0 -1
- package/dist/cjs/src/sanitize.js +0 -57
- package/dist/cjs/src/sanitize.js.map +0 -1
- package/dist/cjs/src/select/index.js +0 -175
- package/dist/cjs/src/select/index.js.map +0 -1
- package/dist/cjs/src/shapes/line.js +0 -76
- package/dist/cjs/src/shapes/line.js.map +0 -1
- package/dist/cjs/src/shapes/rectAndEllipse.js +0 -140
- package/dist/cjs/src/shapes/rectAndEllipse.js.map +0 -1
- package/dist/cjs/src/tables/cell.js +0 -126
- package/dist/cjs/src/tables/cell.js.map +0 -1
- package/dist/cjs/src/tables/classes.js +0 -467
- package/dist/cjs/src/tables/classes.js.map +0 -1
- package/dist/cjs/src/tables/dynamicTemplate.js +0 -66
- package/dist/cjs/src/tables/dynamicTemplate.js.map +0 -1
- package/dist/cjs/src/tables/helper.js +0 -189
- package/dist/cjs/src/tables/helper.js.map +0 -1
- package/dist/cjs/src/tables/index.js +0 -15
- package/dist/cjs/src/tables/index.js.map +0 -1
- package/dist/cjs/src/tables/pdfRender.js +0 -109
- package/dist/cjs/src/tables/pdfRender.js.map +0 -1
- package/dist/cjs/src/tables/propPanel.js +0 -108
- package/dist/cjs/src/tables/propPanel.js.map +0 -1
- package/dist/cjs/src/tables/tableHelper.js +0 -200
- package/dist/cjs/src/tables/tableHelper.js.map +0 -1
- package/dist/cjs/src/tables/types.js +0 -3
- package/dist/cjs/src/tables/types.js.map +0 -1
- package/dist/cjs/src/tables/uiRender.js +0 -368
- package/dist/cjs/src/tables/uiRender.js.map +0 -1
- package/dist/cjs/src/text/constants.js +0 -97
- package/dist/cjs/src/text/constants.js.map +0 -1
- package/dist/cjs/src/text/extraFormatter.js +0 -49
- package/dist/cjs/src/text/extraFormatter.js.map +0 -1
- package/dist/cjs/src/text/helper.js +0 -504
- package/dist/cjs/src/text/helper.js.map +0 -1
- package/dist/cjs/src/text/icons/index.js +0 -16
- package/dist/cjs/src/text/icons/index.js.map +0 -1
- package/dist/cjs/src/text/index.js +0 -15
- package/dist/cjs/src/text/index.js.map +0 -1
- package/dist/cjs/src/text/pdfRender.js +0 -170
- package/dist/cjs/src/text/pdfRender.js.map +0 -1
- package/dist/cjs/src/text/propPanel.js +0 -161
- package/dist/cjs/src/text/propPanel.js.map +0 -1
- package/dist/cjs/src/text/types.js +0 -3
- package/dist/cjs/src/text/types.js.map +0 -1
- package/dist/cjs/src/text/uiRender.js +0 -231
- package/dist/cjs/src/text/uiRender.js.map +0 -1
- package/dist/cjs/src/utils.js +0 -230
- package/dist/cjs/src/utils.js.map +0 -1
- package/dist/esm/__tests__/barcode.test.js +0 -349
- package/dist/esm/__tests__/barcode.test.js.map +0 -1
- package/dist/esm/__tests__/multiVariableText.test.js +0 -100
- package/dist/esm/__tests__/multiVariableText.test.js.map +0 -1
- package/dist/esm/__tests__/text.test.js +0 -384
- package/dist/esm/__tests__/text.test.js.map +0 -1
- package/dist/esm/__tests__/utils.test.js +0 -191
- package/dist/esm/__tests__/utils.test.js.map +0 -1
- package/dist/esm/src/barcodes/constants.js +0 -18
- package/dist/esm/src/barcodes/constants.js.map +0 -1
- package/dist/esm/src/barcodes/helper.js +0 -151
- package/dist/esm/src/barcodes/helper.js.map +0 -1
- package/dist/esm/src/barcodes/index.js +0 -16
- package/dist/esm/src/barcodes/index.js.map +0 -1
- package/dist/esm/src/barcodes/pdfRender.js +0 -25
- package/dist/esm/src/barcodes/pdfRender.js.map +0 -1
- package/dist/esm/src/barcodes/propPanel.js +0 -237
- package/dist/esm/src/barcodes/propPanel.js.map +0 -1
- package/dist/esm/src/barcodes/types.js +0 -2
- package/dist/esm/src/barcodes/types.js.map +0 -1
- package/dist/esm/src/barcodes/uiRender.js +0 -87
- package/dist/esm/src/barcodes/uiRender.js.map +0 -1
- package/dist/esm/src/checkbox/index.js +0 -57
- package/dist/esm/src/checkbox/index.js.map +0 -1
- package/dist/esm/src/constants.js +0 -3
- package/dist/esm/src/constants.js.map +0 -1
- package/dist/esm/src/date/date.js +0 -7
- package/dist/esm/src/date/date.js.map +0 -1
- package/dist/esm/src/date/dateTime.js +0 -7
- package/dist/esm/src/date/dateTime.js.map +0 -1
- package/dist/esm/src/date/helper.js +0 -422
- package/dist/esm/src/date/helper.js.map +0 -1
- package/dist/esm/src/date/time.js +0 -7
- package/dist/esm/src/date/time.js.map +0 -1
- package/dist/esm/src/date/types.js +0 -2
- package/dist/esm/src/date/types.js.map +0 -1
- package/dist/esm/src/graphics/image.js +0 -170
- package/dist/esm/src/graphics/image.js.map +0 -1
- package/dist/esm/src/graphics/imagehelper.js +0 -120
- package/dist/esm/src/graphics/imagehelper.js.map +0 -1
- package/dist/esm/src/graphics/svg.js +0 -110
- package/dist/esm/src/graphics/svg.js.map +0 -1
- package/dist/esm/src/index.js +0 -21
- package/dist/esm/src/index.js.map +0 -1
- package/dist/esm/src/multiVariableText/helper.js +0 -50
- package/dist/esm/src/multiVariableText/helper.js.map +0 -1
- package/dist/esm/src/multiVariableText/index.js +0 -14
- package/dist/esm/src/multiVariableText/index.js.map +0 -1
- package/dist/esm/src/multiVariableText/pdfRender.js +0 -16
- package/dist/esm/src/multiVariableText/pdfRender.js.map +0 -1
- package/dist/esm/src/multiVariableText/propPanel.js +0 -145
- package/dist/esm/src/multiVariableText/propPanel.js.map +0 -1
- package/dist/esm/src/multiVariableText/types.js +0 -2
- package/dist/esm/src/multiVariableText/types.js.map +0 -1
- package/dist/esm/src/multiVariableText/uiRender.js +0 -142
- package/dist/esm/src/multiVariableText/uiRender.js.map +0 -1
- package/dist/esm/src/radioGroup/index.js +0 -88
- package/dist/esm/src/radioGroup/index.js.map +0 -1
- package/dist/esm/src/sanitize.js +0 -50
- package/dist/esm/src/sanitize.js.map +0 -1
- package/dist/esm/src/select/index.js +0 -170
- package/dist/esm/src/select/index.js.map +0 -1
- package/dist/esm/src/shapes/line.js +0 -74
- package/dist/esm/src/shapes/line.js.map +0 -1
- package/dist/esm/src/shapes/rectAndEllipse.js +0 -137
- package/dist/esm/src/shapes/rectAndEllipse.js.map +0 -1
- package/dist/esm/src/tables/cell.js +0 -121
- package/dist/esm/src/tables/cell.js.map +0 -1
- package/dist/esm/src/tables/classes.js +0 -460
- package/dist/esm/src/tables/classes.js.map +0 -1
- package/dist/esm/src/tables/dynamicTemplate.js +0 -62
- package/dist/esm/src/tables/dynamicTemplate.js.map +0 -1
- package/dist/esm/src/tables/helper.js +0 -181
- package/dist/esm/src/tables/helper.js.map +0 -1
- package/dist/esm/src/tables/index.js +0 -13
- package/dist/esm/src/tables/index.js.map +0 -1
- package/dist/esm/src/tables/pdfRender.js +0 -102
- package/dist/esm/src/tables/pdfRender.js.map +0 -1
- package/dist/esm/src/tables/propPanel.js +0 -105
- package/dist/esm/src/tables/propPanel.js.map +0 -1
- package/dist/esm/src/tables/tableHelper.js +0 -197
- package/dist/esm/src/tables/tableHelper.js.map +0 -1
- package/dist/esm/src/tables/types.js +0 -2
- package/dist/esm/src/tables/types.js.map +0 -1
- package/dist/esm/src/tables/uiRender.js +0 -361
- package/dist/esm/src/tables/uiRender.js.map +0 -1
- package/dist/esm/src/text/constants.js +0 -94
- package/dist/esm/src/text/constants.js.map +0 -1
- package/dist/esm/src/text/extraFormatter.js +0 -45
- package/dist/esm/src/text/extraFormatter.js.map +0 -1
- package/dist/esm/src/text/helper.js +0 -457
- package/dist/esm/src/text/helper.js.map +0 -1
- package/dist/esm/src/text/icons/index.js +0 -13
- package/dist/esm/src/text/icons/index.js.map +0 -1
- package/dist/esm/src/text/index.js +0 -13
- package/dist/esm/src/text/index.js.map +0 -1
- package/dist/esm/src/text/pdfRender.js +0 -166
- package/dist/esm/src/text/pdfRender.js.map +0 -1
- package/dist/esm/src/text/propPanel.js +0 -158
- package/dist/esm/src/text/propPanel.js.map +0 -1
- package/dist/esm/src/text/types.js +0 -2
- package/dist/esm/src/text/types.js.map +0 -1
- package/dist/esm/src/text/uiRender.js +0 -224
- package/dist/esm/src/text/uiRender.js.map +0 -1
- package/dist/esm/src/utils.js +0 -218
- package/dist/esm/src/utils.js.map +0 -1
- package/dist/node/__tests__/barcode.test.js +0 -354
- package/dist/node/__tests__/barcode.test.js.map +0 -1
- package/dist/node/__tests__/multiVariableText.test.js +0 -102
- package/dist/node/__tests__/multiVariableText.test.js.map +0 -1
- package/dist/node/__tests__/text.test.js +0 -419
- package/dist/node/__tests__/text.test.js.map +0 -1
- package/dist/node/__tests__/utils.test.js +0 -193
- package/dist/node/__tests__/utils.test.js.map +0 -1
- package/dist/node/src/barcodes/constants.js +0 -21
- package/dist/node/src/barcodes/constants.js.map +0 -1
- package/dist/node/src/barcodes/helper.js +0 -161
- package/dist/node/src/barcodes/helper.js.map +0 -1
- package/dist/node/src/barcodes/index.js +0 -18
- package/dist/node/src/barcodes/index.js.map +0 -1
- package/dist/node/src/barcodes/pdfRender.js +0 -29
- package/dist/node/src/barcodes/pdfRender.js.map +0 -1
- package/dist/node/src/barcodes/propPanel.js +0 -241
- package/dist/node/src/barcodes/propPanel.js.map +0 -1
- package/dist/node/src/barcodes/types.js +0 -3
- package/dist/node/src/barcodes/types.js.map +0 -1
- package/dist/node/src/barcodes/uiRender.js +0 -91
- package/dist/node/src/barcodes/uiRender.js.map +0 -1
- package/dist/node/src/checkbox/index.js +0 -62
- package/dist/node/src/checkbox/index.js.map +0 -1
- package/dist/node/src/constants.js +0 -6
- package/dist/node/src/constants.js.map +0 -1
- package/dist/node/src/date/date.js +0 -9
- package/dist/node/src/date/date.js.map +0 -1
- package/dist/node/src/date/dateTime.js +0 -9
- package/dist/node/src/date/dateTime.js.map +0 -1
- package/dist/node/src/date/helper.js +0 -462
- package/dist/node/src/date/helper.js.map +0 -1
- package/dist/node/src/date/time.js +0 -9
- package/dist/node/src/date/time.js.map +0 -1
- package/dist/node/src/date/types.js +0 -3
- package/dist/node/src/date/types.js.map +0 -1
- package/dist/node/src/graphics/image.js +0 -172
- package/dist/node/src/graphics/image.js.map +0 -1
- package/dist/node/src/graphics/imagehelper.js +0 -124
- package/dist/node/src/graphics/imagehelper.js.map +0 -1
- package/dist/node/src/graphics/svg.js +0 -112
- package/dist/node/src/graphics/svg.js.map +0 -1
- package/dist/node/src/index.js +0 -41
- package/dist/node/src/index.js.map +0 -1
- package/dist/node/src/multiVariableText/helper.js +0 -55
- package/dist/node/src/multiVariableText/helper.js.map +0 -1
- package/dist/node/src/multiVariableText/index.js +0 -16
- package/dist/node/src/multiVariableText/index.js.map +0 -1
- package/dist/node/src/multiVariableText/pdfRender.js +0 -20
- package/dist/node/src/multiVariableText/pdfRender.js.map +0 -1
- package/dist/node/src/multiVariableText/propPanel.js +0 -148
- package/dist/node/src/multiVariableText/propPanel.js.map +0 -1
- package/dist/node/src/multiVariableText/types.js +0 -3
- package/dist/node/src/multiVariableText/types.js.map +0 -1
- package/dist/node/src/multiVariableText/uiRender.js +0 -146
- package/dist/node/src/multiVariableText/uiRender.js.map +0 -1
- package/dist/node/src/radioGroup/index.js +0 -93
- package/dist/node/src/radioGroup/index.js.map +0 -1
- package/dist/node/src/sanitize.js +0 -57
- package/dist/node/src/sanitize.js.map +0 -1
- package/dist/node/src/select/index.js +0 -175
- package/dist/node/src/select/index.js.map +0 -1
- package/dist/node/src/shapes/line.js +0 -76
- package/dist/node/src/shapes/line.js.map +0 -1
- package/dist/node/src/shapes/rectAndEllipse.js +0 -140
- package/dist/node/src/shapes/rectAndEllipse.js.map +0 -1
- package/dist/node/src/tables/cell.js +0 -126
- package/dist/node/src/tables/cell.js.map +0 -1
- package/dist/node/src/tables/classes.js +0 -467
- package/dist/node/src/tables/classes.js.map +0 -1
- package/dist/node/src/tables/dynamicTemplate.js +0 -66
- package/dist/node/src/tables/dynamicTemplate.js.map +0 -1
- package/dist/node/src/tables/helper.js +0 -189
- package/dist/node/src/tables/helper.js.map +0 -1
- package/dist/node/src/tables/index.js +0 -15
- package/dist/node/src/tables/index.js.map +0 -1
- package/dist/node/src/tables/pdfRender.js +0 -109
- package/dist/node/src/tables/pdfRender.js.map +0 -1
- package/dist/node/src/tables/propPanel.js +0 -108
- package/dist/node/src/tables/propPanel.js.map +0 -1
- package/dist/node/src/tables/tableHelper.js +0 -200
- package/dist/node/src/tables/tableHelper.js.map +0 -1
- package/dist/node/src/tables/types.js +0 -3
- package/dist/node/src/tables/types.js.map +0 -1
- package/dist/node/src/tables/uiRender.js +0 -368
- package/dist/node/src/tables/uiRender.js.map +0 -1
- package/dist/node/src/text/constants.js +0 -97
- package/dist/node/src/text/constants.js.map +0 -1
- package/dist/node/src/text/extraFormatter.js +0 -49
- package/dist/node/src/text/extraFormatter.js.map +0 -1
- package/dist/node/src/text/helper.js +0 -504
- package/dist/node/src/text/helper.js.map +0 -1
- package/dist/node/src/text/icons/index.js +0 -16
- package/dist/node/src/text/icons/index.js.map +0 -1
- package/dist/node/src/text/index.js +0 -15
- package/dist/node/src/text/index.js.map +0 -1
- package/dist/node/src/text/pdfRender.js +0 -170
- package/dist/node/src/text/pdfRender.js.map +0 -1
- package/dist/node/src/text/propPanel.js +0 -161
- package/dist/node/src/text/propPanel.js.map +0 -1
- package/dist/node/src/text/types.js +0 -3
- package/dist/node/src/text/types.js.map +0 -1
- package/dist/node/src/text/uiRender.js +0 -231
- package/dist/node/src/text/uiRender.js.map +0 -1
- package/dist/node/src/utils.js +0 -230
- package/dist/node/src/utils.js.map +0 -1
- package/dist/types/__tests__/barcode.test.d.ts +0 -1
- package/dist/types/__tests__/multiVariableText.test.d.ts +0 -1
- package/dist/types/__tests__/text.test.d.ts +0 -1
- package/dist/types/__tests__/utils.test.d.ts +0 -1
- package/dist/types/src/barcodes/constants.d.ts +0 -4
- package/dist/types/src/barcodes/helper.d.ts +0 -21
- package/dist/types/src/barcodes/index.d.ts +0 -4
- package/dist/types/src/barcodes/pdfRender.d.ts +0 -3
- package/dist/types/src/barcodes/propPanel.d.ts +0 -3
- package/dist/types/src/barcodes/types.d.ts +0 -10
- package/dist/types/src/barcodes/uiRender.d.ts +0 -3
- package/dist/types/src/checkbox/index.d.ts +0 -6
- package/dist/types/src/constants.d.ts +0 -2
- package/dist/types/src/date/date.d.ts +0 -2
- package/dist/types/src/date/dateTime.d.ts +0 -2
- package/dist/types/src/date/helper.d.ts +0 -8
- package/dist/types/src/date/time.d.ts +0 -2
- package/dist/types/src/date/types.d.ts +0 -17
- package/dist/types/src/graphics/image.d.ts +0 -5
- package/dist/types/src/graphics/imagehelper.d.ts +0 -4
- package/dist/types/src/graphics/svg.d.ts +0 -4
- package/dist/types/src/index.d.ts +0 -19
- package/dist/types/src/multiVariableText/helper.d.ts +0 -3
- package/dist/types/src/multiVariableText/index.d.ts +0 -4
- package/dist/types/src/multiVariableText/pdfRender.d.ts +0 -3
- package/dist/types/src/multiVariableText/propPanel.d.ts +0 -3
- package/dist/types/src/multiVariableText/types.d.ts +0 -5
- package/dist/types/src/multiVariableText/uiRender.d.ts +0 -3
- package/dist/types/src/radioGroup/index.d.ts +0 -7
- package/dist/types/src/sanitize.d.ts +0 -1
- package/dist/types/src/select/index.d.ts +0 -7
- package/dist/types/src/shapes/line.d.ts +0 -6
- package/dist/types/src/shapes/rectAndEllipse.d.ts +0 -175
- package/dist/types/src/tables/cell.d.ts +0 -4
- package/dist/types/src/tables/classes.d.ts +0 -69
- package/dist/types/src/tables/dynamicTemplate.d.ts +0 -7
- package/dist/types/src/tables/helper.d.ts +0 -265
- package/dist/types/src/tables/index.d.ts +0 -4
- package/dist/types/src/tables/pdfRender.d.ts +0 -3
- package/dist/types/src/tables/propPanel.d.ts +0 -3
- package/dist/types/src/tables/tableHelper.d.ts +0 -10
- package/dist/types/src/tables/types.d.ts +0 -88
- package/dist/types/src/tables/uiRender.d.ts +0 -3
- package/dist/types/src/text/constants.d.ts +0 -23
- package/dist/types/src/text/extraFormatter.d.ts +0 -25
- package/dist/types/src/text/helper.d.ts +0 -39
- package/dist/types/src/text/icons/index.d.ts +0 -9
- package/dist/types/src/text/index.d.ts +0 -4
- package/dist/types/src/text/pdfRender.d.ts +0 -3
- package/dist/types/src/text/propPanel.d.ts +0 -3
- package/dist/types/src/text/types.d.ts +0 -28
- package/dist/types/src/text/uiRender.d.ts +0 -11
- package/dist/types/src/utils.d.ts +0 -40
- package/eslint.config.mjs +0 -22
- package/tsconfig.cjs.json +0 -10
- package/tsconfig.esm.json +0 -11
- package/tsconfig.node.json +0 -11
|
@@ -1,13 +1,22 @@
|
|
|
1
1
|
import { propPanel as parentPropPanel } from '../text/propPanel.js';
|
|
2
2
|
import { PropPanel, PropPanelWidgetProps } from '@pdfme/common';
|
|
3
3
|
import { MultiVariableTextSchema } from './types.js';
|
|
4
|
+
import { getVariableNames } from './variables.js';
|
|
4
5
|
|
|
5
6
|
const mapDynamicVariables = (props: PropPanelWidgetProps) => {
|
|
6
7
|
const { rootElement, changeSchemas, activeSchema, i18n, options } = props;
|
|
7
8
|
|
|
8
9
|
const mvtSchema = activeSchema as unknown as MultiVariableTextSchema;
|
|
9
10
|
const text = mvtSchema.text || '';
|
|
10
|
-
|
|
11
|
+
let variables: Record<string, string> = {};
|
|
12
|
+
try {
|
|
13
|
+
const parsed = JSON.parse(mvtSchema.content || '{}');
|
|
14
|
+
if (parsed && typeof parsed === 'object' && !Array.isArray(parsed)) {
|
|
15
|
+
variables = parsed as Record<string, string>;
|
|
16
|
+
}
|
|
17
|
+
} catch {
|
|
18
|
+
// content is not valid JSON (e.g. a plain string value) — start fresh
|
|
19
|
+
}
|
|
11
20
|
const variablesChanged = updateVariablesFromText(text, variables);
|
|
12
21
|
const varNames = Object.keys(variables);
|
|
13
22
|
|
|
@@ -113,7 +122,7 @@ export const propPanel: PropPanel<MultiVariableTextSchema> = {
|
|
|
113
122
|
},
|
|
114
123
|
};
|
|
115
124
|
},
|
|
116
|
-
widgets: { ...
|
|
125
|
+
widgets: { ...parentPropPanel.widgets, mapDynamicVariables },
|
|
117
126
|
defaultSchema: {
|
|
118
127
|
...parentPropPanel.defaultSchema,
|
|
119
128
|
readOnly: false,
|
|
@@ -127,14 +136,14 @@ export const propPanel: PropPanel<MultiVariableTextSchema> = {
|
|
|
127
136
|
};
|
|
128
137
|
|
|
129
138
|
const updateVariablesFromText = (text: string, variables: Record<string, string>): boolean => {
|
|
130
|
-
const
|
|
131
|
-
const matches = text.match(regex);
|
|
139
|
+
const matches = getVariableNames(text);
|
|
132
140
|
let changed = false;
|
|
133
141
|
|
|
134
|
-
if (matches) {
|
|
142
|
+
if (matches.length > 0) {
|
|
143
|
+
const uniqueMatches = new Set(matches);
|
|
144
|
+
|
|
135
145
|
// Add any new variables
|
|
136
|
-
for (const
|
|
137
|
-
const variableName = match.replace('{', '').replace('}', '');
|
|
146
|
+
for (const variableName of uniqueMatches) {
|
|
138
147
|
if (!(variableName in variables)) {
|
|
139
148
|
// NOTE: We upper case the variable name as the default value
|
|
140
149
|
variables[variableName] = variableName.toUpperCase();
|
|
@@ -143,7 +152,7 @@ const updateVariablesFromText = (text: string, variables: Record<string, string>
|
|
|
143
152
|
}
|
|
144
153
|
// Remove any that no longer exist
|
|
145
154
|
Object.keys(variables).forEach((variableName) => {
|
|
146
|
-
if (!
|
|
155
|
+
if (!uniqueMatches.has(variableName)) {
|
|
147
156
|
delete variables[variableName];
|
|
148
157
|
changed = true;
|
|
149
158
|
}
|
|
@@ -8,6 +8,7 @@ import {
|
|
|
8
8
|
import { isEditable } from '../utils.js';
|
|
9
9
|
import { getFontKitFont } from '../text/helper.js';
|
|
10
10
|
import { substituteVariables } from './helper.js';
|
|
11
|
+
import { countUniqueVariableNames, getVariableIndices } from './variables.js';
|
|
11
12
|
|
|
12
13
|
export const uiRender = async (arg: UIRenderProps<MultiVariableTextSchema>) => {
|
|
13
14
|
const { value, schema, rootElement, mode, onChange, ...rest } = arg;
|
|
@@ -68,9 +69,17 @@ const formUiRender = async (arg: UIRenderProps<MultiVariableTextSchema>) => {
|
|
|
68
69
|
rootElement.parentElement.style.outline = '';
|
|
69
70
|
}
|
|
70
71
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
72
|
+
let variables: Record<string, string> = {};
|
|
73
|
+
if (value) {
|
|
74
|
+
try {
|
|
75
|
+
const parsed = JSON.parse(value);
|
|
76
|
+
if (parsed && typeof parsed === 'object' && !Array.isArray(parsed)) {
|
|
77
|
+
variables = parsed as Record<string, string>;
|
|
78
|
+
}
|
|
79
|
+
} catch {
|
|
80
|
+
// value is not valid JSON — use empty variables
|
|
81
|
+
}
|
|
82
|
+
}
|
|
74
83
|
const variableIndices = getVariableIndices(rawText);
|
|
75
84
|
const substitutedText = substituteVariables(rawText, variables);
|
|
76
85
|
const font = options?.font || getDefaultFont();
|
|
@@ -86,16 +95,18 @@ const formUiRender = async (arg: UIRenderProps<MultiVariableTextSchema>) => {
|
|
|
86
95
|
let inVarString = false;
|
|
87
96
|
|
|
88
97
|
for (let i = 0; i < rawText.length; i++) {
|
|
89
|
-
|
|
98
|
+
const variableName = variableIndices.get(i);
|
|
99
|
+
|
|
100
|
+
if (variableName) {
|
|
90
101
|
inVarString = true;
|
|
91
102
|
let span = document.createElement('span');
|
|
92
103
|
span.style.outline = `${theme.colorPrimary} dashed 1px`;
|
|
93
104
|
makeElementPlainTextContentEditable(span);
|
|
94
|
-
span.textContent = variables[
|
|
105
|
+
span.textContent = variables[variableName];
|
|
95
106
|
span.addEventListener('blur', (e: Event) => {
|
|
96
107
|
const newValue = (e.target as HTMLSpanElement).textContent || '';
|
|
97
|
-
if (newValue !== variables[
|
|
98
|
-
variables[
|
|
108
|
+
if (newValue !== variables[variableName]) {
|
|
109
|
+
variables[variableName] = newValue;
|
|
99
110
|
if (onChange) onChange({ key: 'content', value: JSON.stringify(variables) });
|
|
100
111
|
if (stopEditing) stopEditing();
|
|
101
112
|
}
|
|
@@ -114,30 +125,6 @@ const formUiRender = async (arg: UIRenderProps<MultiVariableTextSchema>) => {
|
|
|
114
125
|
}
|
|
115
126
|
};
|
|
116
127
|
|
|
117
|
-
const getVariableIndices = (content: string) => {
|
|
118
|
-
const regex = /\{([^}]+)}/g;
|
|
119
|
-
const indices = [];
|
|
120
|
-
let match;
|
|
121
|
-
|
|
122
|
-
while ((match = regex.exec(content)) !== null) {
|
|
123
|
-
indices[match.index] = match[1];
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
return indices;
|
|
127
|
-
};
|
|
128
|
-
|
|
129
|
-
const countUniqueVariableNames = (content: string) => {
|
|
130
|
-
const regex = /\{([^}]+)}/g;
|
|
131
|
-
const uniqueMatchesSet = new Set();
|
|
132
|
-
let match;
|
|
133
|
-
|
|
134
|
-
while ((match = regex.exec(content)) !== null) {
|
|
135
|
-
uniqueMatchesSet.add(match[1]);
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
return uniqueMatchesSet.size;
|
|
139
|
-
};
|
|
140
|
-
|
|
141
128
|
/**
|
|
142
129
|
* An optimisation to try to minimise jank while typing.
|
|
143
130
|
* Only check whether variables were modified based on certain key presses.
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
export type VariableMatch = {
|
|
2
|
+
name: string;
|
|
3
|
+
startIndex: number;
|
|
4
|
+
endIndex: number;
|
|
5
|
+
};
|
|
6
|
+
|
|
7
|
+
export type VariableIndices = Map<number, string>;
|
|
8
|
+
|
|
9
|
+
export const visitVariables = (
|
|
10
|
+
content: string,
|
|
11
|
+
visitor: (match: VariableMatch) => void,
|
|
12
|
+
): void => {
|
|
13
|
+
let startIndex = -1;
|
|
14
|
+
|
|
15
|
+
for (let i = 0; i < content.length; i++) {
|
|
16
|
+
const char = content[i];
|
|
17
|
+
|
|
18
|
+
if (char === '{') {
|
|
19
|
+
// Restart from the latest opener so malformed input behaves like /{([^{}]+)}/g
|
|
20
|
+
// without requiring backtracking.
|
|
21
|
+
startIndex = i;
|
|
22
|
+
continue;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
if (char === '}' && startIndex !== -1) {
|
|
26
|
+
const name = content.slice(startIndex + 1, i);
|
|
27
|
+
if (name.length > 0) {
|
|
28
|
+
visitor({ name, startIndex, endIndex: i });
|
|
29
|
+
}
|
|
30
|
+
startIndex = -1;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
export const getVariableIndices = (content: string): VariableIndices => {
|
|
36
|
+
const indices: VariableIndices = new Map();
|
|
37
|
+
|
|
38
|
+
visitVariables(content, ({ name, startIndex }) => {
|
|
39
|
+
indices.set(startIndex, name);
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
return indices;
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
export const countUniqueVariableNames = (content: string): number => {
|
|
46
|
+
const variableNames = new Set<string>();
|
|
47
|
+
|
|
48
|
+
visitVariables(content, ({ name }) => {
|
|
49
|
+
variableNames.add(name);
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
return variableNames.size;
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
export const getVariableNames = (content: string): string[] => {
|
|
56
|
+
const variableNames: string[] = [];
|
|
57
|
+
|
|
58
|
+
visitVariables(content, ({ name }) => {
|
|
59
|
+
variableNames.push(name);
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
return variableNames;
|
|
63
|
+
};
|
|
@@ -139,13 +139,13 @@ const getPropPanelSchema = (type: 'rectangle' | 'ellipse') => ({
|
|
|
139
139
|
},
|
|
140
140
|
});
|
|
141
141
|
|
|
142
|
-
export const rectangle = {
|
|
142
|
+
export const rectangle: Plugin<ShapeSchema> = {
|
|
143
143
|
...shape,
|
|
144
144
|
propPanel: getPropPanelSchema('rectangle'),
|
|
145
145
|
icon: createSvgStr(Square),
|
|
146
146
|
};
|
|
147
147
|
|
|
148
|
-
export const ellipse = {
|
|
148
|
+
export const ellipse: Plugin<ShapeSchema> = {
|
|
149
149
|
...shape,
|
|
150
150
|
propPanel: getPropPanelSchema('ellipse'),
|
|
151
151
|
icon: createSvgStr(Circle),
|
|
@@ -123,7 +123,7 @@ function cellStyles(
|
|
|
123
123
|
}
|
|
124
124
|
const otherStyles = Object.assign({}, styles.styles, sectionStyles);
|
|
125
125
|
|
|
126
|
-
const colStyles = styles.columnStyles[column.index] ||
|
|
126
|
+
const colStyles = styles.columnStyles[column.index] || {};
|
|
127
127
|
|
|
128
128
|
const rowStyles =
|
|
129
129
|
sectionName === 'body' && rowIndex % 2 === 0
|
|
@@ -269,7 +269,8 @@ export function createSingleTable(body: string[][], args: CreateTableArgs) {
|
|
|
269
269
|
schema.bodyStyles.alternateBackgroundColor = schema.bodyStyles.backgroundColor;
|
|
270
270
|
schema.bodyStyles.backgroundColor = alternateBackgroundColor;
|
|
271
271
|
}
|
|
272
|
-
schema.showHead =
|
|
272
|
+
schema.showHead =
|
|
273
|
+
schema.showHead === false ? false : !schema.__isSplit || schema.repeatHead === true;
|
|
273
274
|
|
|
274
275
|
const input = parseInput(schema, body);
|
|
275
276
|
|
package/src/tables/types.ts
CHANGED
|
@@ -21,7 +21,7 @@ export interface CellStyle {
|
|
|
21
21
|
|
|
22
22
|
export type CellSchema = Schema & CellStyle;
|
|
23
23
|
|
|
24
|
-
export
|
|
24
|
+
export type TableSchema = Schema & {
|
|
25
25
|
showHead: boolean;
|
|
26
26
|
head: string[];
|
|
27
27
|
headWidthPercentages: number[];
|
|
@@ -36,7 +36,7 @@ export interface TableSchema extends Schema {
|
|
|
36
36
|
columnStyles: {
|
|
37
37
|
alignment?: { [colIndex: number]: ALIGNMENT };
|
|
38
38
|
};
|
|
39
|
-
}
|
|
39
|
+
};
|
|
40
40
|
|
|
41
41
|
export interface Styles {
|
|
42
42
|
fontName: string | undefined;
|
package/src/tables/uiRender.ts
CHANGED
|
@@ -203,7 +203,7 @@ const resetEditingPosition = () => {
|
|
|
203
203
|
};
|
|
204
204
|
|
|
205
205
|
export const uiRender = async (arg: UIRenderProps<TableSchema>) => {
|
|
206
|
-
const { rootElement, onChange, schema, value, mode, scale} = arg;
|
|
206
|
+
const { rootElement, onChange, schema, value, mode, scale } = arg;
|
|
207
207
|
const body = getBody(value);
|
|
208
208
|
const bodyWidthRange = getBodyWithRange(value, schema.__bodyRange);
|
|
209
209
|
const table = await createSingleTable(bodyWidthRange, arg);
|
package/src/tables.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { getDynamicHeightsForTable } from './tables/dynamicTemplate.js';
|
package/src/text/helper.ts
CHANGED
|
@@ -110,6 +110,26 @@ const getFallbackFont = (font: Font) => {
|
|
|
110
110
|
|
|
111
111
|
const getCacheKey = (fontName: string) => `getFontKitFont-${fontName}`;
|
|
112
112
|
|
|
113
|
+
export const fetchRemoteFontData = async (url: string): Promise<ArrayBuffer> => {
|
|
114
|
+
if (!isUrlSafeToFetch(url)) {
|
|
115
|
+
throw Error(
|
|
116
|
+
'[@pdfme/schemas] Invalid or unsafe URL for font data. Only http: and https: URLs pointing to public hosts are allowed.',
|
|
117
|
+
);
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
try {
|
|
121
|
+
const response = await fetch(url);
|
|
122
|
+
if (!response.ok) {
|
|
123
|
+
throw new Error(`HTTP ${response.status}`);
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
return await response.arrayBuffer();
|
|
127
|
+
} catch (error) {
|
|
128
|
+
const reason = error instanceof Error ? error.message : String(error);
|
|
129
|
+
throw Error(`[@pdfme/schemas] Failed to fetch remote font data from ${url}. ${reason}`);
|
|
130
|
+
}
|
|
131
|
+
};
|
|
132
|
+
|
|
113
133
|
export const getFontKitFont = async (
|
|
114
134
|
fontName: string | undefined,
|
|
115
135
|
font: Font,
|
|
@@ -125,10 +145,7 @@ export const getFontKitFont = async (
|
|
|
125
145
|
let fontData = currentFont.data;
|
|
126
146
|
if (typeof fontData === 'string') {
|
|
127
147
|
if (fontData.startsWith('http')) {
|
|
128
|
-
|
|
129
|
-
throw Error('[@pdfme/schemas] Invalid or unsafe URL for font data. Only http: and https: URLs pointing to public hosts are allowed.');
|
|
130
|
-
}
|
|
131
|
-
fontData = await fetch(fontData).then((res) => res.arrayBuffer());
|
|
148
|
+
fontData = await fetchRemoteFontData(fontData);
|
|
132
149
|
} else {
|
|
133
150
|
fontData = b64toUint8Array(fontData);
|
|
134
151
|
}
|
|
@@ -373,7 +390,7 @@ export const splitTextToSize = (arg: {
|
|
|
373
390
|
boxWidthInPt,
|
|
374
391
|
};
|
|
375
392
|
let lines: string[] = [];
|
|
376
|
-
value.split(/\r\n|\r|\n|\f|\
|
|
393
|
+
value.split(/\r\n|\r|\n|\f|\v/g).forEach((line: string) => {
|
|
377
394
|
lines = lines.concat(getSplittedLinesBySegmenter(line, fontWidthCalcValues));
|
|
378
395
|
});
|
|
379
396
|
return lines;
|
package/src/text/pdfRender.ts
CHANGED
|
@@ -8,7 +8,6 @@ import {
|
|
|
8
8
|
getDefaultFont,
|
|
9
9
|
getFallbackFontName,
|
|
10
10
|
mm2pt,
|
|
11
|
-
isUrlSafeToFetch,
|
|
12
11
|
} from '@pdfme/common';
|
|
13
12
|
import {
|
|
14
13
|
VERTICAL_ALIGN_TOP,
|
|
@@ -26,6 +25,7 @@ import {
|
|
|
26
25
|
heightOfFontAtSize,
|
|
27
26
|
getFontDescentInPt,
|
|
28
27
|
getFontKitFont,
|
|
28
|
+
fetchRemoteFontData,
|
|
29
29
|
widthOfTextAtSize,
|
|
30
30
|
splitTextToSize,
|
|
31
31
|
} from './helper.js';
|
|
@@ -45,10 +45,7 @@ const embedAndGetFontObj = async (arg: {
|
|
|
45
45
|
Object.values(font).map(async (v) => {
|
|
46
46
|
let fontData = v.data;
|
|
47
47
|
if (typeof fontData === 'string' && fontData.startsWith('http')) {
|
|
48
|
-
|
|
49
|
-
throw Error('[@pdfme/schemas] Invalid or unsafe URL for font data. Only http: and https: URLs pointing to public hosts are allowed.');
|
|
50
|
-
}
|
|
51
|
-
fontData = await fetch(fontData).then((res) => res.arrayBuffer());
|
|
48
|
+
fontData = await fetchRemoteFontData(fontData);
|
|
52
49
|
}
|
|
53
50
|
return pdfDoc.embedFont(fontData, {
|
|
54
51
|
subset: typeof v.subset === 'undefined' ? true : v.subset,
|
package/src/text/types.ts
CHANGED
|
@@ -11,7 +11,7 @@ export type FontWidthCalcValues = {
|
|
|
11
11
|
characterSpacing: number;
|
|
12
12
|
boxWidthInPt: number;
|
|
13
13
|
};
|
|
14
|
-
export
|
|
14
|
+
export type TextSchema = Schema & {
|
|
15
15
|
fontName?: string;
|
|
16
16
|
alignment: ALIGNMENT;
|
|
17
17
|
verticalAlignment: VERTICAL_ALIGNMENT;
|
|
@@ -27,4 +27,4 @@ export interface TextSchema extends Schema {
|
|
|
27
27
|
};
|
|
28
28
|
fontColor: string;
|
|
29
29
|
backgroundColor: string;
|
|
30
|
-
}
|
|
30
|
+
};
|
package/src/utils.ts
CHANGED
|
@@ -213,9 +213,90 @@ export const createSvgStr = (icon: IconNode, attrs?: Record<string, string>): st
|
|
|
213
213
|
// In lucide 0.475.0, the icon is an array of elements, not a single SVG element
|
|
214
214
|
// We need to create an SVG wrapper and add the elements as children
|
|
215
215
|
|
|
216
|
+
const safeTagNames = new Set([
|
|
217
|
+
'svg',
|
|
218
|
+
'circle',
|
|
219
|
+
'ellipse',
|
|
220
|
+
'g',
|
|
221
|
+
'line',
|
|
222
|
+
'path',
|
|
223
|
+
'polygon',
|
|
224
|
+
'polyline',
|
|
225
|
+
'rect',
|
|
226
|
+
]);
|
|
227
|
+
const safeAttributeNames = new Set([
|
|
228
|
+
'aria-hidden',
|
|
229
|
+
'aria-label',
|
|
230
|
+
'class',
|
|
231
|
+
'clip-rule',
|
|
232
|
+
'cx',
|
|
233
|
+
'cy',
|
|
234
|
+
'd',
|
|
235
|
+
'fill',
|
|
236
|
+
'fill-opacity',
|
|
237
|
+
'fill-rule',
|
|
238
|
+
'focusable',
|
|
239
|
+
'height',
|
|
240
|
+
'id',
|
|
241
|
+
'opacity',
|
|
242
|
+
'points',
|
|
243
|
+
'preserveAspectRatio',
|
|
244
|
+
'r',
|
|
245
|
+
'role',
|
|
246
|
+
'rx',
|
|
247
|
+
'ry',
|
|
248
|
+
'stroke',
|
|
249
|
+
'stroke-dasharray',
|
|
250
|
+
'stroke-dashoffset',
|
|
251
|
+
'stroke-linecap',
|
|
252
|
+
'stroke-linejoin',
|
|
253
|
+
'stroke-miterlimit',
|
|
254
|
+
'stroke-opacity',
|
|
255
|
+
'stroke-width',
|
|
256
|
+
'transform',
|
|
257
|
+
'vector-effect',
|
|
258
|
+
'viewBox',
|
|
259
|
+
'width',
|
|
260
|
+
'x',
|
|
261
|
+
'x1',
|
|
262
|
+
'x2',
|
|
263
|
+
'xmlns',
|
|
264
|
+
'xmlns:xlink',
|
|
265
|
+
'y',
|
|
266
|
+
'y1',
|
|
267
|
+
'y2',
|
|
268
|
+
]);
|
|
269
|
+
const escapeHtmlAttribute = (value: string): string =>
|
|
270
|
+
value
|
|
271
|
+
.replaceAll('&', '&')
|
|
272
|
+
.replaceAll('"', '"')
|
|
273
|
+
.replaceAll("'", ''')
|
|
274
|
+
.replaceAll('<', '<')
|
|
275
|
+
.replaceAll('>', '>');
|
|
276
|
+
const escapeHtmlText = (value: string): string =>
|
|
277
|
+
value.replaceAll('&', '&').replaceAll('<', '<').replaceAll('>', '>');
|
|
278
|
+
const toSafeAttributeString = (attributes: Record<string, string>): string =>
|
|
279
|
+
Object.entries(attributes)
|
|
280
|
+
.filter(
|
|
281
|
+
([key, value]) =>
|
|
282
|
+
safeAttributeNames.has(key) &&
|
|
283
|
+
value !== undefined &&
|
|
284
|
+
value !== null &&
|
|
285
|
+
!key.toLowerCase().startsWith('on'),
|
|
286
|
+
)
|
|
287
|
+
.map(([key, value]) => `${key}="${escapeHtmlAttribute(String(value))}"`)
|
|
288
|
+
.join(' ');
|
|
289
|
+
const toSafeTagName = (tag: unknown): string => {
|
|
290
|
+
const tagName = String(tag);
|
|
291
|
+
if (!safeTagNames.has(tagName)) {
|
|
292
|
+
throw new Error(`Invalid SVG tag name: ${tagName}`);
|
|
293
|
+
}
|
|
294
|
+
return tagName;
|
|
295
|
+
};
|
|
296
|
+
|
|
216
297
|
// Handle non-array input
|
|
217
298
|
if (!Array.isArray(icon)) {
|
|
218
|
-
return String(icon);
|
|
299
|
+
return escapeHtmlText(String(icon));
|
|
219
300
|
}
|
|
220
301
|
|
|
221
302
|
// Create default SVG attributes
|
|
@@ -229,18 +310,14 @@ export const createSvgStr = (icon: IconNode, attrs?: Record<string, string>): st
|
|
|
229
310
|
'stroke-width': '2',
|
|
230
311
|
'stroke-linecap': 'round',
|
|
231
312
|
'stroke-linejoin': 'round',
|
|
232
|
-
...
|
|
313
|
+
...attrs,
|
|
233
314
|
};
|
|
234
|
-
|
|
235
|
-
// Format SVG attributes string
|
|
236
|
-
const svgAttrString = Object.entries(svgAttrs)
|
|
237
|
-
.map(([key, value]) => `${key}="${value}"`)
|
|
238
|
-
.join(' ');
|
|
315
|
+
const svgAttrString = toSafeAttributeString(svgAttrs);
|
|
239
316
|
|
|
240
317
|
// Helper function to process a single element
|
|
241
318
|
const processElement = (element: unknown): string => {
|
|
242
319
|
if (!Array.isArray(element)) {
|
|
243
|
-
return String(element);
|
|
320
|
+
return escapeHtmlText(String(element));
|
|
244
321
|
}
|
|
245
322
|
|
|
246
323
|
const [tag, attributes = {}, children = []] = element as [
|
|
@@ -248,12 +325,8 @@ export const createSvgStr = (icon: IconNode, attrs?: Record<string, string>): st
|
|
|
248
325
|
Record<string, string>,
|
|
249
326
|
unknown[],
|
|
250
327
|
];
|
|
251
|
-
const tagName =
|
|
252
|
-
|
|
253
|
-
// Format attributes string
|
|
254
|
-
const attrString = Object.entries(attributes)
|
|
255
|
-
.map(([key, value]) => `${key}="${value}"`)
|
|
256
|
-
.join(' ');
|
|
328
|
+
const tagName = toSafeTagName(tag);
|
|
329
|
+
const attrString = toSafeAttributeString(attributes);
|
|
257
330
|
|
|
258
331
|
// Process children recursively
|
|
259
332
|
let childrenString = '';
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{
|
|
2
|
+
"extends": "../../tsconfig.build.base.json",
|
|
3
|
+
"compilerOptions": {
|
|
4
|
+
"declaration": true,
|
|
5
|
+
"declarationDir": "./dist",
|
|
6
|
+
"emitDeclarationOnly": true,
|
|
7
|
+
"module": "ESNext",
|
|
8
|
+
"moduleResolution": "bundler",
|
|
9
|
+
"outDir": "./dist",
|
|
10
|
+
"rootDir": "./src",
|
|
11
|
+
"skipLibCheck": true
|
|
12
|
+
},
|
|
13
|
+
"include": ["src/**/*.ts"]
|
|
14
|
+
}
|
package/tsconfig.json
CHANGED
|
@@ -1,6 +1,16 @@
|
|
|
1
1
|
{
|
|
2
|
-
"extends": "
|
|
2
|
+
"extends": "../../tsconfig.base.json",
|
|
3
3
|
"compilerOptions": {
|
|
4
|
-
"
|
|
5
|
-
|
|
6
|
-
|
|
4
|
+
"composite": true,
|
|
5
|
+
"declaration": true,
|
|
6
|
+
"declarationDir": "./dist/typecheck",
|
|
7
|
+
"emitDeclarationOnly": true,
|
|
8
|
+
"module": "ESNext",
|
|
9
|
+
"moduleResolution": "bundler",
|
|
10
|
+
"outDir": "./dist/typecheck",
|
|
11
|
+
"tsBuildInfoFile": "./dist/typecheck/tsconfig.tsbuildinfo",
|
|
12
|
+
"skipLibCheck": true
|
|
13
|
+
},
|
|
14
|
+
"include": ["src/**/*.ts"],
|
|
15
|
+
"references": [{ "path": "../common" }, { "path": "../pdf-lib" }]
|
|
16
|
+
}
|
package/vite.config.mts
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { readFileSync } from 'node:fs';
|
|
2
|
+
import { builtinModules } from 'node:module';
|
|
3
|
+
import { dirname, resolve } from 'node:path';
|
|
4
|
+
import { fileURLToPath } from 'node:url';
|
|
5
|
+
import { defineConfig } from 'vite';
|
|
6
|
+
|
|
7
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
8
|
+
const packageJson = JSON.parse(readFileSync(resolve(__dirname, 'package.json'), 'utf8')) as {
|
|
9
|
+
dependencies?: Record<string, string>;
|
|
10
|
+
peerDependencies?: Record<string, string>;
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
const builtinModuleSet = new Set([
|
|
14
|
+
...builtinModules,
|
|
15
|
+
...builtinModules.map((moduleName) => `node:${moduleName}`),
|
|
16
|
+
]);
|
|
17
|
+
const packageDependencies = [
|
|
18
|
+
...Object.keys(packageJson.dependencies ?? {}),
|
|
19
|
+
...Object.keys(packageJson.peerDependencies ?? {}),
|
|
20
|
+
];
|
|
21
|
+
|
|
22
|
+
const isExternal = (id: string) => {
|
|
23
|
+
if (id.startsWith('air-datepicker/locale/')) {
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
return (
|
|
28
|
+
builtinModuleSet.has(id) ||
|
|
29
|
+
packageDependencies.some((dependency) => id === dependency || id.startsWith(`${dependency}/`))
|
|
30
|
+
);
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
export default defineConfig({
|
|
34
|
+
build: {
|
|
35
|
+
lib: {
|
|
36
|
+
entry: {
|
|
37
|
+
builtins: resolve(__dirname, 'src/builtins.ts'),
|
|
38
|
+
index: resolve(__dirname, 'src/index.ts'),
|
|
39
|
+
tables: resolve(__dirname, 'src/tables.ts'),
|
|
40
|
+
utils: resolve(__dirname, 'src/utils.ts'),
|
|
41
|
+
},
|
|
42
|
+
fileName: (_, entryName) => `${entryName}.js`,
|
|
43
|
+
formats: ['es'],
|
|
44
|
+
},
|
|
45
|
+
minify: false,
|
|
46
|
+
outDir: 'dist',
|
|
47
|
+
rollupOptions: { external: isExternal },
|
|
48
|
+
sourcemap: true,
|
|
49
|
+
target: 'es2020',
|
|
50
|
+
},
|
|
51
|
+
});
|