@pdfme/schemas 0.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -0
- package/dist/cjs/__tests__/barcode.test.js +354 -0
- package/dist/cjs/__tests__/barcode.test.js.map +1 -0
- package/dist/cjs/__tests__/multiVariableText.test.js +102 -0
- package/dist/cjs/__tests__/multiVariableText.test.js.map +1 -0
- package/dist/cjs/__tests__/text.test.js +419 -0
- package/dist/cjs/__tests__/text.test.js.map +1 -0
- package/dist/cjs/__tests__/utils.test.js +193 -0
- package/dist/cjs/__tests__/utils.test.js.map +1 -0
- package/dist/cjs/src/barcodes/constants.js +21 -0
- package/dist/cjs/src/barcodes/constants.js.map +1 -0
- package/dist/cjs/src/barcodes/helper.js +161 -0
- package/dist/cjs/src/barcodes/helper.js.map +1 -0
- package/dist/cjs/src/barcodes/index.js +18 -0
- package/dist/cjs/src/barcodes/index.js.map +1 -0
- package/dist/cjs/src/barcodes/pdfRender.js +29 -0
- package/dist/cjs/src/barcodes/pdfRender.js.map +1 -0
- package/dist/cjs/src/barcodes/propPanel.js +241 -0
- package/dist/cjs/src/barcodes/propPanel.js.map +1 -0
- package/dist/cjs/src/barcodes/types.js +3 -0
- package/dist/cjs/src/barcodes/types.js.map +1 -0
- package/dist/cjs/src/barcodes/uiRender.js +91 -0
- package/dist/cjs/src/barcodes/uiRender.js.map +1 -0
- package/dist/cjs/src/checkbox/index.js +62 -0
- package/dist/cjs/src/checkbox/index.js.map +1 -0
- package/dist/cjs/src/constants.js +6 -0
- package/dist/cjs/src/constants.js.map +1 -0
- package/dist/cjs/src/date/date.js +9 -0
- package/dist/cjs/src/date/date.js.map +1 -0
- package/dist/cjs/src/date/dateTime.js +9 -0
- package/dist/cjs/src/date/dateTime.js.map +1 -0
- package/dist/cjs/src/date/helper.js +462 -0
- package/dist/cjs/src/date/helper.js.map +1 -0
- package/dist/cjs/src/date/time.js +9 -0
- package/dist/cjs/src/date/time.js.map +1 -0
- package/dist/cjs/src/date/types.js +3 -0
- package/dist/cjs/src/date/types.js.map +1 -0
- package/dist/cjs/src/graphics/image.js +172 -0
- package/dist/cjs/src/graphics/image.js.map +1 -0
- package/dist/cjs/src/graphics/imagehelper.js +124 -0
- package/dist/cjs/src/graphics/imagehelper.js.map +1 -0
- package/dist/cjs/src/graphics/svg.js +109 -0
- package/dist/cjs/src/graphics/svg.js.map +1 -0
- package/dist/cjs/src/index.js +41 -0
- package/dist/cjs/src/index.js.map +1 -0
- package/dist/cjs/src/multiVariableText/helper.js +55 -0
- package/dist/cjs/src/multiVariableText/helper.js.map +1 -0
- package/dist/cjs/src/multiVariableText/index.js +16 -0
- package/dist/cjs/src/multiVariableText/index.js.map +1 -0
- package/dist/cjs/src/multiVariableText/pdfRender.js +20 -0
- package/dist/cjs/src/multiVariableText/pdfRender.js.map +1 -0
- package/dist/cjs/src/multiVariableText/propPanel.js +148 -0
- package/dist/cjs/src/multiVariableText/propPanel.js.map +1 -0
- package/dist/cjs/src/multiVariableText/types.js +3 -0
- package/dist/cjs/src/multiVariableText/types.js.map +1 -0
- package/dist/cjs/src/multiVariableText/uiRender.js +146 -0
- package/dist/cjs/src/multiVariableText/uiRender.js.map +1 -0
- package/dist/cjs/src/radioGroup/index.js +93 -0
- package/dist/cjs/src/radioGroup/index.js.map +1 -0
- package/dist/cjs/src/select/index.js +170 -0
- package/dist/cjs/src/select/index.js.map +1 -0
- package/dist/cjs/src/shapes/line.js +76 -0
- package/dist/cjs/src/shapes/line.js.map +1 -0
- package/dist/cjs/src/shapes/rectAndEllipse.js +140 -0
- package/dist/cjs/src/shapes/rectAndEllipse.js.map +1 -0
- package/dist/cjs/src/tables/cell.js +126 -0
- package/dist/cjs/src/tables/cell.js.map +1 -0
- package/dist/cjs/src/tables/classes.js +467 -0
- package/dist/cjs/src/tables/classes.js.map +1 -0
- package/dist/cjs/src/tables/dynamicTemplate.js +66 -0
- package/dist/cjs/src/tables/dynamicTemplate.js.map +1 -0
- package/dist/cjs/src/tables/helper.js +189 -0
- package/dist/cjs/src/tables/helper.js.map +1 -0
- package/dist/cjs/src/tables/index.js +15 -0
- package/dist/cjs/src/tables/index.js.map +1 -0
- package/dist/cjs/src/tables/pdfRender.js +109 -0
- package/dist/cjs/src/tables/pdfRender.js.map +1 -0
- package/dist/cjs/src/tables/propPanel.js +108 -0
- package/dist/cjs/src/tables/propPanel.js.map +1 -0
- package/dist/cjs/src/tables/tableHelper.js +200 -0
- package/dist/cjs/src/tables/tableHelper.js.map +1 -0
- package/dist/cjs/src/tables/types.js +3 -0
- package/dist/cjs/src/tables/types.js.map +1 -0
- package/dist/cjs/src/tables/uiRender.js +368 -0
- package/dist/cjs/src/tables/uiRender.js.map +1 -0
- package/dist/cjs/src/text/constants.js +97 -0
- package/dist/cjs/src/text/constants.js.map +1 -0
- package/dist/cjs/src/text/extraFormatter.js +49 -0
- package/dist/cjs/src/text/extraFormatter.js.map +1 -0
- package/dist/cjs/src/text/helper.js +498 -0
- package/dist/cjs/src/text/helper.js.map +1 -0
- package/dist/cjs/src/text/icons/index.js +16 -0
- package/dist/cjs/src/text/icons/index.js.map +1 -0
- package/dist/cjs/src/text/index.js +15 -0
- package/dist/cjs/src/text/index.js.map +1 -0
- package/dist/cjs/src/text/pdfRender.js +167 -0
- package/dist/cjs/src/text/pdfRender.js.map +1 -0
- package/dist/cjs/src/text/propPanel.js +161 -0
- package/dist/cjs/src/text/propPanel.js.map +1 -0
- package/dist/cjs/src/text/types.js +3 -0
- package/dist/cjs/src/text/types.js.map +1 -0
- package/dist/cjs/src/text/uiRender.js +224 -0
- package/dist/cjs/src/text/uiRender.js.map +1 -0
- package/dist/cjs/src/utils.js +230 -0
- package/dist/cjs/src/utils.js.map +1 -0
- package/dist/esm/__tests__/barcode.test.js +349 -0
- package/dist/esm/__tests__/barcode.test.js.map +1 -0
- package/dist/esm/__tests__/multiVariableText.test.js +100 -0
- package/dist/esm/__tests__/multiVariableText.test.js.map +1 -0
- package/dist/esm/__tests__/text.test.js +384 -0
- package/dist/esm/__tests__/text.test.js.map +1 -0
- package/dist/esm/__tests__/utils.test.js +191 -0
- package/dist/esm/__tests__/utils.test.js.map +1 -0
- package/dist/esm/src/barcodes/constants.js +18 -0
- package/dist/esm/src/barcodes/constants.js.map +1 -0
- package/dist/esm/src/barcodes/helper.js +151 -0
- package/dist/esm/src/barcodes/helper.js.map +1 -0
- package/dist/esm/src/barcodes/index.js +16 -0
- package/dist/esm/src/barcodes/index.js.map +1 -0
- package/dist/esm/src/barcodes/pdfRender.js +25 -0
- package/dist/esm/src/barcodes/pdfRender.js.map +1 -0
- package/dist/esm/src/barcodes/propPanel.js +237 -0
- package/dist/esm/src/barcodes/propPanel.js.map +1 -0
- package/dist/esm/src/barcodes/types.js +2 -0
- package/dist/esm/src/barcodes/types.js.map +1 -0
- package/dist/esm/src/barcodes/uiRender.js +87 -0
- package/dist/esm/src/barcodes/uiRender.js.map +1 -0
- package/dist/esm/src/checkbox/index.js +57 -0
- package/dist/esm/src/checkbox/index.js.map +1 -0
- package/dist/esm/src/constants.js +3 -0
- package/dist/esm/src/constants.js.map +1 -0
- package/dist/esm/src/date/date.js +7 -0
- package/dist/esm/src/date/date.js.map +1 -0
- package/dist/esm/src/date/dateTime.js +7 -0
- package/dist/esm/src/date/dateTime.js.map +1 -0
- package/dist/esm/src/date/helper.js +422 -0
- package/dist/esm/src/date/helper.js.map +1 -0
- package/dist/esm/src/date/time.js +7 -0
- package/dist/esm/src/date/time.js.map +1 -0
- package/dist/esm/src/date/types.js +2 -0
- package/dist/esm/src/date/types.js.map +1 -0
- package/dist/esm/src/graphics/image.js +170 -0
- package/dist/esm/src/graphics/image.js.map +1 -0
- package/dist/esm/src/graphics/imagehelper.js +120 -0
- package/dist/esm/src/graphics/imagehelper.js.map +1 -0
- package/dist/esm/src/graphics/svg.js +107 -0
- package/dist/esm/src/graphics/svg.js.map +1 -0
- package/dist/esm/src/index.js +21 -0
- package/dist/esm/src/index.js.map +1 -0
- package/dist/esm/src/multiVariableText/helper.js +50 -0
- package/dist/esm/src/multiVariableText/helper.js.map +1 -0
- package/dist/esm/src/multiVariableText/index.js +14 -0
- package/dist/esm/src/multiVariableText/index.js.map +1 -0
- package/dist/esm/src/multiVariableText/pdfRender.js +16 -0
- package/dist/esm/src/multiVariableText/pdfRender.js.map +1 -0
- package/dist/esm/src/multiVariableText/propPanel.js +145 -0
- package/dist/esm/src/multiVariableText/propPanel.js.map +1 -0
- package/dist/esm/src/multiVariableText/types.js +2 -0
- package/dist/esm/src/multiVariableText/types.js.map +1 -0
- package/dist/esm/src/multiVariableText/uiRender.js +142 -0
- package/dist/esm/src/multiVariableText/uiRender.js.map +1 -0
- package/dist/esm/src/radioGroup/index.js +88 -0
- package/dist/esm/src/radioGroup/index.js.map +1 -0
- package/dist/esm/src/select/index.js +165 -0
- package/dist/esm/src/select/index.js.map +1 -0
- package/dist/esm/src/shapes/line.js +74 -0
- package/dist/esm/src/shapes/line.js.map +1 -0
- package/dist/esm/src/shapes/rectAndEllipse.js +137 -0
- package/dist/esm/src/shapes/rectAndEllipse.js.map +1 -0
- package/dist/esm/src/tables/cell.js +121 -0
- package/dist/esm/src/tables/cell.js.map +1 -0
- package/dist/esm/src/tables/classes.js +460 -0
- package/dist/esm/src/tables/classes.js.map +1 -0
- package/dist/esm/src/tables/dynamicTemplate.js +62 -0
- package/dist/esm/src/tables/dynamicTemplate.js.map +1 -0
- package/dist/esm/src/tables/helper.js +181 -0
- package/dist/esm/src/tables/helper.js.map +1 -0
- package/dist/esm/src/tables/index.js +13 -0
- package/dist/esm/src/tables/index.js.map +1 -0
- package/dist/esm/src/tables/pdfRender.js +102 -0
- package/dist/esm/src/tables/pdfRender.js.map +1 -0
- package/dist/esm/src/tables/propPanel.js +105 -0
- package/dist/esm/src/tables/propPanel.js.map +1 -0
- package/dist/esm/src/tables/tableHelper.js +197 -0
- package/dist/esm/src/tables/tableHelper.js.map +1 -0
- package/dist/esm/src/tables/types.js +2 -0
- package/dist/esm/src/tables/types.js.map +1 -0
- package/dist/esm/src/tables/uiRender.js +361 -0
- package/dist/esm/src/tables/uiRender.js.map +1 -0
- package/dist/esm/src/text/constants.js +94 -0
- package/dist/esm/src/text/constants.js.map +1 -0
- package/dist/esm/src/text/extraFormatter.js +45 -0
- package/dist/esm/src/text/extraFormatter.js.map +1 -0
- package/dist/esm/src/text/helper.js +451 -0
- package/dist/esm/src/text/helper.js.map +1 -0
- package/dist/esm/src/text/icons/index.js +13 -0
- package/dist/esm/src/text/icons/index.js.map +1 -0
- package/dist/esm/src/text/index.js +13 -0
- package/dist/esm/src/text/index.js.map +1 -0
- package/dist/esm/src/text/pdfRender.js +163 -0
- package/dist/esm/src/text/pdfRender.js.map +1 -0
- package/dist/esm/src/text/propPanel.js +158 -0
- package/dist/esm/src/text/propPanel.js.map +1 -0
- package/dist/esm/src/text/types.js +2 -0
- package/dist/esm/src/text/types.js.map +1 -0
- package/dist/esm/src/text/uiRender.js +217 -0
- package/dist/esm/src/text/uiRender.js.map +1 -0
- package/dist/esm/src/utils.js +218 -0
- package/dist/esm/src/utils.js.map +1 -0
- package/dist/node/__tests__/barcode.test.js +354 -0
- package/dist/node/__tests__/barcode.test.js.map +1 -0
- package/dist/node/__tests__/multiVariableText.test.js +102 -0
- package/dist/node/__tests__/multiVariableText.test.js.map +1 -0
- package/dist/node/__tests__/text.test.js +419 -0
- package/dist/node/__tests__/text.test.js.map +1 -0
- package/dist/node/__tests__/utils.test.js +193 -0
- package/dist/node/__tests__/utils.test.js.map +1 -0
- package/dist/node/src/barcodes/constants.js +21 -0
- package/dist/node/src/barcodes/constants.js.map +1 -0
- package/dist/node/src/barcodes/helper.js +161 -0
- package/dist/node/src/barcodes/helper.js.map +1 -0
- package/dist/node/src/barcodes/index.js +18 -0
- package/dist/node/src/barcodes/index.js.map +1 -0
- package/dist/node/src/barcodes/pdfRender.js +29 -0
- package/dist/node/src/barcodes/pdfRender.js.map +1 -0
- package/dist/node/src/barcodes/propPanel.js +241 -0
- package/dist/node/src/barcodes/propPanel.js.map +1 -0
- package/dist/node/src/barcodes/types.js +3 -0
- package/dist/node/src/barcodes/types.js.map +1 -0
- package/dist/node/src/barcodes/uiRender.js +91 -0
- package/dist/node/src/barcodes/uiRender.js.map +1 -0
- package/dist/node/src/checkbox/index.js +62 -0
- package/dist/node/src/checkbox/index.js.map +1 -0
- package/dist/node/src/constants.js +6 -0
- package/dist/node/src/constants.js.map +1 -0
- package/dist/node/src/date/date.js +9 -0
- package/dist/node/src/date/date.js.map +1 -0
- package/dist/node/src/date/dateTime.js +9 -0
- package/dist/node/src/date/dateTime.js.map +1 -0
- package/dist/node/src/date/helper.js +462 -0
- package/dist/node/src/date/helper.js.map +1 -0
- package/dist/node/src/date/time.js +9 -0
- package/dist/node/src/date/time.js.map +1 -0
- package/dist/node/src/date/types.js +3 -0
- package/dist/node/src/date/types.js.map +1 -0
- package/dist/node/src/graphics/image.js +172 -0
- package/dist/node/src/graphics/image.js.map +1 -0
- package/dist/node/src/graphics/imagehelper.js +124 -0
- package/dist/node/src/graphics/imagehelper.js.map +1 -0
- package/dist/node/src/graphics/svg.js +109 -0
- package/dist/node/src/graphics/svg.js.map +1 -0
- package/dist/node/src/index.js +41 -0
- package/dist/node/src/index.js.map +1 -0
- package/dist/node/src/multiVariableText/helper.js +55 -0
- package/dist/node/src/multiVariableText/helper.js.map +1 -0
- package/dist/node/src/multiVariableText/index.js +16 -0
- package/dist/node/src/multiVariableText/index.js.map +1 -0
- package/dist/node/src/multiVariableText/pdfRender.js +20 -0
- package/dist/node/src/multiVariableText/pdfRender.js.map +1 -0
- package/dist/node/src/multiVariableText/propPanel.js +148 -0
- package/dist/node/src/multiVariableText/propPanel.js.map +1 -0
- package/dist/node/src/multiVariableText/types.js +3 -0
- package/dist/node/src/multiVariableText/types.js.map +1 -0
- package/dist/node/src/multiVariableText/uiRender.js +146 -0
- package/dist/node/src/multiVariableText/uiRender.js.map +1 -0
- package/dist/node/src/radioGroup/index.js +93 -0
- package/dist/node/src/radioGroup/index.js.map +1 -0
- package/dist/node/src/select/index.js +170 -0
- package/dist/node/src/select/index.js.map +1 -0
- package/dist/node/src/shapes/line.js +76 -0
- package/dist/node/src/shapes/line.js.map +1 -0
- package/dist/node/src/shapes/rectAndEllipse.js +140 -0
- package/dist/node/src/shapes/rectAndEllipse.js.map +1 -0
- package/dist/node/src/tables/cell.js +126 -0
- package/dist/node/src/tables/cell.js.map +1 -0
- package/dist/node/src/tables/classes.js +467 -0
- package/dist/node/src/tables/classes.js.map +1 -0
- package/dist/node/src/tables/dynamicTemplate.js +66 -0
- package/dist/node/src/tables/dynamicTemplate.js.map +1 -0
- package/dist/node/src/tables/helper.js +189 -0
- package/dist/node/src/tables/helper.js.map +1 -0
- package/dist/node/src/tables/index.js +15 -0
- package/dist/node/src/tables/index.js.map +1 -0
- package/dist/node/src/tables/pdfRender.js +109 -0
- package/dist/node/src/tables/pdfRender.js.map +1 -0
- package/dist/node/src/tables/propPanel.js +108 -0
- package/dist/node/src/tables/propPanel.js.map +1 -0
- package/dist/node/src/tables/tableHelper.js +200 -0
- package/dist/node/src/tables/tableHelper.js.map +1 -0
- package/dist/node/src/tables/types.js +3 -0
- package/dist/node/src/tables/types.js.map +1 -0
- package/dist/node/src/tables/uiRender.js +368 -0
- package/dist/node/src/tables/uiRender.js.map +1 -0
- package/dist/node/src/text/constants.js +97 -0
- package/dist/node/src/text/constants.js.map +1 -0
- package/dist/node/src/text/extraFormatter.js +49 -0
- package/dist/node/src/text/extraFormatter.js.map +1 -0
- package/dist/node/src/text/helper.js +498 -0
- package/dist/node/src/text/helper.js.map +1 -0
- package/dist/node/src/text/icons/index.js +16 -0
- package/dist/node/src/text/icons/index.js.map +1 -0
- package/dist/node/src/text/index.js +15 -0
- package/dist/node/src/text/index.js.map +1 -0
- package/dist/node/src/text/pdfRender.js +167 -0
- package/dist/node/src/text/pdfRender.js.map +1 -0
- package/dist/node/src/text/propPanel.js +161 -0
- package/dist/node/src/text/propPanel.js.map +1 -0
- package/dist/node/src/text/types.js +3 -0
- package/dist/node/src/text/types.js.map +1 -0
- package/dist/node/src/text/uiRender.js +224 -0
- package/dist/node/src/text/uiRender.js.map +1 -0
- package/dist/node/src/utils.js +230 -0
- package/dist/node/src/utils.js.map +1 -0
- package/dist/types/__tests__/barcode.test.d.ts +1 -0
- package/dist/types/__tests__/multiVariableText.test.d.ts +1 -0
- package/dist/types/__tests__/text.test.d.ts +1 -0
- package/dist/types/__tests__/utils.test.d.ts +1 -0
- package/dist/types/src/barcodes/constants.d.ts +4 -0
- package/dist/types/src/barcodes/helper.d.ts +21 -0
- package/dist/types/src/barcodes/index.d.ts +4 -0
- package/dist/types/src/barcodes/pdfRender.d.ts +3 -0
- package/dist/types/src/barcodes/propPanel.d.ts +3 -0
- package/dist/types/src/barcodes/types.d.ts +10 -0
- package/dist/types/src/barcodes/uiRender.d.ts +3 -0
- package/dist/types/src/checkbox/index.d.ts +6 -0
- package/dist/types/src/constants.d.ts +2 -0
- package/dist/types/src/date/date.d.ts +2 -0
- package/dist/types/src/date/dateTime.d.ts +2 -0
- package/dist/types/src/date/helper.d.ts +8 -0
- package/dist/types/src/date/time.d.ts +2 -0
- package/dist/types/src/date/types.d.ts +17 -0
- package/dist/types/src/graphics/image.d.ts +5 -0
- package/dist/types/src/graphics/imagehelper.d.ts +4 -0
- package/dist/types/src/graphics/svg.d.ts +4 -0
- package/dist/types/src/index.d.ts +19 -0
- package/dist/types/src/multiVariableText/helper.d.ts +3 -0
- package/dist/types/src/multiVariableText/index.d.ts +4 -0
- package/dist/types/src/multiVariableText/pdfRender.d.ts +3 -0
- package/dist/types/src/multiVariableText/propPanel.d.ts +3 -0
- package/dist/types/src/multiVariableText/types.d.ts +5 -0
- package/dist/types/src/multiVariableText/uiRender.d.ts +3 -0
- package/dist/types/src/radioGroup/index.d.ts +7 -0
- package/dist/types/src/select/index.d.ts +7 -0
- package/dist/types/src/shapes/line.d.ts +6 -0
- package/dist/types/src/shapes/rectAndEllipse.d.ts +175 -0
- package/dist/types/src/tables/cell.d.ts +4 -0
- package/dist/types/src/tables/classes.d.ts +69 -0
- package/dist/types/src/tables/dynamicTemplate.d.ts +7 -0
- package/dist/types/src/tables/helper.d.ts +265 -0
- package/dist/types/src/tables/index.d.ts +4 -0
- package/dist/types/src/tables/pdfRender.d.ts +3 -0
- package/dist/types/src/tables/propPanel.d.ts +3 -0
- package/dist/types/src/tables/tableHelper.d.ts +10 -0
- package/dist/types/src/tables/types.d.ts +88 -0
- package/dist/types/src/tables/uiRender.d.ts +3 -0
- package/dist/types/src/text/constants.d.ts +23 -0
- package/dist/types/src/text/extraFormatter.d.ts +25 -0
- package/dist/types/src/text/helper.d.ts +39 -0
- package/dist/types/src/text/icons/index.d.ts +9 -0
- package/dist/types/src/text/index.d.ts +4 -0
- package/dist/types/src/text/pdfRender.d.ts +3 -0
- package/dist/types/src/text/propPanel.d.ts +3 -0
- package/dist/types/src/text/types.d.ts +28 -0
- package/dist/types/src/text/uiRender.d.ts +11 -0
- package/dist/types/src/utils.d.ts +40 -0
- package/eslint.config.mjs +22 -0
- package/package.json +97 -0
- package/src/barcodes/constants.ts +20 -0
- package/src/barcodes/helper.ts +187 -0
- package/src/barcodes/index.ts +23 -0
- package/src/barcodes/pdfRender.ts +37 -0
- package/src/barcodes/propPanel.ts +249 -0
- package/src/barcodes/types.ts +12 -0
- package/src/barcodes/uiRender.ts +94 -0
- package/src/checkbox/index.ts +70 -0
- package/src/constants.ts +2 -0
- package/src/date/date.ts +9 -0
- package/src/date/dateTime.ts +9 -0
- package/src/date/helper.ts +496 -0
- package/src/date/time.ts +9 -0
- package/src/date/types.ts +19 -0
- package/src/graphics/image.ts +201 -0
- package/src/graphics/imagehelper.ts +156 -0
- package/src/graphics/svg.ts +118 -0
- package/src/index.ts +39 -0
- package/src/multiVariableText/helper.ts +65 -0
- package/src/multiVariableText/index.ts +16 -0
- package/src/multiVariableText/pdfRender.ts +21 -0
- package/src/multiVariableText/propPanel.ts +160 -0
- package/src/multiVariableText/types.ts +6 -0
- package/src/multiVariableText/uiRender.ts +170 -0
- package/src/radioGroup/index.ts +115 -0
- package/src/select/index.ts +204 -0
- package/src/shapes/line.ts +94 -0
- package/src/shapes/rectAndEllipse.ts +152 -0
- package/src/tables/cell.ts +152 -0
- package/src/tables/classes.ts +402 -0
- package/src/tables/dynamicTemplate.ts +88 -0
- package/src/tables/helper.ts +216 -0
- package/src/tables/index.ts +15 -0
- package/src/tables/pdfRender.ts +144 -0
- package/src/tables/propPanel.ts +111 -0
- package/src/tables/tableHelper.ts +288 -0
- package/src/tables/types.ts +87 -0
- package/src/tables/uiRender.ts +436 -0
- package/src/text/constants.ts +104 -0
- package/src/text/extraFormatter.ts +83 -0
- package/src/text/helper.ts +550 -0
- package/src/text/icons/index.ts +30 -0
- package/src/text/index.ts +16 -0
- package/src/text/pdfRender.ts +239 -0
- package/src/text/propPanel.ts +184 -0
- package/src/text/types.ts +30 -0
- package/src/text/uiRender.ts +288 -0
- package/src/utils.ts +281 -0
- package/tsconfig.cjs.json +10 -0
- package/tsconfig.esm.json +11 -0
- package/tsconfig.json +6 -0
- package/tsconfig.node.json +11 -0
|
@@ -0,0 +1,288 @@
|
|
|
1
|
+
import type * as CSS from 'csstype';
|
|
2
|
+
import type { Font as FontKitFont } from 'fontkit';
|
|
3
|
+
import { UIRenderProps, getDefaultFont } from '@pdfme/common';
|
|
4
|
+
import type { TextSchema } from './types.js';
|
|
5
|
+
import {
|
|
6
|
+
DEFAULT_FONT_SIZE,
|
|
7
|
+
DEFAULT_ALIGNMENT,
|
|
8
|
+
VERTICAL_ALIGN_TOP,
|
|
9
|
+
VERTICAL_ALIGN_MIDDLE,
|
|
10
|
+
VERTICAL_ALIGN_BOTTOM,
|
|
11
|
+
DEFAULT_VERTICAL_ALIGNMENT,
|
|
12
|
+
DEFAULT_LINE_HEIGHT,
|
|
13
|
+
DEFAULT_CHARACTER_SPACING,
|
|
14
|
+
DEFAULT_FONT_COLOR,
|
|
15
|
+
PLACEHOLDER_FONT_COLOR,
|
|
16
|
+
} from './constants.js';
|
|
17
|
+
import {
|
|
18
|
+
calculateDynamicFontSize,
|
|
19
|
+
getFontKitFont,
|
|
20
|
+
getBrowserVerticalFontAdjustments,
|
|
21
|
+
isFirefox,
|
|
22
|
+
} from './helper.js';
|
|
23
|
+
import { isEditable } from '../utils.js';
|
|
24
|
+
|
|
25
|
+
const replaceUnsupportedChars = (text: string, fontKitFont: FontKitFont): string => {
|
|
26
|
+
const charSupportCache: { [char: string]: boolean } = {};
|
|
27
|
+
|
|
28
|
+
const isCharSupported = (char: string): boolean => {
|
|
29
|
+
if (char in charSupportCache) {
|
|
30
|
+
return charSupportCache[char];
|
|
31
|
+
}
|
|
32
|
+
const isSupported = fontKitFont.hasGlyphForCodePoint(char.codePointAt(0) || 0);
|
|
33
|
+
charSupportCache[char] = isSupported;
|
|
34
|
+
return isSupported;
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
const segments = text.split(/(\r\n|\n|\r)/);
|
|
38
|
+
|
|
39
|
+
return segments
|
|
40
|
+
.map((segment) => {
|
|
41
|
+
if (/\r\n|\n|\r/.test(segment)) {
|
|
42
|
+
return segment;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
return segment
|
|
46
|
+
.split('')
|
|
47
|
+
.map((char) => {
|
|
48
|
+
if (/\s/.test(char) || char.charCodeAt(0) < 32) {
|
|
49
|
+
return char;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
return isCharSupported(char) ? char : '〿';
|
|
53
|
+
})
|
|
54
|
+
.join('');
|
|
55
|
+
})
|
|
56
|
+
.join('');
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
export const uiRender = async (arg: UIRenderProps<TextSchema>) => {
|
|
60
|
+
const { value, schema, mode, onChange, stopEditing, tabIndex, placeholder, options, _cache } =
|
|
61
|
+
arg;
|
|
62
|
+
const usePlaceholder = isEditable(mode, schema) && placeholder && !value;
|
|
63
|
+
const getText = (element: HTMLDivElement) => {
|
|
64
|
+
let text = element.innerText;
|
|
65
|
+
if (text.endsWith('\n')) {
|
|
66
|
+
// contenteditable adds additional newline char retrieved with innerText
|
|
67
|
+
text = text.slice(0, -1);
|
|
68
|
+
}
|
|
69
|
+
return text;
|
|
70
|
+
};
|
|
71
|
+
const font = options?.font || getDefaultFont();
|
|
72
|
+
const fontKitFont = await getFontKitFont(
|
|
73
|
+
schema.fontName,
|
|
74
|
+
font,
|
|
75
|
+
_cache as Map<string, import('fontkit').Font>,
|
|
76
|
+
);
|
|
77
|
+
const textBlock = buildStyledTextContainer(
|
|
78
|
+
arg,
|
|
79
|
+
fontKitFont,
|
|
80
|
+
usePlaceholder ? placeholder : value,
|
|
81
|
+
);
|
|
82
|
+
|
|
83
|
+
const processedText = replaceUnsupportedChars(value, fontKitFont);
|
|
84
|
+
|
|
85
|
+
if (!isEditable(mode, schema)) {
|
|
86
|
+
// Read-only mode
|
|
87
|
+
textBlock.innerHTML = processedText
|
|
88
|
+
.split('')
|
|
89
|
+
.map(
|
|
90
|
+
(l, i) =>
|
|
91
|
+
`<span style="letter-spacing:${
|
|
92
|
+
String(value).length === i + 1 ? 0 : 'inherit'
|
|
93
|
+
};">${l}</span>`,
|
|
94
|
+
)
|
|
95
|
+
.join('');
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
makeElementPlainTextContentEditable(textBlock);
|
|
100
|
+
textBlock.tabIndex = tabIndex || 0;
|
|
101
|
+
textBlock.innerText = mode === 'designer' ? value : processedText;
|
|
102
|
+
textBlock.addEventListener('blur', (e: Event) => {
|
|
103
|
+
if (onChange) onChange({ key: 'content', value: getText(e.target as HTMLDivElement) });
|
|
104
|
+
if (stopEditing) stopEditing();
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
if (schema.dynamicFontSize) {
|
|
108
|
+
let dynamicFontSize: undefined | number = undefined;
|
|
109
|
+
|
|
110
|
+
textBlock.addEventListener('keyup', () => {
|
|
111
|
+
setTimeout(() => {
|
|
112
|
+
// Use a regular function instead of an async one since we don't need await
|
|
113
|
+
(() => {
|
|
114
|
+
if (!textBlock.textContent) return;
|
|
115
|
+
dynamicFontSize = calculateDynamicFontSize({
|
|
116
|
+
textSchema: schema,
|
|
117
|
+
fontKitFont,
|
|
118
|
+
value: getText(textBlock),
|
|
119
|
+
startingFontSize: dynamicFontSize,
|
|
120
|
+
});
|
|
121
|
+
textBlock.style.fontSize = `${dynamicFontSize}pt`;
|
|
122
|
+
|
|
123
|
+
const { topAdj: newTopAdj, bottomAdj: newBottomAdj } = getBrowserVerticalFontAdjustments(
|
|
124
|
+
fontKitFont,
|
|
125
|
+
dynamicFontSize ?? schema.fontSize ?? DEFAULT_FONT_SIZE,
|
|
126
|
+
schema.lineHeight ?? DEFAULT_LINE_HEIGHT,
|
|
127
|
+
schema.verticalAlignment ?? DEFAULT_VERTICAL_ALIGNMENT,
|
|
128
|
+
);
|
|
129
|
+
textBlock.style.paddingTop = `${newTopAdj}px`;
|
|
130
|
+
textBlock.style.marginBottom = `${newBottomAdj}px`;
|
|
131
|
+
})();
|
|
132
|
+
}, 0);
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
if (usePlaceholder) {
|
|
137
|
+
textBlock.style.color = PLACEHOLDER_FONT_COLOR;
|
|
138
|
+
textBlock.addEventListener('focus', () => {
|
|
139
|
+
if (textBlock.innerText === placeholder) {
|
|
140
|
+
textBlock.innerText = '';
|
|
141
|
+
textBlock.style.color = schema.fontColor ?? DEFAULT_FONT_COLOR;
|
|
142
|
+
}
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
if (mode === 'designer') {
|
|
147
|
+
setTimeout(() => {
|
|
148
|
+
textBlock.focus();
|
|
149
|
+
// Set the focus to the end of the editable element when you focus, as we would for a textarea
|
|
150
|
+
const selection = window.getSelection();
|
|
151
|
+
const range = document.createRange();
|
|
152
|
+
if (selection && range) {
|
|
153
|
+
range.selectNodeContents(textBlock);
|
|
154
|
+
range.collapse(false); // Collapse range to the end
|
|
155
|
+
selection?.removeAllRanges();
|
|
156
|
+
selection?.addRange(range);
|
|
157
|
+
}
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
};
|
|
161
|
+
|
|
162
|
+
export const buildStyledTextContainer = (
|
|
163
|
+
arg: UIRenderProps<TextSchema>,
|
|
164
|
+
fontKitFont: FontKitFont,
|
|
165
|
+
value: string,
|
|
166
|
+
) => {
|
|
167
|
+
const { schema, rootElement, mode } = arg;
|
|
168
|
+
|
|
169
|
+
let dynamicFontSize: undefined | number = undefined;
|
|
170
|
+
|
|
171
|
+
if (schema.dynamicFontSize && value) {
|
|
172
|
+
dynamicFontSize = calculateDynamicFontSize({
|
|
173
|
+
textSchema: schema,
|
|
174
|
+
fontKitFont,
|
|
175
|
+
value,
|
|
176
|
+
startingFontSize: dynamicFontSize,
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
// Depending on vertical alignment, we need to move the top or bottom of the font to keep
|
|
181
|
+
// it within it's defined box and align it with the generated pdf.
|
|
182
|
+
const { topAdj, bottomAdj } = getBrowserVerticalFontAdjustments(
|
|
183
|
+
fontKitFont,
|
|
184
|
+
dynamicFontSize ?? schema.fontSize ?? DEFAULT_FONT_SIZE,
|
|
185
|
+
schema.lineHeight ?? DEFAULT_LINE_HEIGHT,
|
|
186
|
+
schema.verticalAlignment ?? DEFAULT_VERTICAL_ALIGNMENT,
|
|
187
|
+
);
|
|
188
|
+
|
|
189
|
+
const topAdjustment = topAdj.toString();
|
|
190
|
+
const bottomAdjustment = bottomAdj.toString();
|
|
191
|
+
|
|
192
|
+
const container = document.createElement('div');
|
|
193
|
+
|
|
194
|
+
const containerStyle: CSS.Properties = {
|
|
195
|
+
padding: 0,
|
|
196
|
+
resize: 'none',
|
|
197
|
+
backgroundColor: getBackgroundColor(value, schema),
|
|
198
|
+
border: 'none',
|
|
199
|
+
display: 'flex',
|
|
200
|
+
flexDirection: 'column',
|
|
201
|
+
justifyContent: mapVerticalAlignToFlex(schema.verticalAlignment),
|
|
202
|
+
width: '100%',
|
|
203
|
+
height: '100%',
|
|
204
|
+
cursor: isEditable(mode, schema) ? 'text' : 'default',
|
|
205
|
+
};
|
|
206
|
+
Object.assign(container.style, containerStyle);
|
|
207
|
+
rootElement.innerHTML = '';
|
|
208
|
+
rootElement.appendChild(container);
|
|
209
|
+
|
|
210
|
+
// text decoration
|
|
211
|
+
const textDecorations = [];
|
|
212
|
+
if (schema.strikethrough) textDecorations.push('line-through');
|
|
213
|
+
if (schema.underline) textDecorations.push('underline');
|
|
214
|
+
|
|
215
|
+
const textBlockStyle: CSS.Properties = {
|
|
216
|
+
// Font formatting styles
|
|
217
|
+
fontFamily: schema.fontName ? `'${schema.fontName}'` : 'inherit',
|
|
218
|
+
color: schema.fontColor ? schema.fontColor : DEFAULT_FONT_COLOR,
|
|
219
|
+
fontSize: `${dynamicFontSize ?? schema.fontSize ?? DEFAULT_FONT_SIZE}pt`,
|
|
220
|
+
letterSpacing: `${schema.characterSpacing ?? DEFAULT_CHARACTER_SPACING}pt`,
|
|
221
|
+
lineHeight: `${schema.lineHeight ?? DEFAULT_LINE_HEIGHT}em`,
|
|
222
|
+
textAlign: schema.alignment ?? DEFAULT_ALIGNMENT,
|
|
223
|
+
whiteSpace: 'pre-wrap',
|
|
224
|
+
wordBreak: 'break-word',
|
|
225
|
+
// Block layout styles
|
|
226
|
+
resize: 'none',
|
|
227
|
+
border: 'none',
|
|
228
|
+
outline: 'none',
|
|
229
|
+
marginBottom: `${bottomAdjustment}px`,
|
|
230
|
+
paddingTop: `${topAdjustment}px`,
|
|
231
|
+
backgroundColor: 'transparent',
|
|
232
|
+
textDecoration: textDecorations.join(' '),
|
|
233
|
+
};
|
|
234
|
+
|
|
235
|
+
const textBlock = document.createElement('div');
|
|
236
|
+
textBlock.id = 'text-' + String(schema.id);
|
|
237
|
+
Object.assign(textBlock.style, textBlockStyle);
|
|
238
|
+
|
|
239
|
+
container.appendChild(textBlock);
|
|
240
|
+
|
|
241
|
+
return textBlock;
|
|
242
|
+
};
|
|
243
|
+
|
|
244
|
+
/**
|
|
245
|
+
* Firefox doesn't support 'plaintext-only' contentEditable mode, which we want to avoid mark-up.
|
|
246
|
+
* This function adds a workaround for Firefox to make the contentEditable element behave like 'plaintext-only'.
|
|
247
|
+
*/
|
|
248
|
+
export const makeElementPlainTextContentEditable = (element: HTMLElement) => {
|
|
249
|
+
if (!isFirefox()) {
|
|
250
|
+
element.contentEditable = 'plaintext-only';
|
|
251
|
+
return;
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
element.contentEditable = 'true';
|
|
255
|
+
element.addEventListener('keydown', (e: KeyboardEvent) => {
|
|
256
|
+
if (e.key === 'Enter' && !e.shiftKey) {
|
|
257
|
+
e.preventDefault();
|
|
258
|
+
document.execCommand('insertLineBreak', false, undefined);
|
|
259
|
+
}
|
|
260
|
+
});
|
|
261
|
+
|
|
262
|
+
element.addEventListener('paste', (e: ClipboardEvent) => {
|
|
263
|
+
e.preventDefault();
|
|
264
|
+
const paste = e.clipboardData?.getData('text');
|
|
265
|
+
const selection = window.getSelection();
|
|
266
|
+
if (!selection?.rangeCount) return;
|
|
267
|
+
selection.deleteFromDocument();
|
|
268
|
+
selection.getRangeAt(0).insertNode(document.createTextNode(paste || ''));
|
|
269
|
+
selection.collapseToEnd();
|
|
270
|
+
});
|
|
271
|
+
};
|
|
272
|
+
|
|
273
|
+
export const mapVerticalAlignToFlex = (verticalAlignmentValue: string | undefined) => {
|
|
274
|
+
switch (verticalAlignmentValue) {
|
|
275
|
+
case VERTICAL_ALIGN_TOP:
|
|
276
|
+
return 'flex-start';
|
|
277
|
+
case VERTICAL_ALIGN_MIDDLE:
|
|
278
|
+
return 'center';
|
|
279
|
+
case VERTICAL_ALIGN_BOTTOM:
|
|
280
|
+
return 'flex-end';
|
|
281
|
+
}
|
|
282
|
+
return 'flex-start';
|
|
283
|
+
};
|
|
284
|
+
|
|
285
|
+
const getBackgroundColor = (value: string, schema: { backgroundColor?: string }) => {
|
|
286
|
+
if (!value || !schema.backgroundColor) return 'transparent';
|
|
287
|
+
return schema.backgroundColor;
|
|
288
|
+
};
|
package/src/utils.ts
ADDED
|
@@ -0,0 +1,281 @@
|
|
|
1
|
+
import type * as CSS from 'csstype';
|
|
2
|
+
import { cmyk, degrees, degreesToRadians, rgb, Color } from '@pdfme/pdf-lib';
|
|
3
|
+
import { Schema, mm2pt, Mode, isHexValid, ColorType } from '@pdfme/common';
|
|
4
|
+
import { IconNode } from 'lucide';
|
|
5
|
+
import { getDynamicHeightsForTable as _getDynamicHeightsForTable } from './tables/dynamicTemplate.js';
|
|
6
|
+
export const convertForPdfLayoutProps = ({
|
|
7
|
+
schema,
|
|
8
|
+
pageHeight,
|
|
9
|
+
applyRotateTranslate = true,
|
|
10
|
+
}: {
|
|
11
|
+
schema: Schema;
|
|
12
|
+
pageHeight: number;
|
|
13
|
+
applyRotateTranslate?: boolean;
|
|
14
|
+
}) => {
|
|
15
|
+
const { width: mmWidth, height: mmHeight, position, rotate, opacity } = schema;
|
|
16
|
+
const { x: mmX, y: mmY } = position;
|
|
17
|
+
|
|
18
|
+
const rotateDegrees = rotate ? -rotate : 0;
|
|
19
|
+
const width = mm2pt(mmWidth);
|
|
20
|
+
const height = mm2pt(mmHeight);
|
|
21
|
+
let x = mm2pt(mmX);
|
|
22
|
+
// PDF coordinate system is from bottom left, UI is top left, so we need to flip the y axis
|
|
23
|
+
let y = pageHeight - mm2pt(mmY) - height;
|
|
24
|
+
|
|
25
|
+
if (rotateDegrees && applyRotateTranslate) {
|
|
26
|
+
// If rotating we must pivot around the same point as the UI performs its rotation.
|
|
27
|
+
// The UI performs rotation around the objects center point (the pivot point below),
|
|
28
|
+
// pdflib rotates around the bottom left corner of the object.
|
|
29
|
+
// We must therefore adjust the X and Y by rotating the bottom left corner by this pivot point.
|
|
30
|
+
const pivotPoint = { x: x + width / 2, y: pageHeight - mm2pt(mmY) - height / 2 };
|
|
31
|
+
const rotatedPoint = rotatePoint({ x, y }, pivotPoint, rotateDegrees);
|
|
32
|
+
x = rotatedPoint.x;
|
|
33
|
+
y = rotatedPoint.y;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
return {
|
|
37
|
+
position: { x, y },
|
|
38
|
+
height: height,
|
|
39
|
+
width: width,
|
|
40
|
+
rotate: degrees(rotateDegrees),
|
|
41
|
+
opacity,
|
|
42
|
+
};
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
export const rotatePoint = (
|
|
46
|
+
point: { x: number; y: number },
|
|
47
|
+
pivot: { x: number; y: number },
|
|
48
|
+
angleDegrees: number,
|
|
49
|
+
): { x: number; y: number } => {
|
|
50
|
+
const angleRadians = degreesToRadians(angleDegrees);
|
|
51
|
+
|
|
52
|
+
const x =
|
|
53
|
+
Math.cos(angleRadians) * (point.x - pivot.x) -
|
|
54
|
+
Math.sin(angleRadians) * (point.y - pivot.y) +
|
|
55
|
+
pivot.x;
|
|
56
|
+
const y =
|
|
57
|
+
Math.sin(angleRadians) * (point.x - pivot.x) +
|
|
58
|
+
Math.cos(angleRadians) * (point.y - pivot.y) +
|
|
59
|
+
pivot.y;
|
|
60
|
+
|
|
61
|
+
return { x, y };
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
export const getDynamicHeightsForTable = _getDynamicHeightsForTable;
|
|
65
|
+
|
|
66
|
+
// ----------------------------------------
|
|
67
|
+
|
|
68
|
+
export const addAlphaToHex = (hex: string, alphaPercentage: number) => {
|
|
69
|
+
if (!/^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/i.test(hex)) {
|
|
70
|
+
throw new Error('Invalid HEX color code');
|
|
71
|
+
}
|
|
72
|
+
const alphaValue = Math.round((alphaPercentage / 100) * 255);
|
|
73
|
+
let alphaHex = alphaValue.toString(16);
|
|
74
|
+
if (alphaHex.length === 1) alphaHex = '0' + alphaHex;
|
|
75
|
+
return hex + alphaHex;
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
export const isEditable = (mode: Mode, schema: Schema) =>
|
|
79
|
+
mode === 'designer' || (mode === 'form' && schema.readOnly !== true);
|
|
80
|
+
|
|
81
|
+
const hex2rgb = (hex: string) => {
|
|
82
|
+
if (hex.slice(0, 1) === '#') hex = hex.slice(1);
|
|
83
|
+
if (hex.length === 3)
|
|
84
|
+
hex =
|
|
85
|
+
hex.slice(0, 1) +
|
|
86
|
+
hex.slice(0, 1) +
|
|
87
|
+
hex.slice(1, 2) +
|
|
88
|
+
hex.slice(1, 2) +
|
|
89
|
+
hex.slice(2, 3) +
|
|
90
|
+
hex.slice(2, 3);
|
|
91
|
+
|
|
92
|
+
return [hex.slice(0, 2), hex.slice(2, 4), hex.slice(4, 6)].map((str) => parseInt(str, 16));
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
export const hex2RgbColor = (hexString: string | undefined) => {
|
|
96
|
+
if (hexString) {
|
|
97
|
+
const isValid = isHexValid(hexString);
|
|
98
|
+
|
|
99
|
+
if (!isValid) {
|
|
100
|
+
throw new Error(`Invalid hex color value ${hexString}`);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
const [r, g, b] = hex2rgb(hexString);
|
|
104
|
+
|
|
105
|
+
return rgb(r / 255, g / 255, b / 255);
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
return undefined;
|
|
109
|
+
};
|
|
110
|
+
|
|
111
|
+
const hex2CmykColor = (hexString: string | undefined) => {
|
|
112
|
+
if (hexString) {
|
|
113
|
+
const isValid = isHexValid(hexString);
|
|
114
|
+
|
|
115
|
+
if (!isValid) {
|
|
116
|
+
throw new Error(`Invalid hex color value ${hexString}`);
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
// Remove the # if it's present
|
|
120
|
+
hexString = hexString.replace('#', '');
|
|
121
|
+
|
|
122
|
+
// Extract the hexadecimal color code and the opacity
|
|
123
|
+
const hexColor = hexString.substring(0, 6);
|
|
124
|
+
const opacityColor = hexString.substring(6, 8);
|
|
125
|
+
const opacity = opacityColor ? parseInt(opacityColor, 16) / 255 : 1;
|
|
126
|
+
|
|
127
|
+
// Convert the hex values to decimal
|
|
128
|
+
let r = parseInt(hexColor.substring(0, 2), 16) / 255;
|
|
129
|
+
let g = parseInt(hexColor.substring(2, 4), 16) / 255;
|
|
130
|
+
let b = parseInt(hexColor.substring(4, 6), 16) / 255;
|
|
131
|
+
|
|
132
|
+
// Apply the opacity
|
|
133
|
+
r = r * opacity + (1 - opacity);
|
|
134
|
+
g = g * opacity + (1 - opacity);
|
|
135
|
+
b = b * opacity + (1 - opacity);
|
|
136
|
+
|
|
137
|
+
// Calculate the CMYK values
|
|
138
|
+
const k = 1 - Math.max(r, g, b);
|
|
139
|
+
const c = r === 0 ? 0 : (1 - r - k) / (1 - k);
|
|
140
|
+
const m = g === 0 ? 0 : (1 - g - k) / (1 - k);
|
|
141
|
+
const y = b === 0 ? 0 : (1 - b - k) / (1 - k);
|
|
142
|
+
|
|
143
|
+
return cmyk(c, m, y, k);
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
return undefined;
|
|
147
|
+
};
|
|
148
|
+
|
|
149
|
+
export const hex2PrintingColor = (color?: string | Color, colorType?: ColorType) => {
|
|
150
|
+
// if color is already CMYK, RGB or Grayscale, does not required to convert
|
|
151
|
+
if (typeof color === 'object') return color;
|
|
152
|
+
return colorType?.toLowerCase() == 'cmyk' ? hex2CmykColor(color) : hex2RgbColor(color);
|
|
153
|
+
};
|
|
154
|
+
|
|
155
|
+
export const readFile = (input: File | FileList | null): Promise<string | ArrayBuffer> =>
|
|
156
|
+
new Promise((resolve, reject) => {
|
|
157
|
+
const fileReader = new FileReader();
|
|
158
|
+
|
|
159
|
+
fileReader.onload = (e) => {
|
|
160
|
+
if (e.target?.result) {
|
|
161
|
+
resolve(e.target.result);
|
|
162
|
+
}
|
|
163
|
+
};
|
|
164
|
+
|
|
165
|
+
fileReader.onerror = () => {
|
|
166
|
+
reject(new Error('[@pdfme/schemas] File reading failed'));
|
|
167
|
+
};
|
|
168
|
+
|
|
169
|
+
let file: File | null = null;
|
|
170
|
+
if (input instanceof FileList && input.length > 0) {
|
|
171
|
+
file = input[0];
|
|
172
|
+
} else if (input instanceof File) {
|
|
173
|
+
file = input;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
if (file) {
|
|
177
|
+
fileReader.readAsDataURL(file);
|
|
178
|
+
} else {
|
|
179
|
+
reject(new Error('[@pdfme/schemas] No files provided'));
|
|
180
|
+
}
|
|
181
|
+
});
|
|
182
|
+
|
|
183
|
+
export const createErrorElm = () => {
|
|
184
|
+
const container = document.createElement('div');
|
|
185
|
+
const containerStyle: CSS.Properties = {
|
|
186
|
+
display: 'flex',
|
|
187
|
+
alignItems: 'center',
|
|
188
|
+
justifyContent: 'center',
|
|
189
|
+
width: '100%',
|
|
190
|
+
height: '100%',
|
|
191
|
+
};
|
|
192
|
+
Object.assign(container.style, containerStyle);
|
|
193
|
+
|
|
194
|
+
const span = document.createElement('span');
|
|
195
|
+
const spanStyle: CSS.Properties = {
|
|
196
|
+
color: 'white',
|
|
197
|
+
background: 'red',
|
|
198
|
+
padding: '0.25rem',
|
|
199
|
+
fontSize: '12pt',
|
|
200
|
+
fontWeight: 'bold',
|
|
201
|
+
borderRadius: '2px',
|
|
202
|
+
fontFamily: "'Open Sans', sans-serif",
|
|
203
|
+
};
|
|
204
|
+
Object.assign(span.style, spanStyle);
|
|
205
|
+
|
|
206
|
+
span.textContent = 'ERROR';
|
|
207
|
+
container.appendChild(span);
|
|
208
|
+
|
|
209
|
+
return container;
|
|
210
|
+
};
|
|
211
|
+
|
|
212
|
+
export const createSvgStr = (icon: IconNode, attrs?: Record<string, string>): string => {
|
|
213
|
+
// In lucide 0.475.0, the icon is an array of elements, not a single SVG element
|
|
214
|
+
// We need to create an SVG wrapper and add the elements as children
|
|
215
|
+
|
|
216
|
+
// Handle non-array input
|
|
217
|
+
if (!Array.isArray(icon)) {
|
|
218
|
+
return String(icon);
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
// Create default SVG attributes
|
|
222
|
+
const svgAttrs = {
|
|
223
|
+
xmlns: 'http://www.w3.org/2000/svg',
|
|
224
|
+
width: '24',
|
|
225
|
+
height: '24',
|
|
226
|
+
viewBox: '0 0 24 24',
|
|
227
|
+
fill: 'none',
|
|
228
|
+
stroke: 'currentColor',
|
|
229
|
+
'stroke-width': '2',
|
|
230
|
+
'stroke-linecap': 'round',
|
|
231
|
+
'stroke-linejoin': 'round',
|
|
232
|
+
...(attrs || {}),
|
|
233
|
+
};
|
|
234
|
+
|
|
235
|
+
// Format SVG attributes string
|
|
236
|
+
const svgAttrString = Object.entries(svgAttrs)
|
|
237
|
+
.map(([key, value]) => `${key}="${value}"`)
|
|
238
|
+
.join(' ');
|
|
239
|
+
|
|
240
|
+
// Helper function to process a single element
|
|
241
|
+
const processElement = (element: unknown): string => {
|
|
242
|
+
if (!Array.isArray(element)) {
|
|
243
|
+
return String(element);
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
const [tag, attributes = {}, children = []] = element as [
|
|
247
|
+
unknown,
|
|
248
|
+
Record<string, string>,
|
|
249
|
+
unknown[],
|
|
250
|
+
];
|
|
251
|
+
const tagName = String(tag);
|
|
252
|
+
|
|
253
|
+
// Format attributes string
|
|
254
|
+
const attrString = Object.entries(attributes)
|
|
255
|
+
.map(([key, value]) => `${key}="${value}"`)
|
|
256
|
+
.join(' ');
|
|
257
|
+
|
|
258
|
+
// Process children recursively
|
|
259
|
+
let childrenString = '';
|
|
260
|
+
|
|
261
|
+
if (Array.isArray(children) && children.length > 0) {
|
|
262
|
+
childrenString = children.map((child) => processElement(child)).join('');
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
// Return properly formatted element string
|
|
266
|
+
if (childrenString) {
|
|
267
|
+
return `<${String(tagName)}${attrString ? ' ' + String(attrString) : ''}>${childrenString}</${String(tagName)}>`;
|
|
268
|
+
} else {
|
|
269
|
+
// Self-closing tag for empty children
|
|
270
|
+
return `<${String(tagName)}${attrString ? ' ' + String(attrString) : ''}/>`;
|
|
271
|
+
}
|
|
272
|
+
};
|
|
273
|
+
|
|
274
|
+
// Process all elements and join them
|
|
275
|
+
const elementsString = Array.isArray(icon)
|
|
276
|
+
? icon.map((element) => processElement(element)).join('')
|
|
277
|
+
: processElement(icon);
|
|
278
|
+
|
|
279
|
+
// Return the complete SVG string
|
|
280
|
+
return `<svg ${svgAttrString}>${elementsString}</svg>`;
|
|
281
|
+
};
|
package/tsconfig.json
ADDED