@webiny/ui 5.41.4 → 5.42.0-beta.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/Accordion/AccordionItemActions.js.map +1 -1
- package/AutoComplete/AutoComplete.js.map +1 -1
- package/AutoComplete/MultiAutoComplete.js +1 -0
- package/AutoComplete/MultiAutoComplete.js.map +1 -1
- package/Carousel/Carousel.js.map +1 -1
- package/Checkbox/Checkbox.js.map +1 -1
- package/Checkbox/CheckboxGroup.js.map +1 -1
- package/CodeEditor/CodeEditor.js.map +1 -1
- package/ColorPicker/ColorPicker.d.ts +7 -2
- package/ColorPicker/ColorPicker.js +46 -16
- package/ColorPicker/ColorPicker.js.map +1 -1
- package/ConfirmationDialog/ConfirmationDialog.js.map +1 -1
- package/DataTable/DataTable.js.map +1 -1
- package/Dialog/Dialog.js +1 -1
- package/Dialog/Dialog.js.map +1 -1
- package/Drawer/Drawer.js.map +1 -1
- package/DynamicFieldset/Fieldset.js.map +1 -1
- package/ImageEditor/ImageEditor.js.map +1 -1
- package/ImageEditor/toolbar/crop.js.map +1 -1
- package/ImageEditor/toolbar/filter.js.map +1 -1
- package/ImageEditor/toolbar/flip.js.map +1 -1
- package/ImageEditor/toolbar/rotate.js.map +1 -1
- package/ImageUpload/Image.js.map +1 -1
- package/ImageUpload/MultiImageUpload.js.map +1 -1
- package/ImageUpload/SingleImageUpload.js.map +1 -1
- package/Input/__tests__/Input.test.d.ts +1 -1
- package/Input/__tests__/Input.test.js +1 -2
- package/Input/__tests__/Input.test.js.map +1 -1
- package/List/DataList/DataList.js.map +1 -1
- package/List/DataList/DataListModalOverlay/DataListModalOverlay.js.map +1 -1
- package/List/DataList/DataListModalOverlay/DataListModalOverlayAction.js.map +1 -1
- package/List/DataList/DataListModalOverlay/DataListModalOverlayContext.js.map +1 -1
- package/List/DataList/DataListWithSections.js.map +1 -1
- package/List/List.js.map +1 -1
- package/Menu/Menu.d.ts +12 -19
- package/Menu/Menu.js +70 -77
- package/Menu/Menu.js.map +1 -1
- package/Radio/Radio.js.map +1 -1
- package/Radio/RadioGroup.js.map +1 -1
- package/RichTextEditor/RichTextEditor.js +2 -2
- package/RichTextEditor/RichTextEditor.js.map +1 -1
- package/RichTextEditor/createPropsFromConfig.js.map +1 -1
- package/Select/Select.js.map +1 -1
- package/Slider/Slider.js.map +1 -1
- package/Snackbar/Snackbar.js.map +1 -1
- package/Switch/Switch.js.map +1 -1
- package/Tabs/Tab.js +2 -2
- package/Tabs/Tab.js.map +1 -1
- package/Tabs/Tabs.d.ts +4 -4
- package/Tabs/Tabs.js +14 -6
- package/Tabs/Tabs.js.map +1 -1
- package/Tags/Tags.js.map +1 -1
- package/Tooltip/Tooltip.js.map +1 -1
- package/package.json +12 -20
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","_interopRequireDefault","require","_toolbar","_classnames","_Button","_loadScript","_EMOTION_STRINGIFIED_CSS_ERROR__","toolbar","flip","filter","crop","rotate","Toolbar","_base","default","process","env","NODE_ENV","target","label","name","styles","map","toString","ToolOptions","ApplyCancelActions","initScripts","Promise","resolve","window","Caman","loadScript","ImageEditor","exports","_React$Component","_this","_classCallCheck2","_len","arguments","length","args","Array","_key","_callSuper2","concat","_defineProperty2","tool","src","React","createRef","props","image","Image","canvas","current","onload","width","height","ctx","getContext","drawImage","setState","tt","onActivate","options","getToolOptions","startsWith","toDataURL","state","apply","deactivateTool","cancel","_inherits2","_createClass2","key","value","componentDidMount","_this2","then","updateCanvas","setTimeout","option","autoEnable","activateTool","render","_this3","_this$props","tools","children","editor","createElement","Fragment","className","classNames","disabled","icon","renderForm","ButtonSecondary","onClick","cancelActiveTool","ButtonPrimary","applyActiveTool","style","textAlign","margin","id","maxWidth","ref","getCanvasDataUrl","activeTool","Component"],"sources":["ImageEditor.tsx"],"sourcesContent":["import React from \"react\";\nimport { flip, filter, crop, rotate } from \"./toolbar\";\nimport { ImageEditorTool, ToolbarTool } from \"./toolbar/types\";\nimport styled from \"@emotion/styled\";\nimport classNames from \"classnames\";\nimport { ButtonSecondary, ButtonPrimary } from \"../Button\";\n/**\n * Package load-script does not have types.\n */\n// @ts-expect-error\nimport loadScript from \"load-script\";\n\nconst toolbar = {\n flip,\n filter,\n crop,\n rotate\n};\n\nconst Toolbar = styled(\"div\")({\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n backgroundColor: \"var(--mdc-theme-secondary)\",\n margin: \"-24px -24px 0px -24px\",\n padding: 2,\n position: \"absolute\",\n width: \"100%\",\n boxSizing: \"border-box\",\n zIndex: 10,\n \"> div.disabled\": {\n opacity: 0.5,\n pointerEvents: \"none\"\n }\n});\n\nconst ToolOptions = styled(\"div\")({\n margin: \"50px -24px 10px -24px\",\n boxSizing: \"border-box\",\n padding: 10,\n backgroundColor: \"var(--mdc-theme-background)\",\n borderTop: \"1px solid var(--mdc-theme-on-background)\"\n});\n\nconst ApplyCancelActions = styled(\"div\")({\n textAlign: \"center\"\n});\n\nconst initScripts = (): Promise<string> => {\n return new Promise((resolve: any) => {\n // @ts-expect-error\n if (window.Caman) {\n return resolve();\n }\n return loadScript(\n \"https://cdnjs.cloudflare.com/ajax/libs/camanjs/4.1.2/caman.full.min.js\",\n resolve\n );\n });\n};\n\ninterface RenderPropArgs {\n render: () => React.ReactNode;\n getCanvasDataUrl: () => string;\n activeTool: ImageEditorTool | null;\n applyActiveTool: () => Promise<void>;\n cancelActiveTool: () => Promise<void>;\n}\n\ninterface ImageEditorPropsPropsOptions {\n autoEnable: boolean;\n}\n\ninterface ImageEditorProps {\n src: string;\n tools: ToolbarTool[];\n options?: {\n flip: ImageEditorPropsPropsOptions;\n filter: ImageEditorPropsPropsOptions;\n crop: ImageEditorPropsPropsOptions;\n rotate: ImageEditorPropsPropsOptions;\n };\n onToolActivate?: () => void;\n onToolDeactivate?: () => void;\n children?: (props: RenderPropArgs) => React.ReactNode;\n}\n\ninterface ImageEditorState {\n tool: ImageEditorTool | null;\n src: string;\n}\n\nclass ImageEditor extends React.Component<ImageEditorProps, ImageEditorState> {\n static defaultProps: Partial<ImageEditorProps> = {\n tools: [\"crop\", \"flip\", \"rotate\", \"filter\"]\n };\n\n public override state: ImageEditorState = {\n tool: null,\n src: \"\"\n };\n\n public canvas = React.createRef<HTMLCanvasElement>();\n public image?: HTMLImageElement;\n\n public override componentDidMount() {\n initScripts().then(() => {\n this.updateCanvas();\n setTimeout(() => {\n const { options } = this.props;\n if (!options || typeof options !== \"object\") {\n return;\n }\n for (const key in options) {\n const option = options[key as ToolbarTool];\n if (option.autoEnable === true) {\n const tool: ImageEditorTool | null = toolbar[key as ToolbarTool];\n tool && this.activateTool(tool);\n break;\n }\n }\n }, 250);\n });\n }\n\n private readonly updateCanvas = (): void => {\n const { src } = this.props;\n this.image = new window.Image();\n const canvas = this.canvas.current;\n if (canvas) {\n this.image.onload = () => {\n if (this.image) {\n canvas.width = this.image.width;\n canvas.height = this.image.height;\n const ctx = canvas.getContext(\"2d\") as CanvasRenderingContext2D;\n ctx.drawImage(this.image, 0, 0);\n }\n };\n\n this.image.src = src;\n }\n };\n\n private readonly activateTool = (tool: ToolbarTool | ImageEditorTool): void => {\n if (typeof tool === \"string\") {\n tool = toolbar[tool];\n }\n\n this.setState({ tool }, () => {\n const tt = tool as ImageEditorTool;\n typeof tt.onActivate === \"function\" &&\n tt.onActivate({ canvas: this.canvas, options: this.getToolOptions(tt) });\n });\n };\n\n private readonly deactivateTool = (): void => {\n this.setState({\n tool: null\n });\n };\n\n public readonly getCanvasDataUrl = (): string => {\n const canvas = this.canvas.current as HTMLCanvasElement;\n if (canvas) {\n const { src } = this.props;\n if (src.startsWith(\"data:image/jpeg;\")) {\n return canvas.toDataURL(\"image/jpeg\", 1.0);\n }\n\n return canvas.toDataURL();\n }\n\n return \"\";\n };\n\n private readonly applyActiveTool = async (): Promise<void> => {\n const { tool } = this.state;\n if (!tool) {\n return;\n }\n\n if (tool.apply) {\n await tool.apply({\n canvas: this.canvas\n });\n }\n this.deactivateTool();\n };\n\n private readonly cancelActiveTool = async (): Promise<void> => {\n const { tool } = this.state;\n if (!tool) {\n return;\n }\n\n if (tool.cancel) {\n await tool.cancel({\n canvas: this.canvas\n });\n }\n this.deactivateTool();\n };\n\n private readonly getToolOptions = (\n tool: ImageEditorTool\n ): Partial<ImageEditorPropsPropsOptions> => {\n const { options } = this.props;\n if (!options || typeof options !== \"object\") {\n return {};\n }\n\n return options[tool.name as ToolbarTool] || {};\n };\n\n public override render(): React.ReactNode {\n const { src, tools, children } = this.props;\n const { tool } = this.state;\n const editor = (\n <React.Fragment>\n <Toolbar>\n {tools.map(key => {\n const tool: ImageEditorTool = toolbar[key];\n if (!tool) {\n return null;\n }\n\n return (\n <div key={key} className={classNames({ disabled: this.state.tool })}>\n {tool.icon({\n activateTool: () => this.activateTool(tool)\n })}\n </div>\n );\n })}\n </Toolbar>\n\n <ToolOptions>\n {tool ? (\n <>\n {typeof tool.renderForm === \"function\" &&\n tool.renderForm({\n options: this.getToolOptions(tool as ImageEditorTool),\n image: this.image as HTMLImageElement,\n canvas: this.canvas\n })}\n\n <ApplyCancelActions>\n <ButtonSecondary\n data-testid=\"button-cancel\"\n onClick={() => {\n this.cancelActiveTool();\n }}\n >\n Cancel\n </ButtonSecondary>\n \n <ButtonPrimary\n data-testid=\"button-apply\"\n onClick={() => {\n this.applyActiveTool();\n }}\n >\n Apply\n </ButtonPrimary>\n </ApplyCancelActions>\n </>\n ) : (\n <div style={{ textAlign: \"center\" }}>\n Select a tool to start working on your image.\n </div>\n )}\n </ToolOptions>\n\n <div style={{ margin: \"0 auto\", textAlign: \"center\" }}>\n <canvas\n key={src}\n id={\"canvas\"}\n style={{ maxWidth: 700 }}\n ref={this.canvas as React.Ref<any>}\n />\n </div>\n </React.Fragment>\n );\n\n if (typeof children === \"function\") {\n return children({\n render: () => editor,\n // canvas: this.canvas,\n getCanvasDataUrl: this.getCanvasDataUrl,\n activeTool: this.state.tool,\n applyActiveTool: this.applyActiveTool,\n cancelActiveTool: this.cancelActiveTool\n });\n }\n\n return editor;\n }\n}\n\nexport { ImageEditor };\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_react","_interopRequireDefault","require","_toolbar","_classnames","_Button","_loadScript","_EMOTION_STRINGIFIED_CSS_ERROR__","toolbar","flip","filter","crop","rotate","Toolbar","_base","default","process","env","NODE_ENV","target","label","name","styles","map","toString","ToolOptions","ApplyCancelActions","initScripts","Promise","resolve","window","Caman","loadScript","ImageEditor","exports","_React$Component","_this","_classCallCheck2","_len","arguments","length","args","Array","_key","_callSuper2","concat","_defineProperty2","tool","src","React","createRef","props","image","Image","canvas","current","onload","width","height","ctx","getContext","drawImage","setState","tt","onActivate","options","getToolOptions","startsWith","toDataURL","state","apply","deactivateTool","cancel","_inherits2","_createClass2","key","value","componentDidMount","_this2","then","updateCanvas","setTimeout","option","autoEnable","activateTool","render","_this3","_this$props","tools","children","editor","createElement","Fragment","className","classNames","disabled","icon","renderForm","ButtonSecondary","onClick","cancelActiveTool","ButtonPrimary","applyActiveTool","style","textAlign","margin","id","maxWidth","ref","getCanvasDataUrl","activeTool","Component"],"sources":["ImageEditor.tsx"],"sourcesContent":["import React from \"react\";\nimport { flip, filter, crop, rotate } from \"./toolbar\";\nimport { ImageEditorTool, ToolbarTool } from \"./toolbar/types\";\nimport styled from \"@emotion/styled\";\nimport classNames from \"classnames\";\nimport { ButtonSecondary, ButtonPrimary } from \"../Button\";\n/**\n * Package load-script does not have types.\n */\n// @ts-expect-error\nimport loadScript from \"load-script\";\n\nconst toolbar = {\n flip,\n filter,\n crop,\n rotate\n};\n\nconst Toolbar = styled(\"div\")({\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n backgroundColor: \"var(--mdc-theme-secondary)\",\n margin: \"-24px -24px 0px -24px\",\n padding: 2,\n position: \"absolute\",\n width: \"100%\",\n boxSizing: \"border-box\",\n zIndex: 10,\n \"> div.disabled\": {\n opacity: 0.5,\n pointerEvents: \"none\"\n }\n});\n\nconst ToolOptions = styled(\"div\")({\n margin: \"50px -24px 10px -24px\",\n boxSizing: \"border-box\",\n padding: 10,\n backgroundColor: \"var(--mdc-theme-background)\",\n borderTop: \"1px solid var(--mdc-theme-on-background)\"\n});\n\nconst ApplyCancelActions = styled(\"div\")({\n textAlign: \"center\"\n});\n\nconst initScripts = (): Promise<string> => {\n return new Promise((resolve: any) => {\n // @ts-expect-error\n if (window.Caman) {\n return resolve();\n }\n return loadScript(\n \"https://cdnjs.cloudflare.com/ajax/libs/camanjs/4.1.2/caman.full.min.js\",\n resolve\n );\n });\n};\n\ninterface RenderPropArgs {\n render: () => React.ReactNode;\n getCanvasDataUrl: () => string;\n activeTool: ImageEditorTool | null;\n applyActiveTool: () => Promise<void>;\n cancelActiveTool: () => Promise<void>;\n}\n\ninterface ImageEditorPropsPropsOptions {\n autoEnable: boolean;\n}\n\ninterface ImageEditorProps {\n src: string;\n tools: ToolbarTool[];\n options?: {\n flip: ImageEditorPropsPropsOptions;\n filter: ImageEditorPropsPropsOptions;\n crop: ImageEditorPropsPropsOptions;\n rotate: ImageEditorPropsPropsOptions;\n };\n onToolActivate?: () => void;\n onToolDeactivate?: () => void;\n children?: (props: RenderPropArgs) => React.ReactNode;\n}\n\ninterface ImageEditorState {\n tool: ImageEditorTool | null;\n src: string;\n}\n\nclass ImageEditor extends React.Component<ImageEditorProps, ImageEditorState> {\n static defaultProps: Partial<ImageEditorProps> = {\n tools: [\"crop\", \"flip\", \"rotate\", \"filter\"]\n };\n\n public override state: ImageEditorState = {\n tool: null,\n src: \"\"\n };\n\n public canvas = React.createRef<HTMLCanvasElement>();\n public image?: HTMLImageElement;\n\n public override componentDidMount() {\n initScripts().then(() => {\n this.updateCanvas();\n setTimeout(() => {\n const { options } = this.props;\n if (!options || typeof options !== \"object\") {\n return;\n }\n for (const key in options) {\n const option = options[key as ToolbarTool];\n if (option.autoEnable === true) {\n const tool: ImageEditorTool | null = toolbar[key as ToolbarTool];\n tool && this.activateTool(tool);\n break;\n }\n }\n }, 250);\n });\n }\n\n private readonly updateCanvas = (): void => {\n const { src } = this.props;\n this.image = new window.Image();\n const canvas = this.canvas.current;\n if (canvas) {\n this.image.onload = () => {\n if (this.image) {\n canvas.width = this.image.width;\n canvas.height = this.image.height;\n const ctx = canvas.getContext(\"2d\") as CanvasRenderingContext2D;\n ctx.drawImage(this.image, 0, 0);\n }\n };\n\n this.image.src = src;\n }\n };\n\n private readonly activateTool = (tool: ToolbarTool | ImageEditorTool): void => {\n if (typeof tool === \"string\") {\n tool = toolbar[tool];\n }\n\n this.setState({ tool }, () => {\n const tt = tool as ImageEditorTool;\n typeof tt.onActivate === \"function\" &&\n tt.onActivate({ canvas: this.canvas, options: this.getToolOptions(tt) });\n });\n };\n\n private readonly deactivateTool = (): void => {\n this.setState({\n tool: null\n });\n };\n\n public readonly getCanvasDataUrl = (): string => {\n const canvas = this.canvas.current as HTMLCanvasElement;\n if (canvas) {\n const { src } = this.props;\n if (src.startsWith(\"data:image/jpeg;\")) {\n return canvas.toDataURL(\"image/jpeg\", 1.0);\n }\n\n return canvas.toDataURL();\n }\n\n return \"\";\n };\n\n private readonly applyActiveTool = async (): Promise<void> => {\n const { tool } = this.state;\n if (!tool) {\n return;\n }\n\n if (tool.apply) {\n await tool.apply({\n canvas: this.canvas\n });\n }\n this.deactivateTool();\n };\n\n private readonly cancelActiveTool = async (): Promise<void> => {\n const { tool } = this.state;\n if (!tool) {\n return;\n }\n\n if (tool.cancel) {\n await tool.cancel({\n canvas: this.canvas\n });\n }\n this.deactivateTool();\n };\n\n private readonly getToolOptions = (\n tool: ImageEditorTool\n ): Partial<ImageEditorPropsPropsOptions> => {\n const { options } = this.props;\n if (!options || typeof options !== \"object\") {\n return {};\n }\n\n return options[tool.name as ToolbarTool] || {};\n };\n\n public override render(): React.ReactNode {\n const { src, tools, children } = this.props;\n const { tool } = this.state;\n const editor = (\n <React.Fragment>\n <Toolbar>\n {tools.map(key => {\n const tool: ImageEditorTool = toolbar[key];\n if (!tool) {\n return null;\n }\n\n return (\n <div key={key} className={classNames({ disabled: this.state.tool })}>\n {tool.icon({\n activateTool: () => this.activateTool(tool)\n })}\n </div>\n );\n })}\n </Toolbar>\n\n <ToolOptions>\n {tool ? (\n <>\n {typeof tool.renderForm === \"function\" &&\n tool.renderForm({\n options: this.getToolOptions(tool as ImageEditorTool),\n image: this.image as HTMLImageElement,\n canvas: this.canvas\n })}\n\n <ApplyCancelActions>\n <ButtonSecondary\n data-testid=\"button-cancel\"\n onClick={() => {\n this.cancelActiveTool();\n }}\n >\n Cancel\n </ButtonSecondary>\n \n <ButtonPrimary\n data-testid=\"button-apply\"\n onClick={() => {\n this.applyActiveTool();\n }}\n >\n Apply\n </ButtonPrimary>\n </ApplyCancelActions>\n </>\n ) : (\n <div style={{ textAlign: \"center\" }}>\n Select a tool to start working on your image.\n </div>\n )}\n </ToolOptions>\n\n <div style={{ margin: \"0 auto\", textAlign: \"center\" }}>\n <canvas\n key={src}\n id={\"canvas\"}\n style={{ maxWidth: 700 }}\n ref={this.canvas as React.Ref<any>}\n />\n </div>\n </React.Fragment>\n );\n\n if (typeof children === \"function\") {\n return children({\n render: () => editor,\n // canvas: this.canvas,\n getCanvasDataUrl: this.getCanvasDataUrl,\n activeTool: this.state.tool,\n applyActiveTool: this.applyActiveTool,\n cancelActiveTool: this.cancelActiveTool\n });\n }\n\n return editor;\n }\n}\n\nexport { ImageEditor };\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","_interopRequireDefault","require","_crop","_Button","_Tooltip","_cropperjs","cropper","undefined","renderForm","default","createElement","style","textAlign","tool","name","icon","_ref","activateTool","Tooltip","placement","content","IconButton","ReactComponent","onClick","onActivate","_ref2","canvas","options","Cropper","current","cancel","destroy","apply","_ref3","Promise","resolve","src","getCroppedCanvas","toDataURL","image","window","Image","ctx","getContext","onload","drawImage","width","height","_default","exports"],"sources":["crop.tsx"],"sourcesContent":["import React from \"react\";\nimport { ImageEditorTool } from \"./types\";\nimport { ReactComponent as CropIcon } from \"./icons/crop.svg\";\nimport { IconButton } from \"~/Button\";\nimport { Tooltip } from \"~/Tooltip\";\nimport Cropper from \"cropperjs\";\nimport \"cropperjs/dist/cropper.css\";\n\nlet cropper: Cropper | undefined = undefined;\n\nconst renderForm = () => {\n return (\n <div style={{ textAlign: \"center\" }}>\n Click and drag to crop a portion of the image. Hold Shift to persist aspect ratio.\n </div>\n );\n};\n\nconst tool: ImageEditorTool = {\n name: \"crop\",\n icon({ activateTool }) {\n return (\n <Tooltip placement={\"bottom\"} content={\"Crop\"}>\n <IconButton\n icon={<CropIcon />}\n onClick={() => activateTool(\"crop\")}\n data-testid={\"crop-item\"}\n />\n </Tooltip>\n );\n },\n renderForm,\n onActivate: ({ canvas, options }) => {\n cropper = new Cropper(canvas.current as HTMLCanvasElement, options);\n },\n cancel: () => cropper && cropper.destroy(),\n apply: ({ canvas }) => {\n return new Promise((resolve: any) => {\n if (!cropper) {\n resolve();\n return;\n }\n\n const current = canvas.current;\n const src = cropper.getCroppedCanvas().toDataURL();\n if (current) {\n const image = new window.Image();\n const ctx = current.getContext(\"2d\") as CanvasRenderingContext2D;\n image.onload = () => {\n ctx.drawImage(image, 0, 0);\n current.width = image.width;\n current.height = image.height;\n\n ctx.drawImage(image, 0, 0);\n resolve();\n };\n image.src = src;\n }\n\n cropper.destroy();\n cropper = undefined;\n });\n }\n};\n\nexport default tool;\n"],"mappings":";;;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AAEA,IAAAC,KAAA,GAAAD,OAAA;AACA,IAAAE,OAAA,GAAAF,OAAA;AACA,IAAAG,QAAA,GAAAH,OAAA;AACA,IAAAI,UAAA,GAAAL,sBAAA,CAAAC,OAAA;AACAA,OAAA;AAEA,IAAIK,OAA4B,GAAGC,SAAS;AAE5C,IAAMC,UAAU,GAAG,SAAbA,UAAUA,CAAA,EAAS;EACrB,oBACIT,MAAA,CAAAU,OAAA,CAAAC,aAAA;IAAKC,KAAK,EAAE;MAAEC,SAAS,EAAE;IAAS;EAAE,GAAC,oFAEhC,CAAC;AAEd,CAAC;AAED,IAAMC,IAAqB,GAAG;EAC1BC,IAAI,EAAE,MAAM;EACZC,IAAI,
|
|
1
|
+
{"version":3,"names":["_react","_interopRequireDefault","require","_crop","_Button","_Tooltip","_cropperjs","cropper","undefined","renderForm","default","createElement","style","textAlign","tool","name","icon","_ref","activateTool","Tooltip","placement","content","IconButton","ReactComponent","onClick","onActivate","_ref2","canvas","options","Cropper","current","cancel","destroy","apply","_ref3","Promise","resolve","src","getCroppedCanvas","toDataURL","image","window","Image","ctx","getContext","onload","drawImage","width","height","_default","exports"],"sources":["crop.tsx"],"sourcesContent":["import React from \"react\";\nimport { ImageEditorTool } from \"./types\";\nimport { ReactComponent as CropIcon } from \"./icons/crop.svg\";\nimport { IconButton } from \"~/Button\";\nimport { Tooltip } from \"~/Tooltip\";\nimport Cropper from \"cropperjs\";\nimport \"cropperjs/dist/cropper.css\";\n\nlet cropper: Cropper | undefined = undefined;\n\nconst renderForm = () => {\n return (\n <div style={{ textAlign: \"center\" }}>\n Click and drag to crop a portion of the image. Hold Shift to persist aspect ratio.\n </div>\n );\n};\n\nconst tool: ImageEditorTool = {\n name: \"crop\",\n icon({ activateTool }) {\n return (\n <Tooltip placement={\"bottom\"} content={\"Crop\"}>\n <IconButton\n icon={<CropIcon />}\n onClick={() => activateTool(\"crop\")}\n data-testid={\"crop-item\"}\n />\n </Tooltip>\n );\n },\n renderForm,\n onActivate: ({ canvas, options }) => {\n cropper = new Cropper(canvas.current as HTMLCanvasElement, options);\n },\n cancel: () => cropper && cropper.destroy(),\n apply: ({ canvas }) => {\n return new Promise((resolve: any) => {\n if (!cropper) {\n resolve();\n return;\n }\n\n const current = canvas.current;\n const src = cropper.getCroppedCanvas().toDataURL();\n if (current) {\n const image = new window.Image();\n const ctx = current.getContext(\"2d\") as CanvasRenderingContext2D;\n image.onload = () => {\n ctx.drawImage(image, 0, 0);\n current.width = image.width;\n current.height = image.height;\n\n ctx.drawImage(image, 0, 0);\n resolve();\n };\n image.src = src;\n }\n\n cropper.destroy();\n cropper = undefined;\n });\n }\n};\n\nexport default tool;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","_interopRequireDefault","require","_filter","_Slider","_Button","_Tooltip","_debounce","_EMOTION_STRINGIFIED_CSS_ERROR__","Wrapper","_base","default","process","env","NODE_ENV","target","label","name","styles","map","toString","sliders","key","min","RenderForm","_React$Component","_this","_classCallCheck2","_len","arguments","length","args","Array","_key","_callSuper2","concat","_defineProperty2","processing","values","debounce","canvas","props","state","component","Caman","current","_this2","revert","Object","keys","forEach","render","setState","reduce","output","_inherits2","_createClass2","value","componentDidMount","resetFiltersValues","_this3","createElement","Slider","assign","max","disabled","onInput","_objectSpread2","applyFilters","style","textAlign","ButtonDefault","onClick","React","Component","tool","icon","_ref","activateTool","Tooltip","placement","content","IconButton","ReactComponent","renderForm","cancel","_ref2","_default","exports"],"sources":["filter.tsx"],"sourcesContent":["/**\n * When using Caman, we added @ts-expect-error because it does not exist in packages, but it is loaded in packages/ui/src/ImageEditor/ImageEditor.tsx:38.\n * TODO: use some other library to edit images\n */\nimport React from \"react\";\nimport { ReactComponent as FilterIcon } from \"./icons/filter.svg\";\nimport { Slider } from \"~/Slider\";\nimport { ImageEditorTool } from \"./types\";\nimport { IconButton, ButtonDefault } from \"~/Button\";\nimport { Tooltip } from \"~/Tooltip\";\nimport debounce from \"lodash/debounce\";\nimport styled from \"@emotion/styled\";\n\ninterface RenderFormState {\n values: Record<string, any>;\n processing: boolean;\n}\n\ninterface RenderFormProps {\n canvas: any;\n renderApplyCancel?: () => void;\n}\n\nconst Wrapper = styled(\"div\")({\n ul: {\n textAlign: \"center\",\n li: {\n display: \"inline-block\",\n width: 180,\n padding: 10\n }\n },\n \".buttons\": {\n textAlign: \"center\"\n }\n});\n\nconst sliders = [\n {\n key: \"brightness\",\n label: \"Brightness\",\n min: -100\n },\n {\n key: \"vibrance\",\n label: \"Vibrance\",\n min: -100\n },\n {\n key: \"hue\",\n label: \"Hue\",\n min: -100\n },\n {\n key: \"gamma\",\n label: \"Gamma\"\n },\n {\n key: \"clip\",\n label: \"Clip\"\n },\n {\n key: \"stackBlur\",\n label: \"Blur\"\n },\n {\n key: \"contrast\",\n label: \"Contrast\",\n min: -100\n },\n {\n key: \"saturation\",\n label: \"Saturation\",\n min: -100\n },\n {\n key: \"exposure\",\n label: \"Exposure\",\n min: -100\n },\n {\n key: \"sepia\",\n label: \"Sepia\"\n },\n {\n key: \"noise\",\n label: \"Noise\"\n },\n {\n key: \"sharpen\",\n label: \"Sharpen\"\n }\n];\n\nclass RenderForm extends React.Component<RenderFormProps, RenderFormState> {\n public override state: RenderFormState = {\n processing: false,\n values: {}\n };\n\n public override componentDidMount() {\n this.resetFiltersValues();\n }\n\n private readonly applyFilters = debounce(() => {\n const { canvas } = this.props;\n const { values } = this.state;\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const component = this;\n\n // @ts-expect-error\n Caman(canvas.current, function () {\n // @ts-expect-error\n this.revert(false);\n Object.keys(values).forEach(\n // @ts-expect-error\n key => values[key] !== 0 && this[key] && this[key](values[key])\n );\n // @ts-expect-error\n this.render();\n component.setState({ processing: false });\n });\n }, 200);\n\n private readonly resetFiltersValues = () => {\n this.setState(state => {\n sliders.reduce((output, current) => {\n state.values[current.key] = 0;\n return output;\n }, {});\n\n return state;\n });\n };\n\n public override render() {\n return (\n <Wrapper>\n <ul>\n {sliders.map(props => (\n <li key={props.key}>\n <Slider\n value={this.state.values[props.key]}\n min={0}\n max={100}\n disabled={this.state.processing}\n onInput={(value: string) => {\n this.setState(state => {\n const values = { ...state.values };\n values[props.key] = value;\n\n return { ...state, processing: true, values };\n }, this.applyFilters);\n }}\n {...props}\n />\n </li>\n ))}\n </ul>\n\n <div style={{ textAlign: \"center\" }}>\n <ButtonDefault\n onClick={() => {\n this.setState({ processing: true }, () => {\n this.resetFiltersValues();\n this.applyFilters();\n this.setState({ processing: false });\n });\n }}\n >\n Reset filters\n </ButtonDefault>\n </div>\n </Wrapper>\n );\n }\n}\n\nconst tool: ImageEditorTool = {\n name: \"filter\",\n icon({ activateTool }) {\n return (\n <Tooltip placement={\"bottom\"} content={\"Filter\"}>\n <IconButton\n icon={<FilterIcon />}\n onClick={() => activateTool(\"filter\")}\n data-testid={\"filter-item\"}\n />\n </Tooltip>\n );\n },\n renderForm(props) {\n return <RenderForm {...props} />;\n },\n cancel: ({ canvas }) => {\n // @ts-expect-error\n Caman(canvas.current, function () {\n // @ts-expect-error\n this.revert(false);\n // @ts-expect-error\n this.render();\n });\n }\n};\n\nexport default tool;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_react","_interopRequireDefault","require","_filter","_Slider","_Button","_Tooltip","_debounce","_EMOTION_STRINGIFIED_CSS_ERROR__","Wrapper","_base","default","process","env","NODE_ENV","target","label","name","styles","map","toString","sliders","key","min","RenderForm","_React$Component","_this","_classCallCheck2","_len","arguments","length","args","Array","_key","_callSuper2","concat","_defineProperty2","processing","values","debounce","canvas","props","state","component","Caman","current","_this2","revert","Object","keys","forEach","render","setState","reduce","output","_inherits2","_createClass2","value","componentDidMount","resetFiltersValues","_this3","createElement","Slider","assign","max","disabled","onInput","_objectSpread2","applyFilters","style","textAlign","ButtonDefault","onClick","React","Component","tool","icon","_ref","activateTool","Tooltip","placement","content","IconButton","ReactComponent","renderForm","cancel","_ref2","_default","exports"],"sources":["filter.tsx"],"sourcesContent":["/**\n * When using Caman, we added @ts-expect-error because it does not exist in packages, but it is loaded in packages/ui/src/ImageEditor/ImageEditor.tsx:38.\n * TODO: use some other library to edit images\n */\nimport React from \"react\";\nimport { ReactComponent as FilterIcon } from \"./icons/filter.svg\";\nimport { Slider } from \"~/Slider\";\nimport { ImageEditorTool } from \"./types\";\nimport { IconButton, ButtonDefault } from \"~/Button\";\nimport { Tooltip } from \"~/Tooltip\";\nimport debounce from \"lodash/debounce\";\nimport styled from \"@emotion/styled\";\n\ninterface RenderFormState {\n values: Record<string, any>;\n processing: boolean;\n}\n\ninterface RenderFormProps {\n canvas: any;\n renderApplyCancel?: () => void;\n}\n\nconst Wrapper = styled(\"div\")({\n ul: {\n textAlign: \"center\",\n li: {\n display: \"inline-block\",\n width: 180,\n padding: 10\n }\n },\n \".buttons\": {\n textAlign: \"center\"\n }\n});\n\nconst sliders = [\n {\n key: \"brightness\",\n label: \"Brightness\",\n min: -100\n },\n {\n key: \"vibrance\",\n label: \"Vibrance\",\n min: -100\n },\n {\n key: \"hue\",\n label: \"Hue\",\n min: -100\n },\n {\n key: \"gamma\",\n label: \"Gamma\"\n },\n {\n key: \"clip\",\n label: \"Clip\"\n },\n {\n key: \"stackBlur\",\n label: \"Blur\"\n },\n {\n key: \"contrast\",\n label: \"Contrast\",\n min: -100\n },\n {\n key: \"saturation\",\n label: \"Saturation\",\n min: -100\n },\n {\n key: \"exposure\",\n label: \"Exposure\",\n min: -100\n },\n {\n key: \"sepia\",\n label: \"Sepia\"\n },\n {\n key: \"noise\",\n label: \"Noise\"\n },\n {\n key: \"sharpen\",\n label: \"Sharpen\"\n }\n];\n\nclass RenderForm extends React.Component<RenderFormProps, RenderFormState> {\n public override state: RenderFormState = {\n processing: false,\n values: {}\n };\n\n public override componentDidMount() {\n this.resetFiltersValues();\n }\n\n private readonly applyFilters = debounce(() => {\n const { canvas } = this.props;\n const { values } = this.state;\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const component = this;\n\n // @ts-expect-error\n Caman(canvas.current, function () {\n // @ts-expect-error\n this.revert(false);\n Object.keys(values).forEach(\n // @ts-expect-error\n key => values[key] !== 0 && this[key] && this[key](values[key])\n );\n // @ts-expect-error\n this.render();\n component.setState({ processing: false });\n });\n }, 200);\n\n private readonly resetFiltersValues = () => {\n this.setState(state => {\n sliders.reduce((output, current) => {\n state.values[current.key] = 0;\n return output;\n }, {});\n\n return state;\n });\n };\n\n public override render() {\n return (\n <Wrapper>\n <ul>\n {sliders.map(props => (\n <li key={props.key}>\n <Slider\n value={this.state.values[props.key]}\n min={0}\n max={100}\n disabled={this.state.processing}\n onInput={(value: string) => {\n this.setState(state => {\n const values = { ...state.values };\n values[props.key] = value;\n\n return { ...state, processing: true, values };\n }, this.applyFilters);\n }}\n {...props}\n />\n </li>\n ))}\n </ul>\n\n <div style={{ textAlign: \"center\" }}>\n <ButtonDefault\n onClick={() => {\n this.setState({ processing: true }, () => {\n this.resetFiltersValues();\n this.applyFilters();\n this.setState({ processing: false });\n });\n }}\n >\n Reset filters\n </ButtonDefault>\n </div>\n </Wrapper>\n );\n }\n}\n\nconst tool: ImageEditorTool = {\n name: \"filter\",\n icon({ activateTool }) {\n return (\n <Tooltip placement={\"bottom\"} content={\"Filter\"}>\n <IconButton\n icon={<FilterIcon />}\n onClick={() => activateTool(\"filter\")}\n data-testid={\"filter-item\"}\n />\n </Tooltip>\n );\n },\n renderForm(props) {\n return <RenderForm {...props} />;\n },\n cancel: ({ canvas }) => {\n // @ts-expect-error\n Caman(canvas.current, function () {\n // @ts-expect-error\n this.revert(false);\n // @ts-expect-error\n this.render();\n });\n }\n};\n\nexport default tool;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","_interopRequireDefault","require","_flip","_cropperjs","_Button","_Tooltip","cropper","flipped","x","y","renderForm","default","createElement","style","textAlign","ButtonDefault","onClick","scaleX","scaleY","tool","name","icon","_ref","activateTool","Tooltip","placement","content","IconButton","ReactComponent","cancel","destroy","onActivate","_ref2","canvas","Cropper","current","background","modal","guides","dragMode","highlight","autoCrop","apply","_ref3","Promise","resolve","src","getCroppedCanvas","toDataURL","image","window","Image","ctx","getContext","onload","drawImage","width","height","_default","exports"],"sources":["flip.tsx"],"sourcesContent":["import React from \"react\";\nimport { ImageEditorTool } from \"./types\";\nimport { ReactComponent as FlipIcon } from \"./icons/flip.svg\";\nimport Cropper from \"cropperjs\";\nimport \"cropperjs/dist/cropper.css\";\n\nimport { IconButton, ButtonDefault } from \"../../Button\";\nimport { Tooltip } from \"~/Tooltip\";\n\nlet cropper: Cropper;\n\nconst flipped = { x: 1, y: 1 };\n\nconst renderForm = () => {\n return (\n <div style={{ textAlign: \"center\" }}>\n <ButtonDefault\n onClick={() => {\n if (!cropper) {\n return;\n }\n\n flipped.x = flipped.x === 1 ? -1 : 1;\n cropper.scaleX(flipped.x);\n }}\n >\n FlipX\n </ButtonDefault>\n <ButtonDefault\n onClick={() => {\n if (!cropper) {\n return;\n }\n\n flipped.y = flipped.y === 1 ? -1 : 1;\n cropper.scaleY(flipped.y);\n }}\n >\n FlipY\n </ButtonDefault>\n </div>\n );\n};\n\nconst tool: ImageEditorTool = {\n name: \"flip\",\n icon({ activateTool }) {\n return (\n <Tooltip placement={\"bottom\"} content={\"Flip\"}>\n <IconButton\n icon={<FlipIcon />}\n onClick={() => activateTool(\"flip\")}\n data-testid={\"flip-item\"}\n />\n </Tooltip>\n );\n },\n renderForm,\n cancel: () => cropper && cropper.destroy(),\n onActivate: ({ canvas }) => {\n cropper = new Cropper(canvas.current as HTMLCanvasElement, {\n background: false,\n modal: false,\n guides: false,\n dragMode: \"none\",\n highlight: false,\n autoCrop: false\n });\n },\n apply: ({ canvas }) => {\n return new Promise((resolve: any) => {\n if (!cropper) {\n resolve();\n return;\n }\n\n const current = canvas.current;\n const src = cropper.getCroppedCanvas().toDataURL();\n if (current) {\n const image = new window.Image();\n const ctx = current.getContext(\"2d\") as CanvasRenderingContext2D;\n image.onload = () => {\n ctx.drawImage(image, 0, 0);\n current.width = image.width;\n current.height = image.height;\n\n ctx.drawImage(image, 0, 0);\n resolve();\n };\n image.src = src;\n }\n\n cropper.destroy();\n });\n }\n};\n\nexport default tool;\n"],"mappings":";;;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AAEA,IAAAC,KAAA,GAAAD,OAAA;AACA,IAAAE,UAAA,GAAAH,sBAAA,CAAAC,OAAA;AACAA,OAAA;AAEA,IAAAG,OAAA,GAAAH,OAAA;AACA,IAAAI,QAAA,GAAAJ,OAAA;AAEA,IAAIK,OAAgB;AAEpB,IAAMC,OAAO,GAAG;EAAEC,CAAC,EAAE,CAAC;EAAEC,CAAC,EAAE;AAAE,CAAC;AAE9B,IAAMC,UAAU,GAAG,SAAbA,UAAUA,CAAA,EAAS;EACrB,oBACIX,MAAA,CAAAY,OAAA,CAAAC,aAAA;IAAKC,KAAK,EAAE;MAAEC,SAAS,EAAE;IAAS;EAAE,gBAChCf,MAAA,CAAAY,OAAA,CAAAC,aAAA,CAACR,OAAA,CAAAW,aAAa;IACVC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"names":["_react","_interopRequireDefault","require","_flip","_cropperjs","_Button","_Tooltip","cropper","flipped","x","y","renderForm","default","createElement","style","textAlign","ButtonDefault","onClick","scaleX","scaleY","tool","name","icon","_ref","activateTool","Tooltip","placement","content","IconButton","ReactComponent","cancel","destroy","onActivate","_ref2","canvas","Cropper","current","background","modal","guides","dragMode","highlight","autoCrop","apply","_ref3","Promise","resolve","src","getCroppedCanvas","toDataURL","image","window","Image","ctx","getContext","onload","drawImage","width","height","_default","exports"],"sources":["flip.tsx"],"sourcesContent":["import React from \"react\";\nimport { ImageEditorTool } from \"./types\";\nimport { ReactComponent as FlipIcon } from \"./icons/flip.svg\";\nimport Cropper from \"cropperjs\";\nimport \"cropperjs/dist/cropper.css\";\n\nimport { IconButton, ButtonDefault } from \"../../Button\";\nimport { Tooltip } from \"~/Tooltip\";\n\nlet cropper: Cropper;\n\nconst flipped = { x: 1, y: 1 };\n\nconst renderForm = () => {\n return (\n <div style={{ textAlign: \"center\" }}>\n <ButtonDefault\n onClick={() => {\n if (!cropper) {\n return;\n }\n\n flipped.x = flipped.x === 1 ? -1 : 1;\n cropper.scaleX(flipped.x);\n }}\n >\n FlipX\n </ButtonDefault>\n <ButtonDefault\n onClick={() => {\n if (!cropper) {\n return;\n }\n\n flipped.y = flipped.y === 1 ? -1 : 1;\n cropper.scaleY(flipped.y);\n }}\n >\n FlipY\n </ButtonDefault>\n </div>\n );\n};\n\nconst tool: ImageEditorTool = {\n name: \"flip\",\n icon({ activateTool }) {\n return (\n <Tooltip placement={\"bottom\"} content={\"Flip\"}>\n <IconButton\n icon={<FlipIcon />}\n onClick={() => activateTool(\"flip\")}\n data-testid={\"flip-item\"}\n />\n </Tooltip>\n );\n },\n renderForm,\n cancel: () => cropper && cropper.destroy(),\n onActivate: ({ canvas }) => {\n cropper = new Cropper(canvas.current as HTMLCanvasElement, {\n background: false,\n modal: false,\n guides: false,\n dragMode: \"none\",\n highlight: false,\n autoCrop: false\n });\n },\n apply: ({ canvas }) => {\n return new Promise((resolve: any) => {\n if (!cropper) {\n resolve();\n return;\n }\n\n const current = canvas.current;\n const src = cropper.getCroppedCanvas().toDataURL();\n if (current) {\n const image = new window.Image();\n const ctx = current.getContext(\"2d\") as CanvasRenderingContext2D;\n image.onload = () => {\n ctx.drawImage(image, 0, 0);\n current.width = image.width;\n current.height = image.height;\n\n ctx.drawImage(image, 0, 0);\n resolve();\n };\n image.src = src;\n }\n\n cropper.destroy();\n });\n }\n};\n\nexport default tool;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","_interopRequireDefault","require","_rotateRight","_Slider","_Tooltip","_Button","_cropperjs","cropper","RenderForm","_React$Component","_this","_classCallCheck2","default","_len","arguments","length","args","Array","_key","_callSuper2","concat","_defineProperty2","rangeInput","_inherits2","_createClass2","key","value","render","_this2","createElement","style","width","margin","Slider","label","state","min","max","step","discrete","displayMarkers","onInput","setState","rotateTo","parseInt","React","Component","tool","name","icon","_ref","activateTool","Tooltip","placement","content","IconButton","ReactComponent","onClick","renderForm","props","onActivate","_ref2","canvas","Cropper","current","background","modal","guides","dragMode","highlight","autoCrop","cancel","destroy","apply","_ref3","Promise","resolve","src","getCroppedCanvas","toDataURL","image","window","Image","ctx","getContext","onload","drawImage","height","_default","exports"],"sources":["rotate.tsx"],"sourcesContent":["import React from \"react\";\nimport { ReactComponent as RotateRight } from \"./icons/rotateRight.svg\";\nimport { ImageEditorTool } from \"./types\";\nimport { Slider } from \"../../Slider\";\nimport { Tooltip } from \"~/Tooltip\";\nimport { IconButton } from \"~/Button\";\n\nimport Cropper from \"cropperjs\";\nimport \"cropperjs/dist/cropper.css\";\n\nlet cropper: Cropper;\n\nclass RenderForm extends React.Component<any, any> {\n public override state = {\n rangeInput: 0\n };\n\n public override render() {\n return (\n <div style={{ width: \"500px\", margin: \"0 auto\" }}>\n <Slider\n label={\"Range Input\"}\n value={this.state.rangeInput}\n min={0}\n max={360}\n step={10}\n discrete={true}\n displayMarkers={true}\n onInput={(value: string) => {\n this.setState({ rangeInput: value }, async () => {\n if (cropper) {\n cropper.rotateTo(parseInt(value, 10));\n }\n });\n }}\n />\n </div>\n );\n }\n}\n\nconst tool: ImageEditorTool = {\n name: \"rotate\",\n icon({ activateTool }) {\n return (\n <Tooltip placement={\"bottom\"} content={\"Rotate\"}>\n <IconButton\n icon={<RotateRight />}\n onClick={() => activateTool(\"rotate\")}\n data-testid={\"rotate-item\"}\n />\n </Tooltip>\n );\n },\n renderForm(props) {\n return <RenderForm {...props} />;\n },\n onActivate: ({ canvas }) => {\n /**\n * We can safely cast canvas.current as HTMLCanvasElement\n */\n cropper = new Cropper(canvas.current as HTMLCanvasElement, {\n background: false,\n modal: false,\n guides: false,\n dragMode: \"none\",\n highlight: false,\n autoCrop: false\n });\n },\n cancel: () => cropper && cropper.destroy(),\n apply: ({ canvas }) => {\n return new Promise((resolve: any) => {\n if (!cropper) {\n resolve();\n return;\n }\n\n const current = canvas.current;\n const src = cropper.getCroppedCanvas().toDataURL();\n if (current) {\n const image = new window.Image();\n const ctx = current.getContext(\"2d\") as CanvasRenderingContext2D;\n image.onload = () => {\n ctx.drawImage(image, 0, 0);\n current.width = image.width;\n current.height = image.height;\n\n ctx.drawImage(image, 0, 0);\n };\n image.src = src;\n resolve();\n }\n\n cropper.destroy();\n });\n }\n};\n\nexport default tool;\n"],"mappings":";;;;;;;;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AAEA,IAAAE,OAAA,GAAAF,OAAA;AACA,IAAAG,QAAA,GAAAH,OAAA;AACA,IAAAI,OAAA,GAAAJ,OAAA;AAEA,IAAAK,UAAA,GAAAN,sBAAA,CAAAC,OAAA;AACAA,OAAA;AAEA,IAAIM,OAAgB;AAAC,IAEfC,UAAU,0BAAAC,gBAAA;EAAA,SAAAD,WAAA;IAAA,IAAAE,KAAA;IAAA,IAAAC,gBAAA,CAAAC,OAAA,QAAAJ,UAAA;IAAA,SAAAK,IAAA,GAAAC,SAAA,CAAAC,MAAA,EAAAC,IAAA,OAAAC,KAAA,CAAAJ,IAAA,GAAAK,IAAA,MAAAA,IAAA,GAAAL,IAAA,EAAAK,IAAA;MAAAF,IAAA,CAAAE,IAAA,IAAAJ,SAAA,CAAAI,IAAA;IAAA;IAAAR,KAAA,OAAAS,WAAA,CAAAP,OAAA,QAAAJ,UAAA,KAAAY,MAAA,CAAAJ,IAAA;IAAA,IAAAK,gBAAA,CAAAT,OAAA,EAAAF,KAAA,WACY;MACpBY,UAAU,EAAE;IAChB,CAAC;IAAA,OAAAZ,KAAA;EAAA;EAAA,IAAAa,UAAA,CAAAX,OAAA,EAAAJ,UAAA,EAAAC,gBAAA;EAAA,WAAAe,aAAA,CAAAZ,OAAA,EAAAJ,UAAA;IAAAiB,GAAA;IAAAC,KAAA,EAED,
|
|
1
|
+
{"version":3,"names":["_react","_interopRequireDefault","require","_rotateRight","_Slider","_Tooltip","_Button","_cropperjs","cropper","RenderForm","_React$Component","_this","_classCallCheck2","default","_len","arguments","length","args","Array","_key","_callSuper2","concat","_defineProperty2","rangeInput","_inherits2","_createClass2","key","value","render","_this2","createElement","style","width","margin","Slider","label","state","min","max","step","discrete","displayMarkers","onInput","setState","rotateTo","parseInt","React","Component","tool","name","icon","_ref","activateTool","Tooltip","placement","content","IconButton","ReactComponent","onClick","renderForm","props","onActivate","_ref2","canvas","Cropper","current","background","modal","guides","dragMode","highlight","autoCrop","cancel","destroy","apply","_ref3","Promise","resolve","src","getCroppedCanvas","toDataURL","image","window","Image","ctx","getContext","onload","drawImage","height","_default","exports"],"sources":["rotate.tsx"],"sourcesContent":["import React from \"react\";\nimport { ReactComponent as RotateRight } from \"./icons/rotateRight.svg\";\nimport { ImageEditorTool } from \"./types\";\nimport { Slider } from \"../../Slider\";\nimport { Tooltip } from \"~/Tooltip\";\nimport { IconButton } from \"~/Button\";\n\nimport Cropper from \"cropperjs\";\nimport \"cropperjs/dist/cropper.css\";\n\nlet cropper: Cropper;\n\nclass RenderForm extends React.Component<any, any> {\n public override state = {\n rangeInput: 0\n };\n\n public override render() {\n return (\n <div style={{ width: \"500px\", margin: \"0 auto\" }}>\n <Slider\n label={\"Range Input\"}\n value={this.state.rangeInput}\n min={0}\n max={360}\n step={10}\n discrete={true}\n displayMarkers={true}\n onInput={(value: string) => {\n this.setState({ rangeInput: value }, async () => {\n if (cropper) {\n cropper.rotateTo(parseInt(value, 10));\n }\n });\n }}\n />\n </div>\n );\n }\n}\n\nconst tool: ImageEditorTool = {\n name: \"rotate\",\n icon({ activateTool }) {\n return (\n <Tooltip placement={\"bottom\"} content={\"Rotate\"}>\n <IconButton\n icon={<RotateRight />}\n onClick={() => activateTool(\"rotate\")}\n data-testid={\"rotate-item\"}\n />\n </Tooltip>\n );\n },\n renderForm(props) {\n return <RenderForm {...props} />;\n },\n onActivate: ({ canvas }) => {\n /**\n * We can safely cast canvas.current as HTMLCanvasElement\n */\n cropper = new Cropper(canvas.current as HTMLCanvasElement, {\n background: false,\n modal: false,\n guides: false,\n dragMode: \"none\",\n highlight: false,\n autoCrop: false\n });\n },\n cancel: () => cropper && cropper.destroy(),\n apply: ({ canvas }) => {\n return new Promise((resolve: any) => {\n if (!cropper) {\n resolve();\n return;\n }\n\n const current = canvas.current;\n const src = cropper.getCroppedCanvas().toDataURL();\n if (current) {\n const image = new window.Image();\n const ctx = current.getContext(\"2d\") as CanvasRenderingContext2D;\n image.onload = () => {\n ctx.drawImage(image, 0, 0);\n current.width = image.width;\n current.height = image.height;\n\n ctx.drawImage(image, 0, 0);\n };\n image.src = src;\n resolve();\n }\n\n cropper.destroy();\n });\n }\n};\n\nexport default tool;\n"],"mappings":";;;;;;;;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AAEA,IAAAE,OAAA,GAAAF,OAAA;AACA,IAAAG,QAAA,GAAAH,OAAA;AACA,IAAAI,OAAA,GAAAJ,OAAA;AAEA,IAAAK,UAAA,GAAAN,sBAAA,CAAAC,OAAA;AACAA,OAAA;AAEA,IAAIM,OAAgB;AAAC,IAEfC,UAAU,0BAAAC,gBAAA;EAAA,SAAAD,WAAA;IAAA,IAAAE,KAAA;IAAA,IAAAC,gBAAA,CAAAC,OAAA,QAAAJ,UAAA;IAAA,SAAAK,IAAA,GAAAC,SAAA,CAAAC,MAAA,EAAAC,IAAA,OAAAC,KAAA,CAAAJ,IAAA,GAAAK,IAAA,MAAAA,IAAA,GAAAL,IAAA,EAAAK,IAAA;MAAAF,IAAA,CAAAE,IAAA,IAAAJ,SAAA,CAAAI,IAAA;IAAA;IAAAR,KAAA,OAAAS,WAAA,CAAAP,OAAA,QAAAJ,UAAA,KAAAY,MAAA,CAAAJ,IAAA;IAAA,IAAAK,gBAAA,CAAAT,OAAA,EAAAF,KAAA,WACY;MACpBY,UAAU,EAAE;IAChB,CAAC;IAAA,OAAAZ,KAAA;EAAA;EAAA,IAAAa,UAAA,CAAAX,OAAA,EAAAJ,UAAA,EAAAC,gBAAA;EAAA,WAAAe,aAAA,CAAAZ,OAAA,EAAAJ,UAAA;IAAAiB,GAAA;IAAAC,KAAA,EAED,SAAgBC,MAAMA,CAAA,EAAG;MAAA,IAAAC,MAAA;MACrB,oBACI7B,MAAA,CAAAa,OAAA,CAAAiB,aAAA;QAAKC,KAAK,EAAE;UAAEC,KAAK,EAAE,OAAO;UAAEC,MAAM,EAAE;QAAS;MAAE,gBAC7CjC,MAAA,CAAAa,OAAA,CAAAiB,aAAA,CAAC1B,OAAA,CAAA8B,MAAM;QACHC,KAAK,EAAE,aAAc;QACrBR,KAAK,EAAE,IAAI,CAACS,KAAK,CAACb,UAAW;QAC7Bc,GAAG,EAAE,CAAE;QACPC,GAAG,EAAE,GAAI;QACTC,IAAI,EAAE,EAAG;QACTC,QAAQ,EAAE,IAAK;QACfC,cAAc,EAAE,IAAK;QACrBC,OAAO,EAAE,SAATA,OAAOA,CAAGf,KAAa,EAAK;UACxBE,MAAI,CAACc,QAAQ,CAAC;YAAEpB,UAAU,EAAEI;UAAM,CAAC,EAAE,kBAAY;YAC7C,IAAInB,OAAO,EAAE;cACTA,OAAO,CAACoC,QAAQ,CAACC,QAAQ,CAAClB,KAAK,EAAE,EAAE,CAAC,CAAC;YACzC;UACJ,CAAC,CAAC;QACN;MAAE,CACL,CACA,CAAC;IAEd;EAAC;AAAA,EA1BoBmB,cAAK,CAACC,SAAS;AA6BxC,IAAMC,IAAqB,GAAG;EAC1BC,IAAI,EAAE,QAAQ;EACdC,IAAI,WAAJA,IAAIA,CAAAC,IAAA,EAAmB;IAAA,IAAhBC,YAAY,GAAAD,IAAA,CAAZC,YAAY;IACf,oBACIpD,MAAA,CAAAa,OAAA,CAAAiB,aAAA,CAACzB,QAAA,CAAAgD,OAAO;MAACC,SAAS,EAAE,QAAS;MAACC,OAAO,EAAE;IAAS,gBAC5CvD,MAAA,CAAAa,OAAA,CAAAiB,aAAA,CAACxB,OAAA,CAAAkD,UAAU;MACPN,IAAI,eAAElD,MAAA,CAAAa,OAAA,CAAAiB,aAAA,CAAC3B,YAAA,CAAAsD,cAAW,MAAE,CAAE;MACtBC,OAAO,EAAE,SAATA,OAAOA,CAAA;QAAA,OAAQN,YAAY,CAAC,QAAQ,CAAC;MAAA,CAAC;MACtC,eAAa;IAAc,CAC9B,CACI,CAAC;EAElB,CAAC;EACDO,UAAU,WAAVA,UAAUA,CAACC,KAAK,EAAE;IACd,oBAAO5D,MAAA,CAAAa,OAAA,CAAAiB,aAAA,CAACrB,UAAU,EAAKmD,KAAQ,CAAC;EACpC,CAAC;EACDC,UAAU,EAAE,SAAZA,UAAUA,CAAAC,KAAA,EAAkB;IAAA,IAAbC,MAAM,GAAAD,KAAA,CAANC,MAAM;IACjB;AACR;AACA;IACQvD,OAAO,GAAG,IAAIwD,kBAAO,CAACD,MAAM,CAACE,OAAO,EAAuB;MACvDC,UAAU,EAAE,KAAK;MACjBC,KAAK,EAAE,KAAK;MACZC,MAAM,EAAE,KAAK;MACbC,QAAQ,EAAE,MAAM;MAChBC,SAAS,EAAE,KAAK;MAChBC,QAAQ,EAAE;IACd,CAAC,CAAC;EACN,CAAC;EACDC,MAAM,EAAE,SAARA,MAAMA,CAAA;IAAA,OAAQhE,OAAO,IAAIA,OAAO,CAACiE,OAAO,CAAC,CAAC;EAAA;EAC1CC,KAAK,EAAE,SAAPA,KAAKA,CAAAC,KAAA,EAAkB;IAAA,IAAbZ,MAAM,GAAAY,KAAA,CAANZ,MAAM;IACZ,OAAO,IAAIa,OAAO,CAAC,UAACC,OAAY,EAAK;MACjC,IAAI,CAACrE,OAAO,EAAE;QACVqE,OAAO,CAAC,CAAC;QACT;MACJ;MAEA,IAAMZ,OAAO,GAAGF,MAAM,CAACE,OAAO;MAC9B,IAAMa,GAAG,GAAGtE,OAAO,CAACuE,gBAAgB,CAAC,CAAC,CAACC,SAAS,CAAC,CAAC;MAClD,IAAIf,OAAO,EAAE;QACT,IAAMgB,KAAK,GAAG,IAAIC,MAAM,CAACC,KAAK,CAAC,CAAC;QAChC,IAAMC,GAAG,GAAGnB,OAAO,CAACoB,UAAU,CAAC,IAAI,CAA6B;QAChEJ,KAAK,CAACK,MAAM,GAAG,YAAM;UACjBF,GAAG,CAACG,SAAS,CAACN,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;UAC1BhB,OAAO,CAACjC,KAAK,GAAGiD,KAAK,CAACjD,KAAK;UAC3BiC,OAAO,CAACuB,MAAM,GAAGP,KAAK,CAACO,MAAM;UAE7BJ,GAAG,CAACG,SAAS,CAACN,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;QAC9B,CAAC;QACDA,KAAK,CAACH,GAAG,GAAGA,GAAG;QACfD,OAAO,CAAC,CAAC;MACb;MAEArE,OAAO,CAACiE,OAAO,CAAC,CAAC;IACrB,CAAC,CAAC;EACN;AACJ,CAAC;AAAC,IAAAgB,QAAA,GAAAC,OAAA,CAAA7E,OAAA,GAEamC,IAAI","ignoreList":[]}
|
package/ImageUpload/Image.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","_interopRequireDefault","require","_classnames","_roundAdd_photo_alternate24px","_roundClose24px","_roundEdit24px","_Typography","_Progress","_styled","Image","_React$Component","_classCallCheck2","default","_callSuper2","arguments","_inherits2","_createClass2","key","value","renderBlank","_this$props","props","uploadImage","round","ImageWrapper","AddImageWrapperRound","AddImageWrapper","createElement","onClick","AddImageIconWrapper","ReactComponent","Typography","use","placeholder","renderImg","_this$props2","removeImage","editImage","renderImagePreview","imagePreviewProps","src","style","width","height","imagePreview","ImagePreviewWrapper","RemoveImage","EditImage","render","_this$props3","disabled","containerStyle","className","classNames","loading","CircularProgress","React","Component","_defineProperty2","_default","exports"],"sources":["Image.tsx"],"sourcesContent":["import React from \"react\";\nimport classNames from \"classnames\";\nimport { ReactComponent as AddImageIcon } from \"./icons/round-add_photo_alternate-24px.svg\";\nimport { ReactComponent as RemoveImageIcon } from \"./icons/round-close-24px.svg\";\nimport { ReactComponent as EditImageIcon } from \"./icons/round-edit-24px.svg\";\nimport { Typography } from \"../Typography\";\nimport { CircularProgress } from \"../Progress\";\nimport {\n AddImageIconWrapper,\n AddImageWrapper,\n AddImageWrapperRound,\n EditImage,\n ImagePreviewWrapper,\n RemoveImage\n} from \"./styled\";\nimport { BrowseFilesParams } from \"react-butterfiles\";\n\ninterface ImageProps {\n uploadImage: () => void;\n removeImage?: (value: string | null) => void;\n editImage?: (value: BrowseFilesParams | undefined) => void;\n value?: any;\n disabled?: boolean;\n loading?: boolean;\n placeholder: string;\n style?: React.CSSProperties;\n renderImagePreview?: (props: any) => React.ReactElement<any>;\n round?: boolean;\n containerStyle?: React.CSSProperties;\n}\n\nclass Image extends React.Component<ImageProps> {\n static defaultProps = {\n placeholder: \"Select an image\",\n containerStyle: { height: \"100%\" }\n };\n\n renderBlank() {\n const { uploadImage, round } = this.props;\n\n const ImageWrapper = round ? AddImageWrapperRound : AddImageWrapper;\n\n return (\n <ImageWrapper\n data-role={\"select-image\"}\n onClick={() => {\n uploadImage();\n }}\n >\n <AddImageIconWrapper>\n <AddImageIcon />\n <Typography use={\"caption\"}>{this.props.placeholder}</Typography>\n </AddImageIconWrapper>\n </ImageWrapper>\n );\n }\n\n renderImg() {\n const { removeImage, editImage, uploadImage, value, renderImagePreview } = this.props;\n\n const imagePreviewProps: any = {\n src: value ? value.src : null,\n style: this.props.style ? this.props.style : null,\n onClick: () => uploadImage()\n };\n\n if (!imagePreviewProps.style) {\n imagePreviewProps.style = {};\n }\n\n if (!imagePreviewProps.style.width && !imagePreviewProps.style.height) {\n imagePreviewProps.style.width = \"100%\";\n imagePreviewProps.style.height = \"100%\";\n }\n\n let imagePreview = null;\n if (typeof renderImagePreview === \"function\") {\n imagePreview = renderImagePreview(imagePreviewProps);\n } else {\n imagePreview = <img {...imagePreviewProps} />;\n }\n\n return (\n <ImagePreviewWrapper data-testid={\"image-preview\"}>\n {imagePreview}\n\n {typeof removeImage === \"function\" && (\n <RemoveImage onClick={() => removeImage(null)} data-testid={\"remove-image\"}>\n <RemoveImageIcon />\n </RemoveImage>\n )}\n\n {typeof editImage === \"function\" && (\n <EditImage onClick={() => editImage(value)}>\n <EditImageIcon />\n </EditImage>\n )}\n\n <AddImageWrapper\n data-role={\"select-image\"}\n onClick={() => {\n uploadImage();\n }}\n >\n <AddImageIconWrapper>\n <AddImageIcon />\n <Typography use={\"caption\"}>{this.props.placeholder}</Typography>\n </AddImageIconWrapper>\n </AddImageWrapper>\n </ImagePreviewWrapper>\n );\n }\n\n public override render() {\n const { value, disabled, containerStyle } = this.props;\n return (\n <div className={classNames({ disabled })} style={containerStyle}>\n {this.props.loading && <CircularProgress />}\n {value && value.src ? this.renderImg() : this.renderBlank()}\n </div>\n );\n }\n}\n\nexport default Image;\n"],"mappings":";;;;;;;;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,WAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,6BAAA,GAAAF,OAAA;AACA,IAAAG,eAAA,GAAAH,OAAA;AACA,IAAAI,cAAA,GAAAJ,OAAA;AACA,IAAAK,WAAA,GAAAL,OAAA;AACA,IAAAM,SAAA,GAAAN,OAAA;AACA,IAAAO,OAAA,GAAAP,OAAA;AAOkB,IAiBZQ,KAAK,0BAAAC,gBAAA;EAAA,SAAAD,MAAA;IAAA,IAAAE,gBAAA,CAAAC,OAAA,QAAAH,KAAA;IAAA,WAAAI,WAAA,CAAAD,OAAA,QAAAH,KAAA,EAAAK,SAAA;EAAA;EAAA,IAAAC,UAAA,CAAAH,OAAA,EAAAH,KAAA,EAAAC,gBAAA;EAAA,WAAAM,aAAA,CAAAJ,OAAA,EAAAH,KAAA;IAAAQ,GAAA;IAAAC,KAAA,EAMP,SAAAC,
|
|
1
|
+
{"version":3,"names":["_react","_interopRequireDefault","require","_classnames","_roundAdd_photo_alternate24px","_roundClose24px","_roundEdit24px","_Typography","_Progress","_styled","Image","_React$Component","_classCallCheck2","default","_callSuper2","arguments","_inherits2","_createClass2","key","value","renderBlank","_this$props","props","uploadImage","round","ImageWrapper","AddImageWrapperRound","AddImageWrapper","createElement","onClick","AddImageIconWrapper","ReactComponent","Typography","use","placeholder","renderImg","_this$props2","removeImage","editImage","renderImagePreview","imagePreviewProps","src","style","width","height","imagePreview","ImagePreviewWrapper","RemoveImage","EditImage","render","_this$props3","disabled","containerStyle","className","classNames","loading","CircularProgress","React","Component","_defineProperty2","_default","exports"],"sources":["Image.tsx"],"sourcesContent":["import React from \"react\";\nimport classNames from \"classnames\";\nimport { ReactComponent as AddImageIcon } from \"./icons/round-add_photo_alternate-24px.svg\";\nimport { ReactComponent as RemoveImageIcon } from \"./icons/round-close-24px.svg\";\nimport { ReactComponent as EditImageIcon } from \"./icons/round-edit-24px.svg\";\nimport { Typography } from \"../Typography\";\nimport { CircularProgress } from \"../Progress\";\nimport {\n AddImageIconWrapper,\n AddImageWrapper,\n AddImageWrapperRound,\n EditImage,\n ImagePreviewWrapper,\n RemoveImage\n} from \"./styled\";\nimport { BrowseFilesParams } from \"react-butterfiles\";\n\ninterface ImageProps {\n uploadImage: () => void;\n removeImage?: (value: string | null) => void;\n editImage?: (value: BrowseFilesParams | undefined) => void;\n value?: any;\n disabled?: boolean;\n loading?: boolean;\n placeholder: string;\n style?: React.CSSProperties;\n renderImagePreview?: (props: any) => React.ReactElement<any>;\n round?: boolean;\n containerStyle?: React.CSSProperties;\n}\n\nclass Image extends React.Component<ImageProps> {\n static defaultProps = {\n placeholder: \"Select an image\",\n containerStyle: { height: \"100%\" }\n };\n\n renderBlank() {\n const { uploadImage, round } = this.props;\n\n const ImageWrapper = round ? AddImageWrapperRound : AddImageWrapper;\n\n return (\n <ImageWrapper\n data-role={\"select-image\"}\n onClick={() => {\n uploadImage();\n }}\n >\n <AddImageIconWrapper>\n <AddImageIcon />\n <Typography use={\"caption\"}>{this.props.placeholder}</Typography>\n </AddImageIconWrapper>\n </ImageWrapper>\n );\n }\n\n renderImg() {\n const { removeImage, editImage, uploadImage, value, renderImagePreview } = this.props;\n\n const imagePreviewProps: any = {\n src: value ? value.src : null,\n style: this.props.style ? this.props.style : null,\n onClick: () => uploadImage()\n };\n\n if (!imagePreviewProps.style) {\n imagePreviewProps.style = {};\n }\n\n if (!imagePreviewProps.style.width && !imagePreviewProps.style.height) {\n imagePreviewProps.style.width = \"100%\";\n imagePreviewProps.style.height = \"100%\";\n }\n\n let imagePreview = null;\n if (typeof renderImagePreview === \"function\") {\n imagePreview = renderImagePreview(imagePreviewProps);\n } else {\n imagePreview = <img {...imagePreviewProps} />;\n }\n\n return (\n <ImagePreviewWrapper data-testid={\"image-preview\"}>\n {imagePreview}\n\n {typeof removeImage === \"function\" && (\n <RemoveImage onClick={() => removeImage(null)} data-testid={\"remove-image\"}>\n <RemoveImageIcon />\n </RemoveImage>\n )}\n\n {typeof editImage === \"function\" && (\n <EditImage onClick={() => editImage(value)}>\n <EditImageIcon />\n </EditImage>\n )}\n\n <AddImageWrapper\n data-role={\"select-image\"}\n onClick={() => {\n uploadImage();\n }}\n >\n <AddImageIconWrapper>\n <AddImageIcon />\n <Typography use={\"caption\"}>{this.props.placeholder}</Typography>\n </AddImageIconWrapper>\n </AddImageWrapper>\n </ImagePreviewWrapper>\n );\n }\n\n public override render() {\n const { value, disabled, containerStyle } = this.props;\n return (\n <div className={classNames({ disabled })} style={containerStyle}>\n {this.props.loading && <CircularProgress />}\n {value && value.src ? this.renderImg() : this.renderBlank()}\n </div>\n );\n }\n}\n\nexport default Image;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","_interopRequireDefault","require","_reactButterfiles","_emotion","_classnames","_FormElementMessage","_Image","_ImageEditorDialog","imagesStyle","css","opacity","pointerEvents","listStyle","li","verticalAlign","margin","display","width","height","border","cursor","textAlign","MultiImageUpload","exports","_React$Component","_this","_classCallCheck2","default","_len","arguments","length","args","Array","_key","_callSuper2","concat","_defineProperty2","errors","undefined","selectedImages","loading","imageEditor","open","image","index","value","_this$props","props","onChange","validate","images","selectedIndex","setState","i","_objectSpread2","newValue","isArray","_toConsumableArray2","convertedImages","push","src","base64","name","size","type","splice","apply","_this$props2","indexOf","_inherits2","_createClass2","key","render","_this2","_this$props3","validation","label","description","disabled","accept","maxSize","className","imageEditorImageSrc","state","console","warn","log","_ref","validationIsValid","isValid","validationMessage","message","createElement","classNames","ImageEditorDialog","options","onClose","onAccept","setTimeout","imageEditorImageIndex","multiple","convertToBase64","onSuccess","files","handleSelectedImages","onError","handleErrors","_ref2","browseFiles","getDropZoneProps","map","file","removeImage","editImage","uploadImage","FormElementMessage","error","errorType","errorMessages","errorFileName","React","Component","maxSizeExceeded","unsupportedFileType"],"sources":["MultiImageUpload.tsx"],"sourcesContent":["import React from \"react\";\nimport BrowseFiles, { SelectedFile, FileError } from \"react-butterfiles\";\nimport { css } from \"emotion\";\nimport classNames from \"classnames\";\nimport { FormElementMessage } from \"../FormElementMessage\";\nimport Image from \"./Image\";\nimport { ImageEditorDialog } from \"./ImageEditorDialog\";\nimport { FormComponentProps } from \"../types\";\n\nconst imagesStyle = css({\n \".disabled\": {\n opacity: 0.75,\n pointerEvents: \"none\"\n },\n \"ul.images\": {\n listStyle: \"none\",\n li: {\n verticalAlign: \"top\",\n margin: 2,\n display: \"inline-block\",\n width: 150,\n height: 150,\n \"&:last-child\": {\n border: \"1px solid lightgray\",\n cursor: \"pointer\",\n textAlign: \"center\"\n }\n }\n }\n});\n\n// Do not apply editping for following image types.\n// const noImageEditorTypes = [\"image/svg+xml\", \"image/gif\"];\n\ninterface MultiImageUploadProps extends FormComponentProps {\n // Component label.\n label?: string;\n\n // Is component disabled?\n disabled?: boolean;\n\n // Description beneath the image.\n description?: string;\n\n // A className for the root element.\n className?: string;\n\n // Define a list of accepted image types.\n accept?: string[];\n\n // Define file's max allowed size (default is \"5mb\").\n // Uses \"bytes\" (https://www.npmjs.com/package/bytes) library to convert string notation to actual number.\n maxSize: string;\n\n // Image editor options.\n // Please check the docs of ImageEditor component for the list of all available options.\n imageEditor?: {\n [key: string]: any;\n };\n\n // Use these to customize error messages (eg. if i18n supported is needed).\n errorMessages: {\n maxSizeExceeded: string;\n unsupportedFileType: string;\n default: string;\n };\n\n // Cropper options\n cropper?: { [key: string]: any };\n}\n\ninterface State {\n errors?: FileError[];\n selectedImages: Record<string, any>;\n loading: boolean;\n imageEditor: {\n image: SelectedFile | null;\n open: boolean;\n index?: number;\n };\n}\n\nclass MultiImageUpload extends React.Component<MultiImageUploadProps, State> {\n static defaultProps: Partial<MultiImageUploadProps> = {\n accept: [\"image/jpeg\", \"image/png\", \"image/gif\", \"image/svg+xml\"],\n maxSize: \"5mb\",\n imageEditor: {},\n errorMessages: {\n maxSizeExceeded: \"Max size exceeded.\",\n unsupportedFileType: \"Unsupported file type.\",\n default: \"An error occurred.\"\n }\n };\n\n public override state: State = {\n errors: undefined,\n selectedImages: {},\n loading: false,\n imageEditor: {\n open: false,\n image: null,\n index: undefined\n }\n };\n\n onChange = async (value: any) => {\n const { onChange, validate } = this.props;\n onChange && (await onChange(value));\n validate && (await validate());\n };\n\n handleSelectedImages = async (images: Array<SelectedFile>, selectedIndex = 0) => {\n this.setState(\n {\n errors: undefined,\n loading: true\n },\n async () => {\n const selectedImages: Record<number, any> = {};\n for (let i = 0; i < images.length; i++) {\n const image = images[i];\n selectedImages[selectedIndex + i] = { ...image };\n }\n\n this.setState({ selectedImages }, async () => {\n const newValue = Array.isArray(this.props.value) ? [...this.props.value] : [];\n\n const convertedImages = [];\n for (let i = 0; i < images.length; i++) {\n const image = images[i];\n convertedImages.push({\n src: image.src.base64,\n name: image.name,\n size: image.size,\n type: image.type\n });\n }\n\n newValue.splice(selectedIndex, 0, ...convertedImages);\n await this.onChange(newValue);\n this.setState({ loading: false });\n });\n }\n );\n };\n\n handleErrors = (errors: Array<FileError>) => {\n this.setState({ errors });\n };\n\n removeImage = (image: SelectedFile) => {\n const { value, onChange } = this.props;\n if (!onChange) {\n return;\n }\n\n const images = Array.isArray(value) ? [...value] : [];\n images.splice(images.indexOf(image), 1);\n onChange(images);\n };\n\n public override render() {\n const {\n value,\n validation,\n label,\n description,\n disabled,\n imageEditor,\n accept,\n maxSize,\n className\n } = this.props;\n /**\n * TODO: figure out the correct type\n */\n let imageEditorImageSrc = \"\";\n if (this.state.imageEditor.image) {\n // @ts-expect-error\n imageEditorImageSrc = this.state.imageEditor.image.src;\n console.warn(\"Figure out correct type if this.state.imageEditor.image.src\");\n console.log(this.state.imageEditor.image.src);\n }\n\n const { isValid: validationIsValid, message: validationMessage } = validation || {};\n /**\n * accept can safely be cast because we have default value\n */\n return (\n <div className={classNames(imagesStyle, className)}>\n {label && (\n <div className=\"mdc-floating-label mdc-floating-label--float-above\">\n {label}\n </div>\n )}\n\n <ImageEditorDialog\n options={imageEditor}\n open={this.state.imageEditor.open}\n src={imageEditorImageSrc}\n onClose={() => {\n this.setState(state => {\n state.imageEditor.open = false;\n return state;\n });\n }}\n onAccept={src => {\n // We wrapped everything into setTimeout - prevents dialog freeze when larger image is selected.\n setTimeout(() => {\n this.setState({ loading: true }, async () => {\n const newValue = Array.isArray(this.props.value)\n ? [...this.props.value]\n : [];\n\n const imageEditorImageIndex = this.state.imageEditor\n .index as number;\n newValue[imageEditorImageIndex].src = src;\n\n await this.onChange(newValue);\n this.setState({\n loading: false,\n imageEditor: {\n image: null,\n open: false,\n index: undefined\n }\n });\n });\n });\n }}\n />\n\n <BrowseFiles\n accept={accept as string[]}\n maxSize={maxSize}\n multiple\n convertToBase64\n onSuccess={files => {\n this.handleSelectedImages(files, Array.isArray(value) ? value.length : 0);\n }}\n onError={errors => this.handleErrors(errors)}\n >\n {({ browseFiles, getDropZoneProps }) => {\n const images = Array.isArray(value) ? [...value] : [];\n\n return (\n <div {...getDropZoneProps({ className: classNames({ disabled }) })}>\n <ul className=\"images\">\n {images.map((image, index) => (\n <li key={index}>\n <Image\n loading={\n this.state.selectedImages[index] &&\n this.state.loading\n }\n value={image.file || image}\n removeImage={() =>\n this.removeImage(image.file || image)\n }\n editImage={\n this.state.selectedImages[index] &&\n (() => {\n this.setState({\n imageEditor: {\n index,\n open: true,\n image: this.state.selectedImages[\n index\n ]\n }\n });\n })\n }\n uploadImage={() => {\n browseFiles({\n onSuccess: files => {\n this.handleSelectedImages(\n files,\n index + 1\n );\n },\n onError: errors => this.handleErrors(errors)\n });\n }}\n />\n </li>\n ))}\n <li>\n <Image\n disabled={this.state.loading}\n uploadImage={() => {\n browseFiles({\n onSuccess: files => {\n this.handleSelectedImages(\n files,\n Array.isArray(value) ? value.length : 0\n );\n },\n onError: errors => this.handleErrors(errors)\n });\n }}\n />\n </li>\n </ul>\n </div>\n );\n }}\n </BrowseFiles>\n\n {validationIsValid === false && (\n <FormElementMessage error>{validationMessage}</FormElementMessage>\n )}\n\n {validationIsValid !== false && description && (\n <FormElementMessage>{description}</FormElementMessage>\n )}\n\n {Array.isArray(this.state.errors) && (\n <FormElementMessage error>\n Your selection of images failed because of the following images:\n <ul>\n {this.state.errors.map((error: FileError, index) => {\n /**\n * We need to cast as existing keys in errorMessages, otherwise TS throws an error\n */\n const errorType = error.type as\n | \"maxSizeExceeded\"\n | \"unsupportedFileType\"\n | \"default\";\n const message = this.props.errorMessages[errorType];\n\n const errorFileName = error.file ? error.file.name : \"\";\n\n return (\n <li key={errorFileName + index}>\n {index + 1}. <strong>{errorFileName}</strong> - \n {message || this.props.errorMessages.default}\n </li>\n );\n })}\n </ul>\n </FormElementMessage>\n )}\n </div>\n );\n }\n}\n\nexport { MultiImageUpload };\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_react","_interopRequireDefault","require","_reactButterfiles","_emotion","_classnames","_FormElementMessage","_Image","_ImageEditorDialog","imagesStyle","css","opacity","pointerEvents","listStyle","li","verticalAlign","margin","display","width","height","border","cursor","textAlign","MultiImageUpload","exports","_React$Component","_this","_classCallCheck2","default","_len","arguments","length","args","Array","_key","_callSuper2","concat","_defineProperty2","errors","undefined","selectedImages","loading","imageEditor","open","image","index","value","_this$props","props","onChange","validate","images","selectedIndex","setState","i","_objectSpread2","newValue","isArray","_toConsumableArray2","convertedImages","push","src","base64","name","size","type","splice","apply","_this$props2","indexOf","_inherits2","_createClass2","key","render","_this2","_this$props3","validation","label","description","disabled","accept","maxSize","className","imageEditorImageSrc","state","console","warn","log","_ref","validationIsValid","isValid","validationMessage","message","createElement","classNames","ImageEditorDialog","options","onClose","onAccept","setTimeout","imageEditorImageIndex","multiple","convertToBase64","onSuccess","files","handleSelectedImages","onError","handleErrors","_ref2","browseFiles","getDropZoneProps","map","file","removeImage","editImage","uploadImage","FormElementMessage","error","errorType","errorMessages","errorFileName","React","Component","maxSizeExceeded","unsupportedFileType"],"sources":["MultiImageUpload.tsx"],"sourcesContent":["import React from \"react\";\nimport BrowseFiles, { SelectedFile, FileError } from \"react-butterfiles\";\nimport { css } from \"emotion\";\nimport classNames from \"classnames\";\nimport { FormElementMessage } from \"../FormElementMessage\";\nimport Image from \"./Image\";\nimport { ImageEditorDialog } from \"./ImageEditorDialog\";\nimport { FormComponentProps } from \"../types\";\n\nconst imagesStyle = css({\n \".disabled\": {\n opacity: 0.75,\n pointerEvents: \"none\"\n },\n \"ul.images\": {\n listStyle: \"none\",\n li: {\n verticalAlign: \"top\",\n margin: 2,\n display: \"inline-block\",\n width: 150,\n height: 150,\n \"&:last-child\": {\n border: \"1px solid lightgray\",\n cursor: \"pointer\",\n textAlign: \"center\"\n }\n }\n }\n});\n\n// Do not apply editping for following image types.\n// const noImageEditorTypes = [\"image/svg+xml\", \"image/gif\"];\n\ninterface MultiImageUploadProps extends FormComponentProps {\n // Component label.\n label?: string;\n\n // Is component disabled?\n disabled?: boolean;\n\n // Description beneath the image.\n description?: string;\n\n // A className for the root element.\n className?: string;\n\n // Define a list of accepted image types.\n accept?: string[];\n\n // Define file's max allowed size (default is \"5mb\").\n // Uses \"bytes\" (https://www.npmjs.com/package/bytes) library to convert string notation to actual number.\n maxSize: string;\n\n // Image editor options.\n // Please check the docs of ImageEditor component for the list of all available options.\n imageEditor?: {\n [key: string]: any;\n };\n\n // Use these to customize error messages (eg. if i18n supported is needed).\n errorMessages: {\n maxSizeExceeded: string;\n unsupportedFileType: string;\n default: string;\n };\n\n // Cropper options\n cropper?: { [key: string]: any };\n}\n\ninterface State {\n errors?: FileError[];\n selectedImages: Record<string, any>;\n loading: boolean;\n imageEditor: {\n image: SelectedFile | null;\n open: boolean;\n index?: number;\n };\n}\n\nclass MultiImageUpload extends React.Component<MultiImageUploadProps, State> {\n static defaultProps: Partial<MultiImageUploadProps> = {\n accept: [\"image/jpeg\", \"image/png\", \"image/gif\", \"image/svg+xml\"],\n maxSize: \"5mb\",\n imageEditor: {},\n errorMessages: {\n maxSizeExceeded: \"Max size exceeded.\",\n unsupportedFileType: \"Unsupported file type.\",\n default: \"An error occurred.\"\n }\n };\n\n public override state: State = {\n errors: undefined,\n selectedImages: {},\n loading: false,\n imageEditor: {\n open: false,\n image: null,\n index: undefined\n }\n };\n\n onChange = async (value: any) => {\n const { onChange, validate } = this.props;\n onChange && (await onChange(value));\n validate && (await validate());\n };\n\n handleSelectedImages = async (images: Array<SelectedFile>, selectedIndex = 0) => {\n this.setState(\n {\n errors: undefined,\n loading: true\n },\n async () => {\n const selectedImages: Record<number, any> = {};\n for (let i = 0; i < images.length; i++) {\n const image = images[i];\n selectedImages[selectedIndex + i] = { ...image };\n }\n\n this.setState({ selectedImages }, async () => {\n const newValue = Array.isArray(this.props.value) ? [...this.props.value] : [];\n\n const convertedImages = [];\n for (let i = 0; i < images.length; i++) {\n const image = images[i];\n convertedImages.push({\n src: image.src.base64,\n name: image.name,\n size: image.size,\n type: image.type\n });\n }\n\n newValue.splice(selectedIndex, 0, ...convertedImages);\n await this.onChange(newValue);\n this.setState({ loading: false });\n });\n }\n );\n };\n\n handleErrors = (errors: Array<FileError>) => {\n this.setState({ errors });\n };\n\n removeImage = (image: SelectedFile) => {\n const { value, onChange } = this.props;\n if (!onChange) {\n return;\n }\n\n const images = Array.isArray(value) ? [...value] : [];\n images.splice(images.indexOf(image), 1);\n onChange(images);\n };\n\n public override render() {\n const {\n value,\n validation,\n label,\n description,\n disabled,\n imageEditor,\n accept,\n maxSize,\n className\n } = this.props;\n /**\n * TODO: figure out the correct type\n */\n let imageEditorImageSrc = \"\";\n if (this.state.imageEditor.image) {\n // @ts-expect-error\n imageEditorImageSrc = this.state.imageEditor.image.src;\n console.warn(\"Figure out correct type if this.state.imageEditor.image.src\");\n console.log(this.state.imageEditor.image.src);\n }\n\n const { isValid: validationIsValid, message: validationMessage } = validation || {};\n /**\n * accept can safely be cast because we have default value\n */\n return (\n <div className={classNames(imagesStyle, className)}>\n {label && (\n <div className=\"mdc-floating-label mdc-floating-label--float-above\">\n {label}\n </div>\n )}\n\n <ImageEditorDialog\n options={imageEditor}\n open={this.state.imageEditor.open}\n src={imageEditorImageSrc}\n onClose={() => {\n this.setState(state => {\n state.imageEditor.open = false;\n return state;\n });\n }}\n onAccept={src => {\n // We wrapped everything into setTimeout - prevents dialog freeze when larger image is selected.\n setTimeout(() => {\n this.setState({ loading: true }, async () => {\n const newValue = Array.isArray(this.props.value)\n ? [...this.props.value]\n : [];\n\n const imageEditorImageIndex = this.state.imageEditor\n .index as number;\n newValue[imageEditorImageIndex].src = src;\n\n await this.onChange(newValue);\n this.setState({\n loading: false,\n imageEditor: {\n image: null,\n open: false,\n index: undefined\n }\n });\n });\n });\n }}\n />\n\n <BrowseFiles\n accept={accept as string[]}\n maxSize={maxSize}\n multiple\n convertToBase64\n onSuccess={files => {\n this.handleSelectedImages(files, Array.isArray(value) ? value.length : 0);\n }}\n onError={errors => this.handleErrors(errors)}\n >\n {({ browseFiles, getDropZoneProps }) => {\n const images = Array.isArray(value) ? [...value] : [];\n\n return (\n <div {...getDropZoneProps({ className: classNames({ disabled }) })}>\n <ul className=\"images\">\n {images.map((image, index) => (\n <li key={index}>\n <Image\n loading={\n this.state.selectedImages[index] &&\n this.state.loading\n }\n value={image.file || image}\n removeImage={() =>\n this.removeImage(image.file || image)\n }\n editImage={\n this.state.selectedImages[index] &&\n (() => {\n this.setState({\n imageEditor: {\n index,\n open: true,\n image: this.state.selectedImages[\n index\n ]\n }\n });\n })\n }\n uploadImage={() => {\n browseFiles({\n onSuccess: files => {\n this.handleSelectedImages(\n files,\n index + 1\n );\n },\n onError: errors => this.handleErrors(errors)\n });\n }}\n />\n </li>\n ))}\n <li>\n <Image\n disabled={this.state.loading}\n uploadImage={() => {\n browseFiles({\n onSuccess: files => {\n this.handleSelectedImages(\n files,\n Array.isArray(value) ? value.length : 0\n );\n },\n onError: errors => this.handleErrors(errors)\n });\n }}\n />\n </li>\n </ul>\n </div>\n );\n }}\n </BrowseFiles>\n\n {validationIsValid === false && (\n <FormElementMessage error>{validationMessage}</FormElementMessage>\n )}\n\n {validationIsValid !== false && description && (\n <FormElementMessage>{description}</FormElementMessage>\n )}\n\n {Array.isArray(this.state.errors) && (\n <FormElementMessage error>\n Your selection of images failed because of the following images:\n <ul>\n {this.state.errors.map((error: FileError, index) => {\n /**\n * We need to cast as existing keys in errorMessages, otherwise TS throws an error\n */\n const errorType = error.type as\n | \"maxSizeExceeded\"\n | \"unsupportedFileType\"\n | \"default\";\n const message = this.props.errorMessages[errorType];\n\n const errorFileName = error.file ? error.file.name : \"\";\n\n return (\n <li key={errorFileName + index}>\n {index + 1}. <strong>{errorFileName}</strong> - \n {message || this.props.errorMessages.default}\n </li>\n );\n })}\n </ul>\n </FormElementMessage>\n )}\n </div>\n );\n }\n}\n\nexport { MultiImageUpload };\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","_interopRequireDefault","require","_reactButterfiles","_FormElementMessage","_classnames","_Image","_ImageEditorDialog","_EMOTION_STRINGIFIED_CSS_ERROR__","ImageUploadWrapper","_base","default","process","env","NODE_ENV","target","label","name","styles","map","toString","noImageEditingTypes","SingleImageUpload","exports","_React$Component","_this","_classCallCheck2","_len","arguments","length","args","Array","_key","_callSuper2","concat","_defineProperty2","loading","error","imageEditor","open","image","images","_this$props","props","onChange","type","size","src","base64","setState","includes","errors","_errors","_slicedToArray2","_inherits2","_createClass2","key","value","render","_this2","_this$props2","className","validation","description","accept","maxSize","showRemoveImageButton","renderImagePreview","imageEditorImageSrc","state","errorType","_ref","validationIsValid","isValid","validationMessage","message","createElement","classNames","ImageEditorDialog","options","onClose","onAccept","setTimeout","_objectSpread2","convertToBase64","onSuccess","handleFiles","onError","handleErrors","_ref2","browseFiles","getDropZoneProps","removeImage","undefined","uploadImage","editImage","FormElementMessage","errorMessages","React","Component","maxSizeExceeded","multipleMaxSizeExceeded","multipleNotAllowed","unsupportedFileType"],"sources":["SingleImageUpload.tsx"],"sourcesContent":["import React from \"react\";\nimport { FormComponentProps } from \"~/types\";\nimport BrowseFiles, { SelectedFile, FileError } from \"react-butterfiles\";\nimport { FormElementMessage } from \"~/FormElementMessage\";\nimport styled from \"@emotion/styled\";\nimport classNames from \"classnames\";\nimport Image from \"./Image\";\nimport { ImageEditorDialog } from \"./ImageEditorDialog\";\n\nconst ImageUploadWrapper = styled(\"div\")({\n position: \"relative\",\n \".disabled\": {\n opacity: 0.75,\n pointerEvents: \"none\"\n },\n \".mdc-floating-label--float-above\": {\n transform: \"scale(0.75)\",\n top: 10,\n left: 10,\n color: \"var(--mdc-theme-text-secondary-on-background)\"\n },\n \".mdc-text-field-helper-text\": {\n color: \"var(--mdc-theme-text-secondary-on-background)\"\n }\n});\n\ninterface SingleImageUploadProps extends FormComponentProps {\n // Component label.\n label?: string;\n\n // Is component disabled?\n disabled?: boolean;\n\n // Description beneath the image.\n description?: string;\n\n // A className for the root element.\n className?: string;\n\n // Define a list of accepted image types.\n accept?: string[];\n\n // Define file's max allowed size (default is \"10mb\").\n // Uses \"bytes\" (https://www.npmjs.com/package/bytes) library to convert string notation to actual number.\n maxSize: string;\n\n // Image editor options.\n // Please check the docs of ImageEditor component for the list of all available options.\n imageEditor?: {\n [key: string]: any;\n };\n\n // Custom image preview renderer. By default images are rendered via simple <img> element.\n renderImagePreview?: () => React.ReactElement<any>;\n\n // Should remove image button (top right ✕) be shown? Default is set to `true`.\n showRemoveImageButton?: boolean;\n\n // Use these to customize error messages (eg. if i18n supported is needed).\n errorMessages: {\n maxSizeExceeded: string;\n unsupportedFileType: string;\n default: string;\n multipleNotAllowed: string;\n multipleMaxSizeExceeded: string;\n };\n}\n\ninterface StateImage {\n name: string;\n type: string;\n size: number;\n src?: string;\n}\ninterface State {\n loading: boolean;\n error: FileError | null;\n imageEditor: {\n image: StateImage | null;\n open: boolean;\n };\n}\n\n// Do not apply editing for following image types.\nconst noImageEditingTypes = [\"image/svg+xml\", \"image/gif\"];\n\ntype ErrorType =\n | \"maxSizeExceeded\"\n | \"unsupportedFileType\"\n | \"default\"\n | \"multipleNotAllowed\"\n | \"multipleMaxSizeExceeded\";\n\nexport class SingleImageUpload extends React.Component<SingleImageUploadProps, State> {\n static defaultProps: Partial<SingleImageUploadProps> = {\n maxSize: \"10mb\",\n imageEditor: {},\n accept: [\"image/jpeg\", \"image/png\", \"image/gif\", \"image/svg+xml\"],\n showRemoveImageButton: true,\n errorMessages: {\n maxSizeExceeded: \"Max size exceeded.\",\n multipleMaxSizeExceeded: \"Selected fields exceed max file size.\",\n multipleNotAllowed: \"Multiple selection not allowed.\",\n unsupportedFileType: \"Unsupported file type.\",\n default: \"An error occurred.\"\n }\n };\n\n public override state: State = {\n loading: false,\n error: null,\n imageEditor: {\n open: false,\n image: null\n }\n };\n\n handleFiles = (images: SelectedFile[]) => {\n const { onChange, imageEditor } = this.props;\n const image = {\n name: images[0].name,\n type: images[0].type,\n size: images[0].size,\n src: images[0].src.base64\n };\n\n this.setState({ error: null }, () => {\n if (imageEditor && !noImageEditingTypes.includes(image.type)) {\n this.setState({ imageEditor: { image, open: true } });\n } else {\n onChange && onChange(image);\n }\n });\n };\n\n handleErrors = (errors: FileError[]) => {\n const [error] = errors;\n this.setState({ error });\n };\n\n public override render() {\n const {\n className,\n value,\n validation,\n label,\n description,\n accept,\n maxSize,\n onChange,\n imageEditor,\n showRemoveImageButton,\n renderImagePreview\n } = this.props;\n\n let imageEditorImageSrc = \"\";\n if (this.state.imageEditor.image && this.state.imageEditor.image.src) {\n imageEditorImageSrc = this.state.imageEditor.image.src;\n }\n\n const src = value ? value.src : null;\n\n const errorType = this.state.error ? (this.state.error.type as ErrorType) : null;\n\n const { isValid: validationIsValid, message: validationMessage } = validation || {};\n /**\n * accept can be safely cast because of default value\n * errorType as keyof Props[\"errorMessages\"] can be safely\n */\n return (\n <ImageUploadWrapper className={classNames(className)}>\n {label && !src && (\n <div className=\"mdc-floating-label mdc-floating-label--float-above\">\n {label}\n </div>\n )}\n\n <ImageEditorDialog\n options={imageEditor}\n open={this.state.imageEditor.open}\n src={imageEditorImageSrc}\n onClose={() => {\n this.setState(state => {\n state.imageEditor.open = false;\n return state;\n });\n }}\n onAccept={src => {\n // We wrapped everything into setTimeout - prevents dialog freeze when larger image is selected.\n setTimeout(() => {\n this.setState({ loading: true }, async () => {\n onChange &&\n (await onChange({ ...this.state.imageEditor.image, src }));\n this.setState({\n loading: false,\n imageEditor: {\n image: null,\n open: false\n }\n });\n });\n });\n }}\n />\n <BrowseFiles\n accept={accept as string[]}\n maxSize={maxSize}\n convertToBase64\n onSuccess={this.handleFiles}\n onError={this.handleErrors}\n >\n {({ browseFiles, getDropZoneProps }) => (\n <div {...getDropZoneProps()}>\n <Image\n renderImagePreview={renderImagePreview}\n loading={this.state.loading}\n value={value}\n removeImage={showRemoveImageButton ? onChange : undefined}\n uploadImage={browseFiles}\n editImage={browseFiles}\n />\n </div>\n )}\n </BrowseFiles>\n\n {validationIsValid === false && (\n <FormElementMessage error>{validationMessage}</FormElementMessage>\n )}\n\n {validationIsValid !== false && description && (\n <FormElementMessage>{description}</FormElementMessage>\n )}\n\n {this.state.error && (\n <FormElementMessage error>\n {this.props.errorMessages[\n errorType as keyof SingleImageUploadProps[\"errorMessages\"]\n ] || this.props.errorMessages.default}\n </FormElementMessage>\n )}\n </ImageUploadWrapper>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["_react","_interopRequireDefault","require","_reactButterfiles","_FormElementMessage","_classnames","_Image","_ImageEditorDialog","_EMOTION_STRINGIFIED_CSS_ERROR__","ImageUploadWrapper","_base","default","process","env","NODE_ENV","target","label","name","styles","map","toString","noImageEditingTypes","SingleImageUpload","exports","_React$Component","_this","_classCallCheck2","_len","arguments","length","args","Array","_key","_callSuper2","concat","_defineProperty2","loading","error","imageEditor","open","image","images","_this$props","props","onChange","type","size","src","base64","setState","includes","errors","_errors","_slicedToArray2","_inherits2","_createClass2","key","value","render","_this2","_this$props2","className","validation","description","accept","maxSize","showRemoveImageButton","renderImagePreview","imageEditorImageSrc","state","errorType","_ref","validationIsValid","isValid","validationMessage","message","createElement","classNames","ImageEditorDialog","options","onClose","onAccept","setTimeout","_objectSpread2","convertToBase64","onSuccess","handleFiles","onError","handleErrors","_ref2","browseFiles","getDropZoneProps","removeImage","undefined","uploadImage","editImage","FormElementMessage","errorMessages","React","Component","maxSizeExceeded","multipleMaxSizeExceeded","multipleNotAllowed","unsupportedFileType"],"sources":["SingleImageUpload.tsx"],"sourcesContent":["import React from \"react\";\nimport { FormComponentProps } from \"~/types\";\nimport BrowseFiles, { SelectedFile, FileError } from \"react-butterfiles\";\nimport { FormElementMessage } from \"~/FormElementMessage\";\nimport styled from \"@emotion/styled\";\nimport classNames from \"classnames\";\nimport Image from \"./Image\";\nimport { ImageEditorDialog } from \"./ImageEditorDialog\";\n\nconst ImageUploadWrapper = styled(\"div\")({\n position: \"relative\",\n \".disabled\": {\n opacity: 0.75,\n pointerEvents: \"none\"\n },\n \".mdc-floating-label--float-above\": {\n transform: \"scale(0.75)\",\n top: 10,\n left: 10,\n color: \"var(--mdc-theme-text-secondary-on-background)\"\n },\n \".mdc-text-field-helper-text\": {\n color: \"var(--mdc-theme-text-secondary-on-background)\"\n }\n});\n\ninterface SingleImageUploadProps extends FormComponentProps {\n // Component label.\n label?: string;\n\n // Is component disabled?\n disabled?: boolean;\n\n // Description beneath the image.\n description?: string;\n\n // A className for the root element.\n className?: string;\n\n // Define a list of accepted image types.\n accept?: string[];\n\n // Define file's max allowed size (default is \"10mb\").\n // Uses \"bytes\" (https://www.npmjs.com/package/bytes) library to convert string notation to actual number.\n maxSize: string;\n\n // Image editor options.\n // Please check the docs of ImageEditor component for the list of all available options.\n imageEditor?: {\n [key: string]: any;\n };\n\n // Custom image preview renderer. By default images are rendered via simple <img> element.\n renderImagePreview?: () => React.ReactElement<any>;\n\n // Should remove image button (top right ✕) be shown? Default is set to `true`.\n showRemoveImageButton?: boolean;\n\n // Use these to customize error messages (eg. if i18n supported is needed).\n errorMessages: {\n maxSizeExceeded: string;\n unsupportedFileType: string;\n default: string;\n multipleNotAllowed: string;\n multipleMaxSizeExceeded: string;\n };\n}\n\ninterface StateImage {\n name: string;\n type: string;\n size: number;\n src?: string;\n}\ninterface State {\n loading: boolean;\n error: FileError | null;\n imageEditor: {\n image: StateImage | null;\n open: boolean;\n };\n}\n\n// Do not apply editing for following image types.\nconst noImageEditingTypes = [\"image/svg+xml\", \"image/gif\"];\n\ntype ErrorType =\n | \"maxSizeExceeded\"\n | \"unsupportedFileType\"\n | \"default\"\n | \"multipleNotAllowed\"\n | \"multipleMaxSizeExceeded\";\n\nexport class SingleImageUpload extends React.Component<SingleImageUploadProps, State> {\n static defaultProps: Partial<SingleImageUploadProps> = {\n maxSize: \"10mb\",\n imageEditor: {},\n accept: [\"image/jpeg\", \"image/png\", \"image/gif\", \"image/svg+xml\"],\n showRemoveImageButton: true,\n errorMessages: {\n maxSizeExceeded: \"Max size exceeded.\",\n multipleMaxSizeExceeded: \"Selected fields exceed max file size.\",\n multipleNotAllowed: \"Multiple selection not allowed.\",\n unsupportedFileType: \"Unsupported file type.\",\n default: \"An error occurred.\"\n }\n };\n\n public override state: State = {\n loading: false,\n error: null,\n imageEditor: {\n open: false,\n image: null\n }\n };\n\n handleFiles = (images: SelectedFile[]) => {\n const { onChange, imageEditor } = this.props;\n const image = {\n name: images[0].name,\n type: images[0].type,\n size: images[0].size,\n src: images[0].src.base64\n };\n\n this.setState({ error: null }, () => {\n if (imageEditor && !noImageEditingTypes.includes(image.type)) {\n this.setState({ imageEditor: { image, open: true } });\n } else {\n onChange && onChange(image);\n }\n });\n };\n\n handleErrors = (errors: FileError[]) => {\n const [error] = errors;\n this.setState({ error });\n };\n\n public override render() {\n const {\n className,\n value,\n validation,\n label,\n description,\n accept,\n maxSize,\n onChange,\n imageEditor,\n showRemoveImageButton,\n renderImagePreview\n } = this.props;\n\n let imageEditorImageSrc = \"\";\n if (this.state.imageEditor.image && this.state.imageEditor.image.src) {\n imageEditorImageSrc = this.state.imageEditor.image.src;\n }\n\n const src = value ? value.src : null;\n\n const errorType = this.state.error ? (this.state.error.type as ErrorType) : null;\n\n const { isValid: validationIsValid, message: validationMessage } = validation || {};\n /**\n * accept can be safely cast because of default value\n * errorType as keyof Props[\"errorMessages\"] can be safely\n */\n return (\n <ImageUploadWrapper className={classNames(className)}>\n {label && !src && (\n <div className=\"mdc-floating-label mdc-floating-label--float-above\">\n {label}\n </div>\n )}\n\n <ImageEditorDialog\n options={imageEditor}\n open={this.state.imageEditor.open}\n src={imageEditorImageSrc}\n onClose={() => {\n this.setState(state => {\n state.imageEditor.open = false;\n return state;\n });\n }}\n onAccept={src => {\n // We wrapped everything into setTimeout - prevents dialog freeze when larger image is selected.\n setTimeout(() => {\n this.setState({ loading: true }, async () => {\n onChange &&\n (await onChange({ ...this.state.imageEditor.image, src }));\n this.setState({\n loading: false,\n imageEditor: {\n image: null,\n open: false\n }\n });\n });\n });\n }}\n />\n <BrowseFiles\n accept={accept as string[]}\n maxSize={maxSize}\n convertToBase64\n onSuccess={this.handleFiles}\n onError={this.handleErrors}\n >\n {({ browseFiles, getDropZoneProps }) => (\n <div {...getDropZoneProps()}>\n <Image\n renderImagePreview={renderImagePreview}\n loading={this.state.loading}\n value={value}\n removeImage={showRemoveImageButton ? onChange : undefined}\n uploadImage={browseFiles}\n editImage={browseFiles}\n />\n </div>\n )}\n </BrowseFiles>\n\n {validationIsValid === false && (\n <FormElementMessage error>{validationMessage}</FormElementMessage>\n )}\n\n {validationIsValid !== false && description && (\n <FormElementMessage>{description}</FormElementMessage>\n )}\n\n {this.state.error && (\n <FormElementMessage error>\n {this.props.errorMessages[\n errorType as keyof SingleImageUploadProps[\"errorMessages\"]\n ] || this.props.errorMessages.default}\n </FormElementMessage>\n )}\n </ImageUploadWrapper>\n );\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
export {};
|
|
@@ -9,7 +9,6 @@ var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits
|
|
|
9
9
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
10
10
|
var _react = _interopRequireDefault(require("react"));
|
|
11
11
|
var _index = require("../index");
|
|
12
|
-
require("jest-dom/extend-expect");
|
|
13
12
|
var _react2 = require("@testing-library/react");
|
|
14
13
|
afterEach(_react2.cleanup);
|
|
15
14
|
function setup() {
|
|
@@ -58,7 +57,7 @@ function setup() {
|
|
|
58
57
|
}
|
|
59
58
|
}]);
|
|
60
59
|
}(_react.default.Component);
|
|
61
|
-
var utils = (0, _react2.render)(
|
|
60
|
+
var utils = (0, _react2.render)(/*#__PURE__*/_react.default.createElement(Test, null));
|
|
62
61
|
return (0, _objectSpread2.default)({
|
|
63
62
|
renderArg: renderArg
|
|
64
63
|
}, utils);
|