ding-image-editor 3.15.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +193 -0
- package/dist/svg/icon-a.svg +376 -0
- package/dist/svg/icon-b.svg +369 -0
- package/dist/svg/icon-c.svg +369 -0
- package/dist/svg/icon-d.svg +369 -0
- package/dist/tui-image-editor.css +6 -0
- package/dist/tui-image-editor.js +62329 -0
- package/dist/tui-image-editor.min.css +5 -0
- package/dist/tui-image-editor.min.js +15 -0
- package/index.d.ts +334 -0
- package/package.json +52 -0
- package/src/css/buttons.styl +102 -0
- package/src/css/checkbox.styl +86 -0
- package/src/css/colorpicker.styl +98 -0
- package/src/css/gridtable.styl +45 -0
- package/src/css/icon.styl +44 -0
- package/src/css/index.styl +17 -0
- package/src/css/main.styl +163 -0
- package/src/css/position.styl +309 -0
- package/src/css/range.styl +91 -0
- package/src/css/submenu.styl +168 -0
- package/src/index.js +29 -0
- package/src/js/action.js +686 -0
- package/src/js/command/addIcon.js +42 -0
- package/src/js/command/addImageObject.js +34 -0
- package/src/js/command/addObject.js +43 -0
- package/src/js/command/addShape.js +51 -0
- package/src/js/command/addText.js +73 -0
- package/src/js/command/applyFilter.js +95 -0
- package/src/js/command/changeIconColor.js +48 -0
- package/src/js/command/changeSelection.js +31 -0
- package/src/js/command/changeShape.js +84 -0
- package/src/js/command/changeText.js +44 -0
- package/src/js/command/changeTextStyle.js +80 -0
- package/src/js/command/clearObjects.js +33 -0
- package/src/js/command/flip.js +36 -0
- package/src/js/command/loadImage.js +58 -0
- package/src/js/command/removeFilter.js +38 -0
- package/src/js/command/removeObject.js +37 -0
- package/src/js/command/resize.js +41 -0
- package/src/js/command/resizeCanvasDimension.js +40 -0
- package/src/js/command/rotate.js +64 -0
- package/src/js/command/setObjectPosition.js +50 -0
- package/src/js/command/setObjectProperties.js +55 -0
- package/src/js/component/cropper.js +407 -0
- package/src/js/component/filter.js +229 -0
- package/src/js/component/flip.js +146 -0
- package/src/js/component/freeDrawing.js +144 -0
- package/src/js/component/icon.js +246 -0
- package/src/js/component/imageLoader.js +84 -0
- package/src/js/component/line.js +205 -0
- package/src/js/component/resize.js +103 -0
- package/src/js/component/rotation.js +91 -0
- package/src/js/component/shape.js +601 -0
- package/src/js/component/text.js +572 -0
- package/src/js/component/zoom.js +708 -0
- package/src/js/consts.js +404 -0
- package/src/js/drawingMode/cropper.js +35 -0
- package/src/js/drawingMode/freeDrawing.js +36 -0
- package/src/js/drawingMode/icon.js +35 -0
- package/src/js/drawingMode/lineDrawing.js +36 -0
- package/src/js/drawingMode/resize.js +35 -0
- package/src/js/drawingMode/shape.js +35 -0
- package/src/js/drawingMode/text.js +35 -0
- package/src/js/drawingMode/zoom.js +37 -0
- package/src/js/extension/arrowLine.js +172 -0
- package/src/js/extension/blur.js +29 -0
- package/src/js/extension/colorFilter.js +104 -0
- package/src/js/extension/cropzone.js +568 -0
- package/src/js/extension/emboss.js +29 -0
- package/src/js/extension/mask.js +90 -0
- package/src/js/extension/sharpen.js +29 -0
- package/src/js/factory/command.js +36 -0
- package/src/js/factory/errorMessage.js +27 -0
- package/src/js/graphics.js +1539 -0
- package/src/js/helper/imagetracer.js +1396 -0
- package/src/js/helper/selectionModifyHelper.js +86 -0
- package/src/js/helper/shapeFilterFillHelper.js +564 -0
- package/src/js/helper/shapeResizeHelper.js +237 -0
- package/src/js/imageEditor.js +1795 -0
- package/src/js/interface/command.js +131 -0
- package/src/js/interface/component.js +127 -0
- package/src/js/interface/drawingMode.js +47 -0
- package/src/js/invoker.js +292 -0
- package/src/js/polyfill.js +498 -0
- package/src/js/ui/crop.js +139 -0
- package/src/js/ui/draw.js +187 -0
- package/src/js/ui/filter.js +510 -0
- package/src/js/ui/flip.js +87 -0
- package/src/js/ui/history.js +171 -0
- package/src/js/ui/icon.js +191 -0
- package/src/js/ui/locale/locale.js +19 -0
- package/src/js/ui/mask.js +96 -0
- package/src/js/ui/panelMenu.js +130 -0
- package/src/js/ui/resize.js +241 -0
- package/src/js/ui/rotate.js +123 -0
- package/src/js/ui/shape.js +265 -0
- package/src/js/ui/submenuBase.js +122 -0
- package/src/js/ui/template/controls.js +21 -0
- package/src/js/ui/template/mainContainer.js +38 -0
- package/src/js/ui/template/style.js +146 -0
- package/src/js/ui/template/submenu/crop.js +73 -0
- package/src/js/ui/template/submenu/draw.js +42 -0
- package/src/js/ui/template/submenu/filter.js +157 -0
- package/src/js/ui/template/submenu/flip.js +41 -0
- package/src/js/ui/template/submenu/history.js +22 -0
- package/src/js/ui/template/submenu/icon.js +108 -0
- package/src/js/ui/template/submenu/mask.js +30 -0
- package/src/js/ui/template/submenu/resize.js +54 -0
- package/src/js/ui/template/submenu/rotate.js +32 -0
- package/src/js/ui/template/submenu/shape.js +45 -0
- package/src/js/ui/template/submenu/text.js +67 -0
- package/src/js/ui/template/submenu/zoom.js +41 -0
- package/src/js/ui/text.js +279 -0
- package/src/js/ui/theme/standard.js +220 -0
- package/src/js/ui/theme/theme.js +249 -0
- package/src/js/ui/tools/colorpicker.js +250 -0
- package/src/js/ui/tools/range.js +390 -0
- package/src/js/ui.js +858 -0
- package/src/js/util.js +551 -0
- package/src/svg/default.svg +335 -0
- package/src/svg/icon-a/ic-apply.svg +6 -0
- package/src/svg/icon-a/ic-cancel.svg +6 -0
- package/src/svg/icon-a/ic-color-transparent-w.svg +12 -0
- package/src/svg/icon-a/ic-crop.svg +7 -0
- package/src/svg/icon-a/ic-delete-all.svg +6 -0
- package/src/svg/icon-a/ic-delete.svg +6 -0
- package/src/svg/icon-a/ic-draw-free.svg +5 -0
- package/src/svg/icon-a/ic-draw-line.svg +5 -0
- package/src/svg/icon-a/ic-draw.svg +6 -0
- package/src/svg/icon-a/ic-filter.svg +7 -0
- package/src/svg/icon-a/ic-flip-reset.svg +7 -0
- package/src/svg/icon-a/ic-flip-x.svg +6 -0
- package/src/svg/icon-a/ic-flip-y.svg +6 -0
- package/src/svg/icon-a/ic-flip.svg +6 -0
- package/src/svg/icon-a/ic-history-check.svg +5 -0
- package/src/svg/icon-a/ic-history-crop.svg +7 -0
- package/src/svg/icon-a/ic-history-delete.svg +9 -0
- package/src/svg/icon-a/ic-history-draw.svg +7 -0
- package/src/svg/icon-a/ic-history-filter.svg +8 -0
- package/src/svg/icon-a/ic-history-flip.svg +6 -0
- package/src/svg/icon-a/ic-history-group.svg +9 -0
- package/src/svg/icon-a/ic-history-icon.svg +6 -0
- package/src/svg/icon-a/ic-history-load.svg +7 -0
- package/src/svg/icon-a/ic-history-mask.svg +9 -0
- package/src/svg/icon-a/ic-history-resize.svg +12 -0
- package/src/svg/icon-a/ic-history-rotate.svg +16 -0
- package/src/svg/icon-a/ic-history-shape.svg +7 -0
- package/src/svg/icon-a/ic-history-text.svg +8 -0
- package/src/svg/icon-a/ic-history.svg +6 -0
- package/src/svg/icon-a/ic-icon-arrow-2.svg +5 -0
- package/src/svg/icon-a/ic-icon-arrow-3.svg +5 -0
- package/src/svg/icon-a/ic-icon-arrow.svg +5 -0
- package/src/svg/icon-a/ic-icon-bubble.svg +5 -0
- package/src/svg/icon-a/ic-icon-heart.svg +5 -0
- package/src/svg/icon-a/ic-icon-load.svg +8 -0
- package/src/svg/icon-a/ic-icon-location.svg +8 -0
- package/src/svg/icon-a/ic-icon-polygon.svg +5 -0
- package/src/svg/icon-a/ic-icon-star-2.svg +5 -0
- package/src/svg/icon-a/ic-icon-star.svg +5 -0
- package/src/svg/icon-a/ic-icon.svg +5 -0
- package/src/svg/icon-a/ic-mask-load.svg +8 -0
- package/src/svg/icon-a/ic-mask.svg +6 -0
- package/src/svg/icon-a/ic-redo.svg +7 -0
- package/src/svg/icon-a/ic-reset.svg +7 -0
- package/src/svg/icon-a/ic-resize.svg +13 -0
- package/src/svg/icon-a/ic-rotate-clockwise.svg +7 -0
- package/src/svg/icon-a/ic-rotate-counterclockwise.svg +7 -0
- package/src/svg/icon-a/ic-rotate.svg +7 -0
- package/src/svg/icon-a/ic-shape-circle.svg +5 -0
- package/src/svg/icon-a/ic-shape-rectangle.svg +5 -0
- package/src/svg/icon-a/ic-shape-triangle.svg +5 -0
- package/src/svg/icon-a/ic-shape.svg +6 -0
- package/src/svg/icon-a/ic-text-align-center.svg +6 -0
- package/src/svg/icon-a/ic-text-align-left.svg +6 -0
- package/src/svg/icon-a/ic-text-align-right.svg +6 -0
- package/src/svg/icon-a/ic-text-bold.svg +7 -0
- package/src/svg/icon-a/ic-text-italic.svg +6 -0
- package/src/svg/icon-a/ic-text-underline.svg +7 -0
- package/src/svg/icon-a/ic-text.svg +7 -0
- package/src/svg/icon-a/ic-undo.svg +7 -0
- package/src/svg/icon-a/ic-zoom-hand.svg +8 -0
- package/src/svg/icon-a/ic-zoom-zoom-in.svg +10 -0
- package/src/svg/icon-a/ic-zoom-zoom-out.svg +9 -0
- package/src/svg/icon-a/img-bi.svg +5 -0
- package/src/svg/icon-b/ic-apply.svg +6 -0
- package/src/svg/icon-b/ic-cancel.svg +6 -0
- package/src/svg/icon-b/ic-crop.svg +7 -0
- package/src/svg/icon-b/ic-delete-all.svg +6 -0
- package/src/svg/icon-b/ic-delete.svg +6 -0
- package/src/svg/icon-b/ic-draw-free.svg +5 -0
- package/src/svg/icon-b/ic-draw-line.svg +5 -0
- package/src/svg/icon-b/ic-draw.svg +6 -0
- package/src/svg/icon-b/ic-filter.svg +7 -0
- package/src/svg/icon-b/ic-flip-reset.svg +7 -0
- package/src/svg/icon-b/ic-flip-x.svg +6 -0
- package/src/svg/icon-b/ic-flip-y.svg +6 -0
- package/src/svg/icon-b/ic-flip.svg +6 -0
- package/src/svg/icon-b/ic-history-check.svg +5 -0
- package/src/svg/icon-b/ic-history-crop.svg +7 -0
- package/src/svg/icon-b/ic-history-delete.svg +9 -0
- package/src/svg/icon-b/ic-history-draw.svg +7 -0
- package/src/svg/icon-b/ic-history-filter.svg +8 -0
- package/src/svg/icon-b/ic-history-flip.svg +6 -0
- package/src/svg/icon-b/ic-history-group.svg +9 -0
- package/src/svg/icon-b/ic-history-icon.svg +6 -0
- package/src/svg/icon-b/ic-history-load.svg +7 -0
- package/src/svg/icon-b/ic-history-mask.svg +9 -0
- package/src/svg/icon-b/ic-history-resize.svg +12 -0
- package/src/svg/icon-b/ic-history-rotate.svg +16 -0
- package/src/svg/icon-b/ic-history-shape.svg +7 -0
- package/src/svg/icon-b/ic-history-text.svg +8 -0
- package/src/svg/icon-b/ic-history.svg +6 -0
- package/src/svg/icon-b/ic-icon-arrow-2.svg +5 -0
- package/src/svg/icon-b/ic-icon-arrow-3.svg +5 -0
- package/src/svg/icon-b/ic-icon-arrow.svg +5 -0
- package/src/svg/icon-b/ic-icon-bubble.svg +5 -0
- package/src/svg/icon-b/ic-icon-heart.svg +5 -0
- package/src/svg/icon-b/ic-icon-load.svg +8 -0
- package/src/svg/icon-b/ic-icon-location.svg +8 -0
- package/src/svg/icon-b/ic-icon-polygon.svg +5 -0
- package/src/svg/icon-b/ic-icon-star-2.svg +5 -0
- package/src/svg/icon-b/ic-icon-star.svg +5 -0
- package/src/svg/icon-b/ic-icon.svg +5 -0
- package/src/svg/icon-b/ic-mask-load.svg +8 -0
- package/src/svg/icon-b/ic-mask.svg +6 -0
- package/src/svg/icon-b/ic-redo.svg +7 -0
- package/src/svg/icon-b/ic-reset.svg +7 -0
- package/src/svg/icon-b/ic-resize.svg +13 -0
- package/src/svg/icon-b/ic-rotate-clockwise.svg +7 -0
- package/src/svg/icon-b/ic-rotate-counterclockwise.svg +7 -0
- package/src/svg/icon-b/ic-rotate.svg +7 -0
- package/src/svg/icon-b/ic-shape-circle.svg +5 -0
- package/src/svg/icon-b/ic-shape-rectangle.svg +5 -0
- package/src/svg/icon-b/ic-shape-triangle.svg +5 -0
- package/src/svg/icon-b/ic-shape.svg +6 -0
- package/src/svg/icon-b/ic-text-align-center.svg +6 -0
- package/src/svg/icon-b/ic-text-align-left.svg +6 -0
- package/src/svg/icon-b/ic-text-align-right.svg +6 -0
- package/src/svg/icon-b/ic-text-bold.svg +7 -0
- package/src/svg/icon-b/ic-text-italic.svg +6 -0
- package/src/svg/icon-b/ic-text-underline.svg +7 -0
- package/src/svg/icon-b/ic-text.svg +7 -0
- package/src/svg/icon-b/ic-undo.svg +7 -0
- package/src/svg/icon-b/ic-zoom-hand.svg +8 -0
- package/src/svg/icon-b/ic-zoom-zoom-in.svg +12 -0
- package/src/svg/icon-b/ic-zoom-zoom-out.svg +11 -0
- package/src/svg/icon-b/img-bi.svg +5 -0
- package/src/svg/icon-c/ic-apply.svg +6 -0
- package/src/svg/icon-c/ic-cancel.svg +6 -0
- package/src/svg/icon-c/ic-crop.svg +7 -0
- package/src/svg/icon-c/ic-delete-all.svg +6 -0
- package/src/svg/icon-c/ic-delete.svg +6 -0
- package/src/svg/icon-c/ic-draw-free.svg +5 -0
- package/src/svg/icon-c/ic-draw-line.svg +5 -0
- package/src/svg/icon-c/ic-draw.svg +6 -0
- package/src/svg/icon-c/ic-filter.svg +7 -0
- package/src/svg/icon-c/ic-flip-reset.svg +7 -0
- package/src/svg/icon-c/ic-flip-x.svg +6 -0
- package/src/svg/icon-c/ic-flip-y.svg +6 -0
- package/src/svg/icon-c/ic-flip.svg +6 -0
- package/src/svg/icon-c/ic-history-check.svg +5 -0
- package/src/svg/icon-c/ic-history-crop.svg +7 -0
- package/src/svg/icon-c/ic-history-delete.svg +9 -0
- package/src/svg/icon-c/ic-history-draw.svg +7 -0
- package/src/svg/icon-c/ic-history-filter.svg +8 -0
- package/src/svg/icon-c/ic-history-flip.svg +6 -0
- package/src/svg/icon-c/ic-history-group.svg +9 -0
- package/src/svg/icon-c/ic-history-icon.svg +6 -0
- package/src/svg/icon-c/ic-history-load.svg +7 -0
- package/src/svg/icon-c/ic-history-mask.svg +9 -0
- package/src/svg/icon-c/ic-history-resize.svg +12 -0
- package/src/svg/icon-c/ic-history-rotate.svg +16 -0
- package/src/svg/icon-c/ic-history-shape.svg +7 -0
- package/src/svg/icon-c/ic-history-text.svg +8 -0
- package/src/svg/icon-c/ic-history.svg +6 -0
- package/src/svg/icon-c/ic-icon-arrow-2.svg +5 -0
- package/src/svg/icon-c/ic-icon-arrow-3.svg +5 -0
- package/src/svg/icon-c/ic-icon-arrow.svg +5 -0
- package/src/svg/icon-c/ic-icon-bubble.svg +5 -0
- package/src/svg/icon-c/ic-icon-heart.svg +5 -0
- package/src/svg/icon-c/ic-icon-load.svg +8 -0
- package/src/svg/icon-c/ic-icon-location.svg +8 -0
- package/src/svg/icon-c/ic-icon-polygon.svg +5 -0
- package/src/svg/icon-c/ic-icon-star-2.svg +5 -0
- package/src/svg/icon-c/ic-icon-star.svg +5 -0
- package/src/svg/icon-c/ic-icon.svg +5 -0
- package/src/svg/icon-c/ic-mask-load.svg +8 -0
- package/src/svg/icon-c/ic-mask.svg +6 -0
- package/src/svg/icon-c/ic-redo.svg +7 -0
- package/src/svg/icon-c/ic-reset.svg +7 -0
- package/src/svg/icon-c/ic-resize.svg +13 -0
- package/src/svg/icon-c/ic-rotate-clockwise.svg +7 -0
- package/src/svg/icon-c/ic-rotate-counterclockwise.svg +7 -0
- package/src/svg/icon-c/ic-rotate.svg +7 -0
- package/src/svg/icon-c/ic-shape-circle.svg +5 -0
- package/src/svg/icon-c/ic-shape-rectangle.svg +5 -0
- package/src/svg/icon-c/ic-shape-triangle.svg +5 -0
- package/src/svg/icon-c/ic-shape.svg +6 -0
- package/src/svg/icon-c/ic-text-align-center.svg +6 -0
- package/src/svg/icon-c/ic-text-align-left.svg +6 -0
- package/src/svg/icon-c/ic-text-align-right.svg +6 -0
- package/src/svg/icon-c/ic-text-bold.svg +7 -0
- package/src/svg/icon-c/ic-text-italic.svg +6 -0
- package/src/svg/icon-c/ic-text-underline.svg +7 -0
- package/src/svg/icon-c/ic-text.svg +7 -0
- package/src/svg/icon-c/ic-undo.svg +7 -0
- package/src/svg/icon-c/ic-zoom-hand.svg +8 -0
- package/src/svg/icon-c/ic-zoom-zoom-in.svg +12 -0
- package/src/svg/icon-c/ic-zoom-zoom-out.svg +11 -0
- package/src/svg/icon-c/img-bi.svg +5 -0
- package/src/svg/icon-d/ic-apply.svg +6 -0
- package/src/svg/icon-d/ic-cancel.svg +6 -0
- package/src/svg/icon-d/ic-crop.svg +7 -0
- package/src/svg/icon-d/ic-delete-all.svg +6 -0
- package/src/svg/icon-d/ic-delete.svg +6 -0
- package/src/svg/icon-d/ic-draw-free.svg +5 -0
- package/src/svg/icon-d/ic-draw-line.svg +5 -0
- package/src/svg/icon-d/ic-draw.svg +6 -0
- package/src/svg/icon-d/ic-filter.svg +7 -0
- package/src/svg/icon-d/ic-flip-reset.svg +7 -0
- package/src/svg/icon-d/ic-flip-x.svg +6 -0
- package/src/svg/icon-d/ic-flip-y.svg +6 -0
- package/src/svg/icon-d/ic-flip.svg +6 -0
- package/src/svg/icon-d/ic-history-check.svg +5 -0
- package/src/svg/icon-d/ic-history-crop.svg +7 -0
- package/src/svg/icon-d/ic-history-delete.svg +9 -0
- package/src/svg/icon-d/ic-history-draw.svg +7 -0
- package/src/svg/icon-d/ic-history-filter.svg +8 -0
- package/src/svg/icon-d/ic-history-flip.svg +6 -0
- package/src/svg/icon-d/ic-history-group.svg +9 -0
- package/src/svg/icon-d/ic-history-icon.svg +6 -0
- package/src/svg/icon-d/ic-history-load.svg +7 -0
- package/src/svg/icon-d/ic-history-mask.svg +9 -0
- package/src/svg/icon-d/ic-history-resize.svg +12 -0
- package/src/svg/icon-d/ic-history-rotate.svg +16 -0
- package/src/svg/icon-d/ic-history-shape.svg +7 -0
- package/src/svg/icon-d/ic-history-text.svg +8 -0
- package/src/svg/icon-d/ic-history.svg +6 -0
- package/src/svg/icon-d/ic-icon-arrow-2.svg +5 -0
- package/src/svg/icon-d/ic-icon-arrow-3.svg +5 -0
- package/src/svg/icon-d/ic-icon-arrow.svg +5 -0
- package/src/svg/icon-d/ic-icon-bubble.svg +5 -0
- package/src/svg/icon-d/ic-icon-heart.svg +5 -0
- package/src/svg/icon-d/ic-icon-load.svg +8 -0
- package/src/svg/icon-d/ic-icon-location.svg +8 -0
- package/src/svg/icon-d/ic-icon-polygon.svg +5 -0
- package/src/svg/icon-d/ic-icon-star-2.svg +5 -0
- package/src/svg/icon-d/ic-icon-star.svg +5 -0
- package/src/svg/icon-d/ic-icon.svg +5 -0
- package/src/svg/icon-d/ic-mask-load.svg +8 -0
- package/src/svg/icon-d/ic-mask.svg +6 -0
- package/src/svg/icon-d/ic-redo.svg +7 -0
- package/src/svg/icon-d/ic-reset.svg +7 -0
- package/src/svg/icon-d/ic-resize.svg +13 -0
- package/src/svg/icon-d/ic-rotate-clockwise.svg +7 -0
- package/src/svg/icon-d/ic-rotate-counterclockwise.svg +7 -0
- package/src/svg/icon-d/ic-rotate.svg +7 -0
- package/src/svg/icon-d/ic-shape-circle.svg +5 -0
- package/src/svg/icon-d/ic-shape-rectangle.svg +5 -0
- package/src/svg/icon-d/ic-shape-triangle.svg +5 -0
- package/src/svg/icon-d/ic-shape.svg +6 -0
- package/src/svg/icon-d/ic-text-align-center.svg +6 -0
- package/src/svg/icon-d/ic-text-align-left.svg +6 -0
- package/src/svg/icon-d/ic-text-align-right.svg +6 -0
- package/src/svg/icon-d/ic-text-bold.svg +7 -0
- package/src/svg/icon-d/ic-text-italic.svg +6 -0
- package/src/svg/icon-d/ic-text-underline.svg +7 -0
- package/src/svg/icon-d/ic-text.svg +7 -0
- package/src/svg/icon-d/ic-undo.svg +7 -0
- package/src/svg/icon-d/ic-zoom-hand.svg +8 -0
- package/src/svg/icon-d/ic-zoom-zoom-in.svg +12 -0
- package/src/svg/icon-d/ic-zoom-zoom-out.svg +11 -0
- package/src/svg/icon-d/img-bi.svg +5 -0
@@ -0,0 +1,220 @@
|
|
1
|
+
/**
|
2
|
+
* Full configuration for theme.<br>
|
3
|
+
* @typedef {object} themeConfig
|
4
|
+
* @property {string} common.bi.image - Brand icon image
|
5
|
+
* @property {string} common.bisize.width - Icon image width
|
6
|
+
* @property {string} common.bisize.height - Icon Image Height
|
7
|
+
* @property {string} common.backgroundImage - Background image
|
8
|
+
* @property {string} common.backgroundColor - Background color
|
9
|
+
* @property {string} common.border - Full area border style
|
10
|
+
* @property {string} header.backgroundImage - header area background
|
11
|
+
* @property {string} header.backgroundColor - header area background color
|
12
|
+
* @property {string} header.border - header area border style
|
13
|
+
* @property {string} loadButton.backgroundColor - load button background color
|
14
|
+
* @property {string} loadButton.border - load button border style
|
15
|
+
* @property {string} loadButton.color - load button foreground color
|
16
|
+
* @property {string} loadButton.fontFamily - load button font type
|
17
|
+
* @property {string} loadButton.fontSize - load button font size
|
18
|
+
* @property {string} downloadButton.backgroundColor - download button background color
|
19
|
+
* @property {string} downloadButton.border - download button border style
|
20
|
+
* @property {string} downloadButton.color - download button foreground color
|
21
|
+
* @property {string} downloadButton.fontFamily - download button font type
|
22
|
+
* @property {string} downloadButton.fontSize - download button font size
|
23
|
+
* @property {string} menu.normalIcon.color - Menu normal color for default icon
|
24
|
+
* @property {string} menu.normalIcon.path - Menu normal icon svg bundle file path
|
25
|
+
* @property {string} menu.normalIcon.name - Menu normal icon svg bundle name
|
26
|
+
* @property {string} menu.activeIcon.color - Menu active color for default icon
|
27
|
+
* @property {string} menu.activeIcon.path - Menu active icon svg bundle file path
|
28
|
+
* @property {string} menu.activeIcon.name - Menu active icon svg bundle name
|
29
|
+
* @property {string} menu.disabled.color - Menu disabled color for default icon
|
30
|
+
* @property {string} menu.disabled.path - Menu disabled icon svg bundle file path
|
31
|
+
* @property {string} menu.disabled.name - Menu disabled icon svg bundle name
|
32
|
+
* @property {string} menu.hover.color - Menu default icon hover color
|
33
|
+
* @property {string} menu.hover.path - Menu hover icon svg bundle file path
|
34
|
+
* @property {string} menu.hover.name - Menu hover icon svg bundle name
|
35
|
+
* @property {string} menu.iconSize.width - Menu icon Size Width
|
36
|
+
* @property {string} menu.iconSize.height - Menu Icon Size Height
|
37
|
+
* @property {string} submenu.backgroundColor - Sub-menu area background color
|
38
|
+
* @property {string} submenu.partition.color - Submenu partition line color
|
39
|
+
* @property {string} submenu.normalIcon.color - Submenu normal color for default icon
|
40
|
+
* @property {string} submenu.normalIcon.path - Submenu default icon svg bundle file path
|
41
|
+
* @property {string} submenu.normalIcon.name - Submenu default icon svg bundle name
|
42
|
+
* @property {string} submenu.activeIcon.color - Submenu active color for default icon
|
43
|
+
* @property {string} submenu.activeIcon.path - Submenu active icon svg bundle file path
|
44
|
+
* @property {string} submenu.activeIcon.name - Submenu active icon svg bundle name
|
45
|
+
* @property {string} submenu.iconSize.width - Submenu icon Size Width
|
46
|
+
* @property {string} submenu.iconSize.height - Submenu Icon Size Height
|
47
|
+
* @property {string} submenu.normalLabel.color - Submenu default label color
|
48
|
+
* @property {string} submenu.normalLabel.fontWeight - Sub Menu Default Label Font Thickness
|
49
|
+
* @property {string} submenu.activeLabel.color - Submenu active label color
|
50
|
+
* @property {string} submenu.activeLabel.fontWeight - Submenu active label Font thickness
|
51
|
+
* @property {string} checkbox.border - Checkbox border style
|
52
|
+
* @property {string} checkbox.backgroundColor - Checkbox background color
|
53
|
+
* @property {string} range.pointer.color - range control pointer color
|
54
|
+
* @property {string} range.bar.color - range control bar color
|
55
|
+
* @property {string} range.subbar.color - range control subbar color
|
56
|
+
* @property {string} range.value.color - range number box font color
|
57
|
+
* @property {string} range.value.fontWeight - range number box font thickness
|
58
|
+
* @property {string} range.value.fontSize - range number box font size
|
59
|
+
* @property {string} range.value.border - range number box border style
|
60
|
+
* @property {string} range.value.backgroundColor - range number box background color
|
61
|
+
* @property {string} range.title.color - range title font color
|
62
|
+
* @property {string} range.title.fontWeight - range title font weight
|
63
|
+
* @property {string} colorpicker.button.border - colorpicker button border style
|
64
|
+
* @property {string} colorpicker.title.color - colorpicker button title font color
|
65
|
+
* @example
|
66
|
+
// default keys and styles
|
67
|
+
var customTheme = {
|
68
|
+
'common.bi.image': 'https://uicdn.toast.com/toastui/img/tui-image-editor-bi.png',
|
69
|
+
'common.bisize.width': '251px',
|
70
|
+
'common.bisize.height': '21px',
|
71
|
+
'common.backgroundImage': 'none',
|
72
|
+
'common.backgroundColor': '#1e1e1e',
|
73
|
+
'common.border': '0px',
|
74
|
+
|
75
|
+
// header
|
76
|
+
'header.backgroundImage': 'none',
|
77
|
+
'header.backgroundColor': 'transparent',
|
78
|
+
'header.border': '0px',
|
79
|
+
|
80
|
+
// load button
|
81
|
+
'loadButton.backgroundColor': '#fff',
|
82
|
+
'loadButton.border': '1px solid #ddd',
|
83
|
+
'loadButton.color': '#222',
|
84
|
+
'loadButton.fontFamily': 'NotoSans, sans-serif',
|
85
|
+
'loadButton.fontSize': '12px',
|
86
|
+
|
87
|
+
// download button
|
88
|
+
'downloadButton.backgroundColor': '#fdba3b',
|
89
|
+
'downloadButton.border': '1px solid #fdba3b',
|
90
|
+
'downloadButton.color': '#fff',
|
91
|
+
'downloadButton.fontFamily': 'NotoSans, sans-serif',
|
92
|
+
'downloadButton.fontSize': '12px',
|
93
|
+
|
94
|
+
// icons default
|
95
|
+
'menu.normalIcon.color': '#8a8a8a',
|
96
|
+
'menu.activeIcon.color': '#555555',
|
97
|
+
'menu.disabledIcon.color': '#434343',
|
98
|
+
'menu.hoverIcon.color': '#e9e9e9',
|
99
|
+
'submenu.normalIcon.color': '#8a8a8a',
|
100
|
+
'submenu.activeIcon.color': '#e9e9e9',
|
101
|
+
|
102
|
+
'menu.iconSize.width': '24px',
|
103
|
+
'menu.iconSize.height': '24px',
|
104
|
+
'submenu.iconSize.width': '32px',
|
105
|
+
'submenu.iconSize.height': '32px',
|
106
|
+
|
107
|
+
// submenu primary color
|
108
|
+
'submenu.backgroundColor': '#1e1e1e',
|
109
|
+
'submenu.partition.color': '#858585',
|
110
|
+
|
111
|
+
// submenu labels
|
112
|
+
'submenu.normalLabel.color': '#858585',
|
113
|
+
'submenu.normalLabel.fontWeight': 'lighter',
|
114
|
+
'submenu.activeLabel.color': '#fff',
|
115
|
+
'submenu.activeLabel.fontWeight': 'lighter',
|
116
|
+
|
117
|
+
// checkbox style
|
118
|
+
'checkbox.border': '1px solid #ccc',
|
119
|
+
'checkbox.backgroundColor': '#fff',
|
120
|
+
|
121
|
+
// rango style
|
122
|
+
'range.pointer.color': '#fff',
|
123
|
+
'range.bar.color': '#666',
|
124
|
+
'range.subbar.color': '#d1d1d1',
|
125
|
+
|
126
|
+
'range.disabledPointer.color': '#414141',
|
127
|
+
'range.disabledBar.color': '#282828',
|
128
|
+
'range.disabledSubbar.color': '#414141',
|
129
|
+
|
130
|
+
'range.value.color': '#fff',
|
131
|
+
'range.value.fontWeight': 'lighter',
|
132
|
+
'range.value.fontSize': '11px',
|
133
|
+
'range.value.border': '1px solid #353535',
|
134
|
+
'range.value.backgroundColor': '#151515',
|
135
|
+
'range.title.color': '#fff',
|
136
|
+
'range.title.fontWeight': 'lighter',
|
137
|
+
|
138
|
+
// colorpicker style
|
139
|
+
'colorpicker.button.border': '1px solid #1e1e1e',
|
140
|
+
'colorpicker.title.color': '#fff'
|
141
|
+
};
|
142
|
+
*/
|
143
|
+
export default {
|
144
|
+
'common.bi.image': 'https://uicdn.toast.com/toastui/img/tui-image-editor-bi.png',
|
145
|
+
'common.bisize.width': '251px',
|
146
|
+
'common.bisize.height': '21px',
|
147
|
+
'common.backgroundImage': 'none',
|
148
|
+
'common.backgroundColor': '#1e1e1e',
|
149
|
+
'common.border': '0px',
|
150
|
+
|
151
|
+
// header
|
152
|
+
'header.backgroundImage': 'none',
|
153
|
+
'header.backgroundColor': 'transparent',
|
154
|
+
'header.border': '0px',
|
155
|
+
|
156
|
+
// load button
|
157
|
+
'loadButton.backgroundColor': '#fff',
|
158
|
+
'loadButton.border': '1px solid #ddd',
|
159
|
+
'loadButton.color': '#222',
|
160
|
+
'loadButton.fontFamily': "'Noto Sans', sans-serif",
|
161
|
+
'loadButton.fontSize': '12px',
|
162
|
+
|
163
|
+
// download button
|
164
|
+
'downloadButton.backgroundColor': '#fdba3b',
|
165
|
+
'downloadButton.border': '1px solid #fdba3b',
|
166
|
+
'downloadButton.color': '#fff',
|
167
|
+
'downloadButton.fontFamily': "'Noto Sans', sans-serif",
|
168
|
+
'downloadButton.fontSize': '12px',
|
169
|
+
|
170
|
+
// main icons
|
171
|
+
'menu.normalIcon.color': '#8a8a8a',
|
172
|
+
'menu.activeIcon.color': '#555555',
|
173
|
+
'menu.disabledIcon.color': '#434343',
|
174
|
+
'menu.hoverIcon.color': '#e9e9e9',
|
175
|
+
|
176
|
+
// submenu icons
|
177
|
+
'submenu.normalIcon.color': '#8a8a8a',
|
178
|
+
'submenu.activeIcon.color': '#e9e9e9',
|
179
|
+
|
180
|
+
'menu.iconSize.width': '24px',
|
181
|
+
'menu.iconSize.height': '24px',
|
182
|
+
|
183
|
+
'submenu.iconSize.width': '32px',
|
184
|
+
'submenu.iconSize.height': '32px',
|
185
|
+
|
186
|
+
// submenu primary color
|
187
|
+
'submenu.backgroundColor': '#1e1e1e',
|
188
|
+
'submenu.partition.color': '#3c3c3c',
|
189
|
+
|
190
|
+
// submenu labels
|
191
|
+
'submenu.normalLabel.color': '#8a8a8a',
|
192
|
+
'submenu.normalLabel.fontWeight': 'lighter',
|
193
|
+
'submenu.activeLabel.color': '#fff',
|
194
|
+
'submenu.activeLabel.fontWeight': 'lighter',
|
195
|
+
|
196
|
+
// checkbox style
|
197
|
+
'checkbox.border': '0px',
|
198
|
+
'checkbox.backgroundColor': '#fff',
|
199
|
+
|
200
|
+
// range style
|
201
|
+
'range.pointer.color': '#fff',
|
202
|
+
'range.bar.color': '#666',
|
203
|
+
'range.subbar.color': '#d1d1d1',
|
204
|
+
|
205
|
+
'range.disabledPointer.color': '#414141',
|
206
|
+
'range.disabledBar.color': '#282828',
|
207
|
+
'range.disabledSubbar.color': '#414141',
|
208
|
+
|
209
|
+
'range.value.color': '#fff',
|
210
|
+
'range.value.fontWeight': 'lighter',
|
211
|
+
'range.value.fontSize': '11px',
|
212
|
+
'range.value.border': '1px solid #353535',
|
213
|
+
'range.value.backgroundColor': '#151515',
|
214
|
+
'range.title.color': '#fff',
|
215
|
+
'range.title.fontWeight': 'lighter',
|
216
|
+
|
217
|
+
// colorpicker style
|
218
|
+
'colorpicker.button.border': '1px solid #1e1e1e',
|
219
|
+
'colorpicker.title.color': '#fff',
|
220
|
+
};
|
@@ -0,0 +1,249 @@
|
|
1
|
+
import extend from 'tui-code-snippet/object/extend';
|
2
|
+
import forEach from 'tui-code-snippet/collection/forEach';
|
3
|
+
import style from '@/ui/template/style';
|
4
|
+
import standardTheme from '@/ui/theme/standard';
|
5
|
+
import { styleLoad } from '@/util';
|
6
|
+
|
7
|
+
import icon from '@svg/default.svg';
|
8
|
+
|
9
|
+
/**
|
10
|
+
* Theme manager
|
11
|
+
* @class
|
12
|
+
* @param {Object} customTheme - custom theme
|
13
|
+
* @ignore
|
14
|
+
*/
|
15
|
+
class Theme {
|
16
|
+
constructor(customTheme) {
|
17
|
+
this.styles = this._changeToObject(extend({}, standardTheme, customTheme));
|
18
|
+
styleLoad(this._styleMaker());
|
19
|
+
|
20
|
+
this._loadDefaultSvgIcon();
|
21
|
+
}
|
22
|
+
|
23
|
+
/**
|
24
|
+
* Get a Style cssText or StyleObject
|
25
|
+
* @param {string} type - style type
|
26
|
+
* @returns {string|object} - cssText or StyleObject
|
27
|
+
*/
|
28
|
+
// eslint-disable-next-line complexity
|
29
|
+
getStyle(type) {
|
30
|
+
let result = null;
|
31
|
+
const firstProperty = type.replace(/\..+$/, '');
|
32
|
+
const option = this.styles[type];
|
33
|
+
switch (type) {
|
34
|
+
case 'common.bi':
|
35
|
+
result = this.styles[type].image;
|
36
|
+
break;
|
37
|
+
case 'menu.icon':
|
38
|
+
result = {
|
39
|
+
active: this.styles[`${firstProperty}.activeIcon`],
|
40
|
+
normal: this.styles[`${firstProperty}.normalIcon`],
|
41
|
+
hover: this.styles[`${firstProperty}.hoverIcon`],
|
42
|
+
disabled: this.styles[`${firstProperty}.disabledIcon`],
|
43
|
+
};
|
44
|
+
break;
|
45
|
+
case 'submenu.icon':
|
46
|
+
result = {
|
47
|
+
active: this.styles[`${firstProperty}.activeIcon`],
|
48
|
+
normal: this.styles[`${firstProperty}.normalIcon`],
|
49
|
+
};
|
50
|
+
break;
|
51
|
+
case 'submenu.label':
|
52
|
+
result = {
|
53
|
+
active: this._makeCssText(this.styles[`${firstProperty}.activeLabel`]),
|
54
|
+
normal: this._makeCssText(this.styles[`${firstProperty}.normalLabel`]),
|
55
|
+
};
|
56
|
+
break;
|
57
|
+
case 'submenu.partition':
|
58
|
+
result = {
|
59
|
+
vertical: this._makeCssText(
|
60
|
+
extend({}, option, { borderLeft: `1px solid ${option.color}` })
|
61
|
+
),
|
62
|
+
horizontal: this._makeCssText(
|
63
|
+
extend({}, option, { borderBottom: `1px solid ${option.color}` })
|
64
|
+
),
|
65
|
+
};
|
66
|
+
break;
|
67
|
+
|
68
|
+
case 'range.disabledPointer':
|
69
|
+
case 'range.disabledBar':
|
70
|
+
case 'range.disabledSubbar':
|
71
|
+
case 'range.pointer':
|
72
|
+
case 'range.bar':
|
73
|
+
case 'range.subbar':
|
74
|
+
option.backgroundColor = option.color;
|
75
|
+
result = this._makeCssText(option);
|
76
|
+
break;
|
77
|
+
default:
|
78
|
+
result = this._makeCssText(option);
|
79
|
+
break;
|
80
|
+
}
|
81
|
+
|
82
|
+
return result;
|
83
|
+
}
|
84
|
+
|
85
|
+
/**
|
86
|
+
* Make css resource
|
87
|
+
* @returns {string} - serialized css text
|
88
|
+
* @private
|
89
|
+
*/
|
90
|
+
_styleMaker() {
|
91
|
+
const submenuLabelStyle = this.getStyle('submenu.label');
|
92
|
+
const submenuPartitionStyle = this.getStyle('submenu.partition');
|
93
|
+
|
94
|
+
return style({
|
95
|
+
subMenuLabelActive: submenuLabelStyle.active,
|
96
|
+
subMenuLabelNormal: submenuLabelStyle.normal,
|
97
|
+
submenuPartitionVertical: submenuPartitionStyle.vertical,
|
98
|
+
submenuPartitionHorizontal: submenuPartitionStyle.horizontal,
|
99
|
+
biSize: this.getStyle('common.bisize'),
|
100
|
+
subMenuRangeTitle: this.getStyle('range.title'),
|
101
|
+
submenuRangePointer: this.getStyle('range.pointer'),
|
102
|
+
submenuRangeBar: this.getStyle('range.bar'),
|
103
|
+
submenuRangeSubbar: this.getStyle('range.subbar'),
|
104
|
+
|
105
|
+
submenuDisabledRangePointer: this.getStyle('range.disabledPointer'),
|
106
|
+
submenuDisabledRangeBar: this.getStyle('range.disabledBar'),
|
107
|
+
submenuDisabledRangeSubbar: this.getStyle('range.disabledSubbar'),
|
108
|
+
|
109
|
+
submenuRangeValue: this.getStyle('range.value'),
|
110
|
+
submenuColorpickerTitle: this.getStyle('colorpicker.title'),
|
111
|
+
submenuColorpickerButton: this.getStyle('colorpicker.button'),
|
112
|
+
submenuCheckbox: this.getStyle('checkbox'),
|
113
|
+
menuIconSize: this.getStyle('menu.iconSize'),
|
114
|
+
submenuIconSize: this.getStyle('submenu.iconSize'),
|
115
|
+
menuIconStyle: this.getStyle('menu.icon'),
|
116
|
+
submenuIconStyle: this.getStyle('submenu.icon'),
|
117
|
+
});
|
118
|
+
}
|
119
|
+
|
120
|
+
/**
|
121
|
+
* Change to low dimensional object.
|
122
|
+
* @param {object} styleOptions - style object of user interface
|
123
|
+
* @returns {object} low level object for style apply
|
124
|
+
* @private
|
125
|
+
*/
|
126
|
+
_changeToObject(styleOptions) {
|
127
|
+
const styleObject = {};
|
128
|
+
forEach(styleOptions, (value, key) => {
|
129
|
+
const keyExplode = key.match(/^(.+)\.([a-z]+)$/i);
|
130
|
+
const [, property, subProperty] = keyExplode;
|
131
|
+
|
132
|
+
if (!styleObject[property]) {
|
133
|
+
styleObject[property] = {};
|
134
|
+
}
|
135
|
+
styleObject[property][subProperty] = value;
|
136
|
+
});
|
137
|
+
|
138
|
+
return styleObject;
|
139
|
+
}
|
140
|
+
|
141
|
+
/**
|
142
|
+
* Style object to Csstext serialize
|
143
|
+
* @param {object} styleObject - style object
|
144
|
+
* @returns {string} - css text string
|
145
|
+
* @private
|
146
|
+
*/
|
147
|
+
_makeCssText(styleObject) {
|
148
|
+
const converterStack = [];
|
149
|
+
|
150
|
+
forEach(styleObject, (value, key) => {
|
151
|
+
if (['backgroundImage'].indexOf(key) > -1 && value !== 'none') {
|
152
|
+
value = `url(${value})`;
|
153
|
+
}
|
154
|
+
|
155
|
+
converterStack.push(`${this._toUnderScore(key)}: ${value}`);
|
156
|
+
});
|
157
|
+
|
158
|
+
return converterStack.join(';');
|
159
|
+
}
|
160
|
+
|
161
|
+
/**
|
162
|
+
* Camel key string to Underscore string
|
163
|
+
* @param {string} targetString - change target
|
164
|
+
* @returns {string}
|
165
|
+
* @private
|
166
|
+
*/
|
167
|
+
_toUnderScore(targetString) {
|
168
|
+
return targetString.replace(/([A-Z])/g, ($0, $1) => `-${$1.toLowerCase()}`);
|
169
|
+
}
|
170
|
+
|
171
|
+
/**
|
172
|
+
* Load default svg icon
|
173
|
+
* @private
|
174
|
+
*/
|
175
|
+
_loadDefaultSvgIcon() {
|
176
|
+
if (!document.getElementById('tui-image-editor-svg-default-icons')) {
|
177
|
+
const parser = new DOMParser();
|
178
|
+
const encodedURI = icon.replace(/data:image\/svg\+xml;base64,/, '');
|
179
|
+
const dom = parser.parseFromString(atob(encodedURI), 'text/xml');
|
180
|
+
|
181
|
+
document.body.appendChild(dom.documentElement);
|
182
|
+
}
|
183
|
+
}
|
184
|
+
|
185
|
+
/**
|
186
|
+
* Make className for svg icon
|
187
|
+
* @param {string} iconType - normal' or 'active' or 'hover' or 'disabled
|
188
|
+
* @param {boolean} isSubmenu - submenu icon or not.
|
189
|
+
* @returns {string}
|
190
|
+
* @private
|
191
|
+
*/
|
192
|
+
_makeIconClassName(iconType, isSubmenu) {
|
193
|
+
const iconStyleInfo = isSubmenu ? this.getStyle('submenu.icon') : this.getStyle('menu.icon');
|
194
|
+
const { path, name } = iconStyleInfo[iconType];
|
195
|
+
|
196
|
+
return path && name ? iconType : `${iconType} use-default`;
|
197
|
+
}
|
198
|
+
|
199
|
+
/**
|
200
|
+
* Make svg use link path name
|
201
|
+
* @param {string} iconType - normal' or 'active' or 'hover' or 'disabled
|
202
|
+
* @param {boolean} isSubmenu - submenu icon or not.
|
203
|
+
* @returns {string}
|
204
|
+
* @private
|
205
|
+
*/
|
206
|
+
_makeSvgIconPrefix(iconType, isSubmenu) {
|
207
|
+
const iconStyleInfo = isSubmenu ? this.getStyle('submenu.icon') : this.getStyle('menu.icon');
|
208
|
+
const { path, name } = iconStyleInfo[iconType];
|
209
|
+
|
210
|
+
return path && name ? `${path}#${name}-` : '#';
|
211
|
+
}
|
212
|
+
|
213
|
+
/**
|
214
|
+
* Make svg use link path name
|
215
|
+
* @param {Array.<string>} useIconTypes - normal' or 'active' or 'hover' or 'disabled
|
216
|
+
* @param {string} menuName - menu name
|
217
|
+
* @param {boolean} isSubmenu - submenu icon or not.
|
218
|
+
* @returns {string}
|
219
|
+
* @private
|
220
|
+
*/
|
221
|
+
_makeSvgItem(useIconTypes, menuName, isSubmenu) {
|
222
|
+
return useIconTypes
|
223
|
+
.map((iconType) => {
|
224
|
+
const svgIconPrefix = this._makeSvgIconPrefix(iconType, isSubmenu);
|
225
|
+
const iconName = this._toUnderScore(menuName);
|
226
|
+
const svgIconClassName = this._makeIconClassName(iconType, isSubmenu);
|
227
|
+
|
228
|
+
return `<use xlink:href="${svgIconPrefix}ic-${iconName}" class="${svgIconClassName}"/>`;
|
229
|
+
})
|
230
|
+
.join('');
|
231
|
+
}
|
232
|
+
|
233
|
+
/**
|
234
|
+
* Make svg icon set
|
235
|
+
* @param {Array.<string>} useIconTypes - normal' or 'active' or 'hover' or 'disabled
|
236
|
+
* @param {string} menuName - menu name
|
237
|
+
* @param {boolean} isSubmenu - submenu icon or not.
|
238
|
+
* @returns {string}
|
239
|
+
*/
|
240
|
+
makeMenSvgIconSet(useIconTypes, menuName, isSubmenu = false) {
|
241
|
+
return `<svg class="svg_ic-${isSubmenu ? 'submenu' : 'menu'}">${this._makeSvgItem(
|
242
|
+
useIconTypes,
|
243
|
+
menuName,
|
244
|
+
isSubmenu
|
245
|
+
)}</svg>`;
|
246
|
+
}
|
247
|
+
}
|
248
|
+
|
249
|
+
export default Theme;
|