@smart-factor/gem-ui-components 0.0.56 → 0.0.58
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/dist/{Drawer-D8kHnT0B.js → Drawer-d8461jqd.js} +115 -115
- package/dist/SignEditor.js +72298 -0
- package/dist/{Stack-Dr1yNuib.js → Stack-ThmeJzqr.js} +65 -65
- package/dist/{Tree-B4Bd33fe.js → Tree-D_Zjc1fk.js} +711 -774
- package/dist/assets/SignEditor.css +1 -0
- package/dist/components/Drawer/index.js +1 -1
- package/dist/components/SignEditor/SignEditor.d.ts +8 -0
- package/dist/components/SignEditor/SignEditor.stories.d.ts +6 -0
- package/dist/components/SignEditor/SignEditor.styles.d.ts +33 -0
- package/dist/components/SignEditor/SignEditorCanvas.d.ts +7 -0
- package/dist/components/SignEditor/SignEditorCanvasHeader.d.ts +7 -0
- package/dist/components/SignEditor/SignEditorContext.d.ts +9 -0
- package/dist/components/SignEditor/SignEditorContextProvider.d.ts +7 -0
- package/dist/components/SignEditor/SignEditorEditDialog.d.ts +12 -0
- package/dist/components/SignEditor/SignEditorImage.d.ts +16 -0
- package/dist/components/SignEditor/SignEditorImagesList.d.ts +11 -0
- package/dist/components/SignEditor/SignEditorPicker.d.ts +1 -0
- package/dist/components/SignEditor/SignEditorPickerSigns.d.ts +1 -0
- package/dist/components/SignEditor/SignEditorPickerStencils.d.ts +1 -0
- package/dist/components/SignEditor/SignEditorSaveDialog.d.ts +10 -0
- package/dist/components/SignEditor/index.d.ts +3 -0
- package/dist/components/SignEditor/useIsNameUnique.d.ts +1 -0
- package/dist/components/SignEditor/useOnSvgSelected.d.ts +3 -0
- package/dist/components/SignEditor/useSaveStencil.d.ts +9 -0
- package/dist/components/SignEditor/useSvgMount.d.ts +2 -0
- package/dist/components/Tree/index.js +1 -1
- package/dist/extensions/ext-connector/ext-connector.js +11 -0
- package/dist/extensions/ext-connector/ext-connector.js.map +1 -0
- package/dist/extensions/ext-eyedropper/ext-eyedropper.js +11 -0
- package/dist/extensions/ext-eyedropper/ext-eyedropper.js.map +1 -0
- package/dist/extensions/ext-grid/ext-grid.js +10 -0
- package/dist/extensions/ext-grid/ext-grid.js.map +1 -0
- package/dist/extensions/ext-helloworld/ext-helloworld.js +10 -0
- package/dist/extensions/ext-helloworld/ext-helloworld.js.map +1 -0
- package/dist/extensions/ext-layer_view/ext-layer_view.js +9 -0
- package/dist/extensions/ext-layer_view/ext-layer_view.js.map +1 -0
- package/dist/extensions/ext-markers/ext-markers.js +30 -0
- package/dist/extensions/ext-markers/ext-markers.js.map +1 -0
- package/dist/extensions/ext-opensave/ext-opensave.js +2 -0
- package/dist/extensions/ext-opensave/ext-opensave.js.map +1 -0
- package/dist/extensions/ext-overview_window/ext-overview_window.js +11 -0
- package/dist/extensions/ext-overview_window/ext-overview_window.js.map +1 -0
- package/dist/extensions/ext-panning/ext-panning.js +10 -0
- package/dist/extensions/ext-panning/ext-panning.js.map +1 -0
- package/dist/extensions/ext-polystar/ext-polystar.js +11 -0
- package/dist/extensions/ext-polystar/ext-polystar.js.map +1 -0
- package/dist/extensions/ext-shapes/ext-shapes.js +10 -0
- package/dist/extensions/ext-shapes/ext-shapes.js.map +1 -0
- package/dist/extensions/ext-shapes/shapelib/animal.json +21 -0
- package/dist/extensions/ext-shapes/shapelib/arrow.json +28 -0
- package/dist/extensions/ext-shapes/shapelib/basic.json +32 -0
- package/dist/extensions/ext-shapes/shapelib/dialog_balloon.json +9 -0
- package/dist/extensions/ext-shapes/shapelib/electronics.json +20 -0
- package/dist/extensions/ext-shapes/shapelib/flowchart.json +25 -0
- package/dist/extensions/ext-shapes/shapelib/game.json +13 -0
- package/dist/extensions/ext-shapes/shapelib/index.json +18 -0
- package/dist/extensions/ext-shapes/shapelib/license-MIT-raphael.txt +12 -0
- package/dist/extensions/ext-shapes/shapelib/math.json +9 -0
- package/dist/extensions/ext-shapes/shapelib/misc.json +37 -0
- package/dist/extensions/ext-shapes/shapelib/music.json +21 -0
- package/dist/extensions/ext-shapes/shapelib/object.json +18 -0
- package/dist/extensions/ext-shapes/shapelib/raphael_1.json +65 -0
- package/dist/extensions/ext-shapes/shapelib/raphael_2.json +64 -0
- package/dist/extensions/ext-shapes/shapelib/symbol.json +28 -0
- package/dist/extensions/ext-storage/ext-storage.js +23 -0
- package/dist/extensions/ext-storage/ext-storage.js.map +1 -0
- package/dist/fonts/roadsign-condensed.ttf +0 -0
- package/dist/fonts/roadsign-normal.ttf +0 -0
- package/dist/licenses.txt +1034 -172
- package/dist/main.js +2402 -38744
- package/dist/svgedit-assets/images/add_subpath.svg +16 -0
- package/dist/svgedit-assets/images/align.svg +5 -0
- package/dist/svgedit-assets/images/align_bottom.svg +1 -0
- package/dist/svgedit-assets/images/align_center.svg +1 -0
- package/dist/svgedit-assets/images/align_distrib_horiz.svg +1 -0
- package/dist/svgedit-assets/images/align_distrib_verti.svg +1 -0
- package/dist/svgedit-assets/images/align_left.svg +1 -0
- package/dist/svgedit-assets/images/align_middle.svg +1 -0
- package/dist/svgedit-assets/images/align_right.svg +1 -0
- package/dist/svgedit-assets/images/align_top.svg +1 -0
- package/dist/svgedit-assets/images/anchor_end.svg +8 -0
- package/dist/svgedit-assets/images/anchor_middle.svg +8 -0
- package/dist/svgedit-assets/images/anchor_start.svg +8 -0
- package/dist/svgedit-assets/images/angle.svg +1 -0
- package/dist/svgedit-assets/images/arrow_down.svg +3 -0
- package/dist/svgedit-assets/images/arrow_right.svg +3 -0
- package/dist/svgedit-assets/images/arrow_right_big.svg +3 -0
- package/dist/svgedit-assets/images/blur.svg +1 -0
- package/dist/svgedit-assets/images/bold.svg +8 -0
- package/dist/svgedit-assets/images/box.svg +3 -0
- package/dist/svgedit-assets/images/box_o.svg +3 -0
- package/dist/svgedit-assets/images/c_radius.svg +5 -0
- package/dist/svgedit-assets/images/cancel.svg +9 -0
- package/dist/svgedit-assets/images/circle.svg +1 -0
- package/dist/svgedit-assets/images/clone.svg +1 -0
- package/dist/svgedit-assets/images/close_path.svg +14 -0
- package/dist/svgedit-assets/images/closepath_icons.svg +41 -0
- package/dist/svgedit-assets/images/config.svg +1 -0
- package/dist/svgedit-assets/images/conn.svg +1 -0
- package/dist/svgedit-assets/images/context_menu.svg +9 -0
- package/dist/svgedit-assets/images/cursors/circle_cursor.svg +14 -0
- package/dist/svgedit-assets/images/cursors/ellipse_cursor.svg +14 -0
- package/dist/svgedit-assets/images/cursors/rect_cursor.svg +14 -0
- package/dist/svgedit-assets/images/cursors/square_cursor.svg +13 -0
- package/dist/svgedit-assets/images/delete.svg +1 -0
- package/dist/svgedit-assets/images/docprop.svg +1 -0
- package/dist/svgedit-assets/images/docprops.svg +19 -0
- package/dist/svgedit-assets/images/editPref.svg +1 -0
- package/dist/svgedit-assets/images/edit_foreign.svg +57 -0
- package/dist/svgedit-assets/images/ellipse.svg +1 -0
- package/dist/svgedit-assets/images/export.svg +1 -0
- package/dist/svgedit-assets/images/eye.svg +12 -0
- package/dist/svgedit-assets/images/eye_dropper.svg +1 -0
- package/dist/svgedit-assets/images/fh_ellipse.svg +1 -0
- package/dist/svgedit-assets/images/fh_rect.svg +1 -0
- package/dist/svgedit-assets/images/fill.svg +8 -0
- package/dist/svgedit-assets/images/fontsize.svg +4 -0
- package/dist/svgedit-assets/images/forwardslash.svg +3 -0
- package/dist/svgedit-assets/images/globe_link.svg +1 -0
- package/dist/svgedit-assets/images/go_down.svg +9 -0
- package/dist/svgedit-assets/images/go_up.svg +9 -0
- package/dist/svgedit-assets/images/grid.svg +1 -0
- package/dist/svgedit-assets/images/group_elements.svg +1 -0
- package/dist/svgedit-assets/images/handle.svg +1 -0
- package/dist/svgedit-assets/images/height.svg +3 -0
- package/dist/svgedit-assets/images/hello_world.svg +11 -0
- package/dist/svgedit-assets/images/image.svg +1 -0
- package/dist/svgedit-assets/images/imagelib.svg +10 -0
- package/dist/svgedit-assets/images/import.svg +10 -0
- package/dist/svgedit-assets/images/importImg.svg +1 -0
- package/dist/svgedit-assets/images/italic.svg +8 -0
- package/dist/svgedit-assets/images/layer_view.svg +6 -0
- package/dist/svgedit-assets/images/leftarrow.svg +3 -0
- package/dist/svgedit-assets/images/leftarrow_o.svg +3 -0
- package/dist/svgedit-assets/images/letter_spacing.svg +17 -0
- package/dist/svgedit-assets/images/library.svg +1 -0
- package/dist/svgedit-assets/images/linecap_butt.svg +1 -0
- package/dist/svgedit-assets/images/linecap_round.svg +1 -0
- package/dist/svgedit-assets/images/linecap_square.svg +1 -0
- package/dist/svgedit-assets/images/linejoin_bevel.svg +1 -0
- package/dist/svgedit-assets/images/linejoin_miter.svg +1 -0
- package/dist/svgedit-assets/images/linejoin_round.svg +1 -0
- package/dist/svgedit-assets/images/link_controls.svg +7 -0
- package/dist/svgedit-assets/images/logo.svg +25 -0
- package/dist/svgedit-assets/images/mcircle.svg +3 -0
- package/dist/svgedit-assets/images/mcircle_o.svg +3 -0
- package/dist/svgedit-assets/images/mkr_markers_dimension.svg +7 -0
- package/dist/svgedit-assets/images/mkr_markers_label.svg +5 -0
- package/dist/svgedit-assets/images/mkr_markers_off.svg +3 -0
- package/dist/svgedit-assets/images/move_bottom.svg +1 -0
- package/dist/svgedit-assets/images/move_top.svg +1 -0
- package/dist/svgedit-assets/images/netlify-dark.svg +17 -0
- package/dist/svgedit-assets/images/new.svg +1 -0
- package/dist/svgedit-assets/images/no_color.svg +4 -0
- package/dist/svgedit-assets/images/node_clone.svg +8 -0
- package/dist/svgedit-assets/images/node_delete.svg +10 -0
- package/dist/svgedit-assets/images/nomarker.svg +3 -0
- package/dist/svgedit-assets/images/ok.svg +9 -0
- package/dist/svgedit-assets/images/opacity.svg +12 -0
- package/dist/svgedit-assets/images/open.svg +1 -0
- package/dist/svgedit-assets/images/open_path.svg +17 -0
- package/dist/svgedit-assets/images/openpath.png +0 -0
- package/dist/svgedit-assets/images/panning.svg +1 -0
- package/dist/svgedit-assets/images/path.svg +1 -0
- package/dist/svgedit-assets/images/pen.svg +1 -0
- package/dist/svgedit-assets/images/pencil.svg +1 -0
- package/dist/svgedit-assets/images/polygon.svg +1 -0
- package/dist/svgedit-assets/images/rect.svg +1 -0
- package/dist/svgedit-assets/images/redo.svg +1 -0
- package/dist/svgedit-assets/images/reorient.svg +1 -0
- package/dist/svgedit-assets/images/reverseslash.svg +3 -0
- package/dist/svgedit-assets/images/rightarrow.svg +3 -0
- package/dist/svgedit-assets/images/rightarrow_o.svg +3 -0
- package/dist/svgedit-assets/images/rotate.svg +4 -0
- package/dist/svgedit-assets/images/save.svg +16 -0
- package/dist/svgedit-assets/images/saveImg.svg +1 -0
- package/dist/svgedit-assets/images/select.svg +1 -0
- package/dist/svgedit-assets/images/select_node.svg +4 -0
- package/dist/svgedit-assets/images/shapelib.svg +1 -0
- package/dist/svgedit-assets/images/source.svg +1 -0
- package/dist/svgedit-assets/images/square.svg +1 -0
- package/dist/svgedit-assets/images/star.svg +1 -0
- package/dist/svgedit-assets/images/star_o.svg +3 -0
- package/dist/svgedit-assets/images/stroke.svg +3 -0
- package/dist/svgedit-assets/images/svg-edit-home.svg +26 -0
- package/dist/svgedit-assets/images/text.svg +1 -0
- package/dist/svgedit-assets/images/text_decoration_linethrough.svg +6 -0
- package/dist/svgedit-assets/images/text_decoration_overline.svg +6 -0
- package/dist/svgedit-assets/images/text_decoration_underline.svg +6 -0
- package/dist/svgedit-assets/images/text_length.svg +19 -0
- package/dist/svgedit-assets/images/textmarker.svg +3 -0
- package/dist/svgedit-assets/images/textmarker_bottom.svg +3 -0
- package/dist/svgedit-assets/images/textmarker_top.svg +3 -0
- package/dist/svgedit-assets/images/to_path.svg +1 -0
- package/dist/svgedit-assets/images/tool_add_subpath.svg +1 -0
- package/dist/svgedit-assets/images/tool_foreign.svg +30 -0
- package/dist/svgedit-assets/images/tool_imagelib.svg +10 -0
- package/dist/svgedit-assets/images/tool_node_clone.svg +1 -0
- package/dist/svgedit-assets/images/tool_node_delete.svg +1 -0
- package/dist/svgedit-assets/images/tool_node_link.svg +1 -0
- package/dist/svgedit-assets/images/tool_openclose_path.svg +1 -0
- package/dist/svgedit-assets/images/tool_placemark.svg +11 -0
- package/dist/svgedit-assets/images/triangle.svg +3 -0
- package/dist/svgedit-assets/images/triangle_o.svg +3 -0
- package/dist/svgedit-assets/images/undo.svg +1 -0
- package/dist/svgedit-assets/images/ungroup.svg +21 -0
- package/dist/svgedit-assets/images/unlink_use.svg +14 -0
- package/dist/svgedit-assets/images/verticalslash.svg +3 -0
- package/dist/svgedit-assets/images/warning.svg +11 -0
- package/dist/svgedit-assets/images/webappfind.svg +23 -0
- package/dist/svgedit-assets/images/width.svg +3 -0
- package/dist/svgedit-assets/images/wireframe.svg +1 -0
- package/dist/svgedit-assets/images/word_spacing.svg +15 -0
- package/dist/svgedit-assets/images/xmark.svg +3 -0
- package/dist/svgedit-assets/images/zoom.svg +1 -0
- package/dist/theme-BzEoBwfH.js +37291 -0
- package/dist/useFormControl-Cj8rSR6R.js +68 -0
- package/package.json +29 -5
- package/dist/components/AccordionSummary/AccordionSummary.d.ts +0 -7
- package/dist/components/AccordionSummary/AccordionSummary.stories.d.ts +0 -8
- package/dist/components/AccordionSummary/AccordionSummary.styles.d.ts +0 -7
- package/dist/components/Button/Button.d.ts +0 -8
- package/dist/components/Button/Button.stories.d.ts +0 -8
- package/dist/components/Button/Button.styles.d.ts +0 -6
- package/dist/components/Button/ButtonAdd.d.ts +0 -3
- package/dist/components/ButtonWithIcon/ButtonWithIcon.d.ts +0 -10
- package/dist/components/ButtonWithIcon/ButtonWithIcon.stories.d.ts +0 -7
- package/dist/components/Dialog/Dialog.d.ts +0 -3
- package/dist/components/Dialog/Dialog.stories.d.ts +0 -7
- package/dist/components/Dialog/Dialog.styles.d.ts +0 -11
- package/dist/components/Dialog/index.d.ts +0 -2
- package/dist/components/Dialog/types.d.ts +0 -9
- package/dist/components/Drawer/Drawer.d.ts +0 -15
- package/dist/components/Drawer/Drawer.stories.d.ts +0 -8
- package/dist/components/Drawer/DrawerContent.d.ts +0 -6
- package/dist/components/Drawer/DrawerFooter.d.ts +0 -6
- package/dist/components/Drawer/DrawerHeader.d.ts +0 -7
- package/dist/components/Drawer/index.d.ts +0 -1
- package/dist/components/Dropzone/Dropzone.d.ts +0 -7
- package/dist/components/Dropzone/Dropzone.stories.d.ts +0 -9
- package/dist/components/Dropzone/Dropzone.styles.d.ts +0 -17
- package/dist/components/Dropzone/DropzoneField.d.ts +0 -12
- package/dist/components/Dropzone/const.d.ts +0 -12
- package/dist/components/Dropzone/index.d.ts +0 -3
- package/dist/components/ElementsPicker/ElementsPicker.d.ts +0 -8
- package/dist/components/ElementsPicker/ElementsPicker.stories.d.ts +0 -8
- package/dist/components/ElementsPicker/ElementsPickerElement.d.ts +0 -9
- package/dist/components/ElementsPicker/index.d.ts +0 -2
- package/dist/components/FixedActionsBottomPanel/FixedActionsBottomPanel.d.ts +0 -18
- package/dist/components/FixedActionsBottomPanel/FixedActionsBottomPanel.stories.d.ts +0 -13
- package/dist/components/FixedActionsBottomPanel/FixedActionsBottomPanel.styles.d.ts +0 -6
- package/dist/components/FormComponents/Autocomplete/Autocomplete.d.ts +0 -4
- package/dist/components/FormComponents/Autocomplete/Autocomplete.stories.d.ts +0 -11
- package/dist/components/FormComponents/Autocomplete/Autocomplete.styles.d.ts +0 -7
- package/dist/components/FormComponents/Autocomplete/index.d.ts +0 -2
- package/dist/components/FormComponents/Autocomplete/types.d.ts +0 -27
- package/dist/components/FormComponents/ContextualSearch/ContextualSearch.d.ts +0 -40
- package/dist/components/FormComponents/ContextualSearch/ContextualSearch.stories.d.ts +0 -15
- package/dist/components/FormComponents/ContextualSearch/ContextualSearch.styles.d.ts +0 -4
- package/dist/components/FormComponents/ContextualSearch/ContextualSearchControlled.d.ts +0 -9
- package/dist/components/FormComponents/ContextualSearch/ContextualSearchListListbox.d.ts +0 -7
- package/dist/components/FormComponents/ContextualSearch/index.d.ts +0 -2
- package/dist/components/FormComponents/ContextualSearch/mock.d.ts +0 -13
- package/dist/components/FormComponents/DatePicker/DatePicker.d.ts +0 -12
- package/dist/components/FormComponents/DatePicker/DatePicker.stories.d.ts +0 -9
- package/dist/components/FormComponents/DatePicker/DatePicker.styles.d.ts +0 -7
- package/dist/components/FormComponents/DateTimePicker/DateTimePicker.d.ts +0 -12
- package/dist/components/FormComponents/DateTimePicker/DateTimePicker.stories.d.ts +0 -9
- package/dist/components/FormComponents/DateTimePicker/DateTimePicker.styles.d.ts +0 -7
- package/dist/components/FormComponents/Input/Input.d.ts +0 -11
- package/dist/components/FormComponents/Input/Input.stories.d.ts +0 -11
- package/dist/components/FormComponents/Input/Input.styles.d.ts +0 -3
- package/dist/components/FormComponents/RadioChips/RadioChips.d.ts +0 -21
- package/dist/components/FormComponents/RadioChips/RadioChips.stories.d.ts +0 -9
- package/dist/components/FormComponents/RadioChips/RadioChips.styles.d.ts +0 -10
- package/dist/components/FormComponents/SearchInput/SearchInput.d.ts +0 -11
- package/dist/components/FormComponents/SearchInput/SearchInput.stories.d.ts +0 -9
- package/dist/components/FormComponents/SearchInput/SearchInput.styles.d.ts +0 -1
- package/dist/components/FormComponents/Select/Select.d.ts +0 -30
- package/dist/components/FormComponents/Select/Select.stories.d.ts +0 -11
- package/dist/components/FormComponents/Select/Select.styles.d.ts +0 -4
- package/dist/components/FormComponents/index.d.ts +0 -9
- package/dist/components/Grid/Grid.d.ts +0 -4
- package/dist/components/Grid/index.d.ts +0 -2
- package/dist/components/Grid/types.d.ts +0 -40
- package/dist/components/Grid/useGridInitialState.d.ts +0 -6
- package/dist/components/LoadingBackdrop/LoadingBackdrop.d.ts +0 -7
- package/dist/components/LoadingBackdrop/LoadingBackdrop.stories.d.ts +0 -7
- package/dist/components/LoadingBackdrop/index.d.ts +0 -1
- package/dist/components/ResizableWrapper/ResizableWrapper.d.ts +0 -11
- package/dist/components/ResizableWrapper/ResizableWrapper.stories.d.ts +0 -7
- package/dist/components/ResizableWrapper/ResizableWrapper.styles.d.ts +0 -10
- package/dist/components/SimpleAutocomplete/SimpleAutocomplete.d.ts +0 -9
- package/dist/components/SimpleAutocomplete/SimpleAutocomplete.stories.d.ts +0 -11
- package/dist/components/SimpleAutocomplete/index.d.ts +0 -1
- package/dist/components/SimpleInput/SimpleInput.d.ts +0 -6
- package/dist/components/SimpleInput/SimpleInput.stories.d.ts +0 -7
- package/dist/components/SimpleSelect/SimpleSelect.d.ts +0 -14
- package/dist/components/SimpleSelect/SimpleSelect.stories.d.ts +0 -7
- package/dist/components/Stepper/Stepper.d.ts +0 -13
- package/dist/components/Stepper/Stepper.stories.d.ts +0 -7
- package/dist/components/Stepper/Stepper.styles.d.ts +0 -9
- package/dist/components/StickyContainer/StickyContainer.d.ts +0 -7
- package/dist/components/StickyContainer/StickyContainer.stories.d.ts +0 -7
- package/dist/components/StickyContainer/StickyContainer.styles.d.ts +0 -7
- package/dist/components/TableComponents/ContextMenu/ContextMenu.d.ts +0 -6
- package/dist/components/TableComponents/ContextMenu/ContextMenu.stories.d.ts +0 -7
- package/dist/components/TableComponents/ContextMenu/ContextMenu.styles.d.ts +0 -1
- package/dist/components/TableComponents/ContextMenu/ContextMenuContext.d.ts +0 -7
- package/dist/components/TableComponents/ContextMenu/ContextMenuItem.d.ts +0 -8
- package/dist/components/TableComponents/ContextMenu/ContextMenuPropsContext/ContextMenuPropsContext.d.ts +0 -6
- package/dist/components/TableComponents/ContextMenu/ContextMenuPropsContext/useContextMenuProps.d.ts +0 -3
- package/dist/components/TableComponents/ContextMenu/index.d.ts +0 -2
- package/dist/components/TableComponents/TableActions/TableActions.d.ts +0 -7
- package/dist/components/TableComponents/TableActions/TableActions.stories.d.ts +0 -7
- package/dist/components/TableComponents/TableActions/index.d.ts +0 -2
- package/dist/components/TableComponents/TableCustomToolbar/TableCustomToolbar.d.ts +0 -10
- package/dist/components/TableComponents/TableCustomToolbar/index.d.ts +0 -1
- package/dist/components/TableComponents/TableExportButton/TableExportButton.d.ts +0 -9
- package/dist/components/TableComponents/TableExportButton/index.d.ts +0 -1
- package/dist/components/TableComponents/TableRecord/TableRecord.d.ts +0 -8
- package/dist/components/TableComponents/TableRecord/index.d.ts +0 -1
- package/dist/components/TableComponents/TableWithPagination/TableWithPagination.d.ts +0 -4
- package/dist/components/TableComponents/TableWithPagination/TableWithPagination.stories.d.ts +0 -13
- package/dist/components/TableComponents/TableWithPagination/TableWithPaginationExport.d.ts +0 -0
- package/dist/components/TableComponents/TableWithPagination/TableWrapper.d.ts +0 -8
- package/dist/components/TableComponents/TableWithPagination/types.d.ts +0 -53
- package/dist/components/TableComponents/index.d.ts +0 -5
- package/dist/components/TabsPanel/TabsPanel.d.ts +0 -14
- package/dist/components/TabsPanel/TabsPanel.stories.d.ts +0 -7
- package/dist/components/TabsPanel/TabsPanel.styles.d.ts +0 -8
- package/dist/components/Toast/Toast.stories.d.ts +0 -7
- package/dist/components/Toast/Toast.styles.d.ts +0 -12
- package/dist/components/Toast/ToastContent.d.ts +0 -4
- package/dist/components/Toast/errorToast.d.ts +0 -1
- package/dist/components/Toast/index.d.ts +0 -2
- package/dist/components/Toast/successToast.d.ts +0 -1
- package/dist/components/Tree/Tree.d.ts +0 -18
- package/dist/components/Tree/Tree.stories.d.ts +0 -7
- package/dist/components/Tree/index.d.ts +0 -1
- package/dist/consts/data-grid.d.ts +0 -122
- package/dist/helpers/columns/getBooleanColumn.d.ts +0 -6
- package/dist/helpers/columns/getDateColumn.d.ts +0 -6
- package/dist/helpers/columns/getDateTimeColumn.d.ts +0 -6
- package/dist/helpers/columns/getNumericColumn.d.ts +0 -6
- package/dist/helpers/columns/getStaticColumn.d.ts +0 -6
- package/dist/helpers/columns/getStringColumn.d.ts +0 -6
- package/dist/helpers/columns/index.d.ts +0 -6
- package/dist/helpers/date/formatDate.d.ts +0 -3
- package/dist/helpers/date/formatDateTime.d.ts +0 -3
- package/dist/helpers/date/index.d.ts +0 -2
- package/dist/helpers/index.d.ts +0 -2
- package/dist/hooks/index.d.ts +0 -4
- package/dist/hooks/useContextMenu.d.ts +0 -8
- package/dist/hooks/useDataGridInitialState.d.ts +0 -6
- package/dist/hooks/useDataGridState.d.ts +0 -9
- package/dist/hooks/useGetFileUrl.d.ts +0 -5
- package/dist/hooks/useKeepDefinedValue.d.ts +0 -1
- package/dist/hooks/useScrollPosition.d.ts +0 -2
- package/dist/providers/GemUIComponentsProvider.d.ts +0 -4
- package/dist/providers/ToasterProvider.d.ts +0 -1
- package/dist/theme/theme.d.ts +0 -19
- package/dist/types/function.d.ts +0 -1
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file ext-markers.js
|
|
3
|
+
*
|
|
4
|
+
* @license Apache-2.0
|
|
5
|
+
*
|
|
6
|
+
* @copyright 2010 Will Schleter based on ext-arrows.js by Copyright(c) 2010 Alexis Deveria
|
|
7
|
+
* @copyright 2021 OptimistikSAS
|
|
8
|
+
*
|
|
9
|
+
* This extension provides for the addition of markers to the either end
|
|
10
|
+
* or the middle of a line, polyline, path, polygon.
|
|
11
|
+
*
|
|
12
|
+
* Markers are graphics
|
|
13
|
+
*
|
|
14
|
+
* to simplify the coding and make the implementation as robust as possible,
|
|
15
|
+
* markers are not shared - every object has its own set of markers.
|
|
16
|
+
* this relationship is maintained by a naming convention between the
|
|
17
|
+
* ids of the markers and the ids of the object
|
|
18
|
+
*
|
|
19
|
+
* The following restrictions exist for simplicty of use and programming
|
|
20
|
+
* objects and their markers to have the same color
|
|
21
|
+
* marker size is fixed
|
|
22
|
+
* an application specific attribute - se_type - is added to each marker element
|
|
23
|
+
* to store the type of marker
|
|
24
|
+
*
|
|
25
|
+
* @todo
|
|
26
|
+
* remove some of the restrictions above
|
|
27
|
+
*
|
|
28
|
+
*/
|
|
29
|
+
var t={name:"markers",async init(){const{svgCanvas:t}=this,{BatchCommand:e,RemoveElementCommand:r,InsertElementCommand:n}=t.history,{$id:i,addSVGElementsFromJson:a}=t,s=["start","mid","end"],o=["line","path","polyline","polygon"],l={nomarker:{},leftarrow:{element:"path",attr:{d:"M0,50 L100,90 L70,50 L100,10 Z"}},rightarrow:{element:"path",attr:{d:"M100,50 L0,90 L30,50 L0,10 Z"}},box:{element:"path",attr:{d:"M20,20 L20,80 L80,80 L80,20 Z"}},mcircle:{element:"circle",attr:{r:30,cx:50,cy:50}}};["leftarrow","rightarrow","box","mcircle"].forEach((t=>{l[t+"_o"]=l[t]}));const getLinked=(e,r)=>{const n=e.getAttribute(r);if(!n)return null;const i=n.match(/\(#(.*)\)/);return i&&2===i.length?t.getElement(i[1]):null},showPanel=(t,e)=>{i("marker_panel").style.display=t?"block":"none",t&&e&&s.forEach((t=>{const r=getLinked(e,"marker-"+t);r?.attributes?.se_type?i(`${t}_marker_list_opts`).setAttribute("value",r.attributes.se_type.value):i(`${t}_marker_list_opts`).setAttribute("value","nomarker")}))},addMarker=(e,r)=>{const n=t.getSelectedElements();let i=t.getElement(e);if(i)return;if(""===r||"nomarker"===r)return;const s=n[0].getAttribute("stroke");if(!l[r])return void console.error(`unknown marker type: ${r}`);i=a({element:"marker",attr:{id:e,markerUnits:"strokeWidth",orient:"auto",style:"pointer-events:none",se_type:r}});const o=a(l[r]),m="_o"===r.substr(-2)?"none":s;return o.setAttribute("fill",m),o.setAttribute("stroke",s),o.setAttribute("stroke-width",10),i.append(o),i.setAttribute("viewBox","0 0 100 100"),i.setAttribute("markerWidth",5),i.setAttribute("markerHeight",5),i.setAttribute("refX",50),i.setAttribute("refY",50),t.findDefs().append(i),i},setMarker=(i,o)=>{const l=t.getSelectedElements();if(0===l.length)return;const m="marker-"+i,c=l[0],u=getLinked(c,m);u&&u.remove(),c.removeAttribute(m);let d=o;if(""===d&&(d="nomarker"),"nomarker"===d)return void t.call("changed",l);const b="mkr_"+i+"_"+c.id;addMarker(b,d),t.changeSelectedAttribute(m,"url(#"+b+")"),"line"===c.tagName&&"mid"===i&&(i=>{if("line"!==i.tagName)return i;const o=Number(i.getAttribute("x1")),l=Number(i.getAttribute("x2")),m=Number(i.getAttribute("y1")),c=Number(i.getAttribute("y2")),{id:u}=i,d=a({element:"polyline",attr:{points:o+","+m+" "+(o+l)/2+","+(m+c)/2+" "+l+","+c,stroke:i.getAttribute("stroke"),"stroke-width":i.getAttribute("stroke-width"),fill:"none",opacity:i.getAttribute("opacity")||1}});s.forEach((t=>{const e="marker-"+t;i.getAttribute(e)&&d.setAttribute(e,i.getAttribute(e))}));const b=new e;b.addSubCommand(new r(i,i.parentNode)),b.addSubCommand(new n(d)),i.insertAdjacentElement("afterend",d),i.remove(),t.clearSelection(),d.id=u,t.addToSelection([d]),t.addCommandToHistory(b)})(c),t.call("changed",l)};return{name:this.i18next.t(`${name}:name`),callback(){const t=document.createElement("template");let e='<div id="marker_panel">';s.forEach((t=>{e+=`<se-list id="${t}_marker_list_opts" title="tools.${t}_marker_list_opts" label="" width="22px" height="22px">`,Object.entries(l).forEach((r=>{let[n,i]=r;e+=`<se-list-item id="mkr_${t}_${n}" value="${n}" title="tools.mkr_${n}" src="${n}.svg" img-height="22px"></se-list-item>`})),e+="</se-list>"})),e+="</div>",t.innerHTML=e,i("tools_top").appendChild(t.content.cloneNode(!0)),showPanel(!1),s.forEach((t=>{i(`${t}_marker_list_opts`).addEventListener("change",(e=>{setMarker(t,e.detail.value)}))}))},selectedChanged(t){0===t.elems.length&&showPanel(!1),t.elems.forEach((e=>{e&&o.includes(e.tagName)&&t.selectedElement&&!t.multiselected?showPanel(!0,e):showPanel(!1)}))},elementChanged(e){const r=e.elems[0];r&&(r.getAttribute("marker-start")||r.getAttribute("marker-mid")||r.getAttribute("marker-end"))&&((t=>{const e=t.getAttribute("stroke");s.forEach((r=>{const n=getLinked(t,"marker-"+r);if(!n)return;if(!n.attributes.se_type)return;const i=n.lastElementChild;if(!i)return;const a=i.getAttribute("fill"),s=i.getAttribute("stroke");a&&"none"!==a&&i.setAttribute("fill",e),s&&"none"!==s&&i.setAttribute("stroke",e)}))})(r),(e=>{const r=t.getSelectedElements();s.forEach((n=>{const i="marker-"+n,a=getLinked(e,i);if(!a||!a.attributes.se_type)return;const s=e.getAttribute(i);if(s){const o=e.id.length,l=s.substr(-o-1,o);if(e.id!==l){const s="mkr_"+n+"_"+e.id;addMarker(s,a.attributes.se_type.value),t.changeSelectedAttribute(i,"url(#"+s+")"),t.call("changed",r)}}}))})(r))}}}};export{t as default};
|
|
30
|
+
//# sourceMappingURL=ext-markers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ext-markers.js","sources":["../../../../src/editor/extensions/ext-markers/ext-markers.js"],"sourcesContent":["/**\n * @file ext-markers.js\n *\n * @license Apache-2.0\n *\n * @copyright 2010 Will Schleter based on ext-arrows.js by Copyright(c) 2010 Alexis Deveria\n * @copyright 2021 OptimistikSAS\n *\n * This extension provides for the addition of markers to the either end\n * or the middle of a line, polyline, path, polygon.\n *\n * Markers are graphics\n *\n * to simplify the coding and make the implementation as robust as possible,\n * markers are not shared - every object has its own set of markers.\n * this relationship is maintained by a naming convention between the\n * ids of the markers and the ids of the object\n *\n * The following restrictions exist for simplicty of use and programming\n * objects and their markers to have the same color\n * marker size is fixed\n * an application specific attribute - se_type - is added to each marker element\n * to store the type of marker\n *\n * @todo\n * remove some of the restrictions above\n *\n*/\n\nexport default {\n name: 'markers',\n async init () {\n const svgEditor = this\n const { svgCanvas } = svgEditor\n const { BatchCommand, RemoveElementCommand, InsertElementCommand } = svgCanvas.history\n const { $id, addSVGElementsFromJson: addElem } = svgCanvas\n const mtypes = ['start', 'mid', 'end']\n const markerElems = ['line', 'path', 'polyline', 'polygon']\n\n // note - to add additional marker types add them below with a unique id\n // and add the associated icon(s) to marker-icons.svg\n // the geometry is normalized to a 100x100 box with the origin at lower left\n // Safari did not like negative values for low left of viewBox\n // remember that the coordinate system has +y downward\n const markerTypes = {\n nomarker: {},\n leftarrow:\n { element: 'path', attr: { d: 'M0,50 L100,90 L70,50 L100,10 Z' } },\n rightarrow:\n { element: 'path', attr: { d: 'M100,50 L0,90 L30,50 L0,10 Z' } },\n box:\n { element: 'path', attr: { d: 'M20,20 L20,80 L80,80 L80,20 Z' } },\n mcircle:\n { element: 'circle', attr: { r: 30, cx: 50, cy: 50 } }\n };\n\n // duplicate shapes to support unfilled (open) marker types with an _o suffix\n ['leftarrow', 'rightarrow', 'box', 'mcircle'].forEach((v) => {\n markerTypes[v + '_o'] = markerTypes[v]\n })\n\n /**\n * @param {Element} elem - A graphic element will have an attribute like marker-start\n * @param {\"marker-start\"|\"marker-mid\"|\"marker-end\"} attr\n * @returns {Element} The marker element that is linked to the graphic element\n */\n const getLinked = (elem, attr) => {\n const str = elem.getAttribute(attr)\n if (!str) { return null }\n const m = str.match(/\\(#(.*)\\)/)\n // \"url(#mkr_end_svg_1)\" would give m[1] = \"mkr_end_svg_1\"\n if (!m || m.length !== 2) {\n return null\n }\n return svgCanvas.getElement(m[1])\n }\n\n /**\n * Toggles context tool panel off/on.\n * @param {boolean} on\n * @returns {void}\n */\n const showPanel = (on, elem) => {\n $id('marker_panel').style.display = (on) ? 'block' : 'none'\n if (on && elem) {\n mtypes.forEach((pos) => {\n const marker = getLinked(elem, 'marker-' + pos)\n if (marker?.attributes?.se_type) {\n $id(`${pos}_marker_list_opts`).setAttribute('value', marker.attributes.se_type.value)\n } else {\n $id(`${pos}_marker_list_opts`).setAttribute('value', 'nomarker')\n }\n })\n }\n }\n\n /**\n * @param {string} id\n * @param {\"\"|\"nomarker\"|\"nomarker\"|\"leftarrow\"|\"rightarrow\"|\"textmarker\"|\"forwardslash\"|\"reverseslash\"|\"verticalslash\"|\"box\"|\"star\"|\"xmark\"|\"triangle\"|\"mcircle\"} seType\n * @returns {SVGMarkerElement}\n */\n const addMarker = (id, seType) => {\n const selElems = svgCanvas.getSelectedElements()\n let marker = svgCanvas.getElement(id)\n if (marker) { return undefined }\n if (seType === '' || seType === 'nomarker') { return undefined }\n const el = selElems[0]\n const color = el.getAttribute('stroke')\n const strokeWidth = 10\n const refX = 50\n const refY = 50\n const viewBox = '0 0 100 100'\n const markerWidth = 5\n const markerHeight = 5\n\n if (!markerTypes[seType]) {\n console.error(`unknown marker type: ${seType}`)\n return undefined\n }\n\n // create a generic marker\n marker = addElem({\n element: 'marker',\n attr: {\n id,\n markerUnits: 'strokeWidth',\n orient: 'auto',\n style: 'pointer-events:none',\n se_type: seType\n }\n })\n\n const mel = addElem(markerTypes[seType])\n const fillcolor = (seType.substr(-2) === '_o')\n ? 'none'\n : color\n\n mel.setAttribute('fill', fillcolor)\n mel.setAttribute('stroke', color)\n mel.setAttribute('stroke-width', strokeWidth)\n marker.append(mel)\n\n marker.setAttribute('viewBox', viewBox)\n marker.setAttribute('markerWidth', markerWidth)\n marker.setAttribute('markerHeight', markerHeight)\n marker.setAttribute('refX', refX)\n marker.setAttribute('refY', refY)\n svgCanvas.findDefs().append(marker)\n\n return marker\n }\n\n /**\n * @param {Element} elem\n * @returns {SVGPolylineElement}\n */\n const convertline = (elem) => {\n // this routine came from the connectors extension\n // it is needed because midpoint markers don't work with line elements\n if (elem.tagName !== 'line') { return elem }\n\n // Convert to polyline to accept mid-arrow\n const x1 = Number(elem.getAttribute('x1'))\n const x2 = Number(elem.getAttribute('x2'))\n const y1 = Number(elem.getAttribute('y1'))\n const y2 = Number(elem.getAttribute('y2'))\n const { id } = elem\n\n const midPt = (' ' + ((x1 + x2) / 2) + ',' + ((y1 + y2) / 2) + ' ')\n const pline = addElem({\n element: 'polyline',\n attr: {\n points: (x1 + ',' + y1 + midPt + x2 + ',' + y2),\n stroke: elem.getAttribute('stroke'),\n 'stroke-width': elem.getAttribute('stroke-width'),\n fill: 'none',\n opacity: elem.getAttribute('opacity') || 1\n }\n })\n mtypes.forEach((pos) => { // get any existing marker definitions\n const nam = 'marker-' + pos\n const m = elem.getAttribute(nam)\n if (m) { pline.setAttribute(nam, elem.getAttribute(nam)) }\n })\n\n const batchCmd = new BatchCommand()\n batchCmd.addSubCommand(new RemoveElementCommand(elem, elem.parentNode))\n batchCmd.addSubCommand(new InsertElementCommand(pline))\n\n elem.insertAdjacentElement('afterend', pline)\n elem.remove()\n svgCanvas.clearSelection()\n pline.id = id\n svgCanvas.addToSelection([pline])\n svgCanvas.addCommandToHistory(batchCmd)\n return pline\n }\n\n /**\n *\n * @returns {void}\n */\n const setMarker = (pos, markerType) => {\n const selElems = svgCanvas.getSelectedElements()\n if (selElems.length === 0) return\n const markerName = 'marker-' + pos\n const el = selElems[0]\n const marker = getLinked(el, markerName)\n if (marker) { marker.remove() }\n el.removeAttribute(markerName)\n let val = markerType\n if (val === '') { val = 'nomarker' }\n if (val === 'nomarker') {\n svgCanvas.call('changed', selElems)\n return\n }\n // Set marker on element\n const id = 'mkr_' + pos + '_' + el.id\n addMarker(id, val)\n svgCanvas.changeSelectedAttribute(markerName, 'url(#' + id + ')')\n if (el.tagName === 'line' && pos === 'mid') {\n convertline(el)\n }\n svgCanvas.call('changed', selElems)\n }\n\n /**\n * Called when the main system modifies an object. This routine changes\n * the associated markers to be the same color.\n * @param {Element} elem\n * @returns {void}\n */\n const colorChanged = (elem) => {\n const color = elem.getAttribute('stroke')\n\n mtypes.forEach((pos) => {\n const marker = getLinked(elem, 'marker-' + pos)\n if (!marker) { return }\n if (!marker.attributes.se_type) { return } // not created by this extension\n const ch = marker.lastElementChild\n if (!ch) { return }\n const curfill = ch.getAttribute('fill')\n const curstroke = ch.getAttribute('stroke')\n if (curfill && curfill !== 'none') { ch.setAttribute('fill', color) }\n if (curstroke && curstroke !== 'none') { ch.setAttribute('stroke', color) }\n })\n }\n\n /**\n * Called when the main system creates or modifies an object.\n * Its primary purpose is to create new markers for cloned objects.\n * @param {Element} el\n * @returns {void}\n */\n const updateReferences = (el) => {\n const selElems = svgCanvas.getSelectedElements()\n mtypes.forEach((pos) => {\n const markerName = 'marker-' + pos\n const marker = getLinked(el, markerName)\n if (!marker || !marker.attributes.se_type) { return } // not created by this extension\n const url = el.getAttribute(markerName)\n if (url) {\n const len = el.id.length\n const linkid = url.substr(-len - 1, len)\n if (el.id !== linkid) {\n const newMarkerId = 'mkr_' + pos + '_' + el.id\n addMarker(newMarkerId, marker.attributes.se_type.value)\n svgCanvas.changeSelectedAttribute(markerName, 'url(#' + newMarkerId + ')')\n svgCanvas.call('changed', selElems)\n }\n }\n })\n }\n\n return {\n name: svgEditor.i18next.t(`${name}:name`),\n // The callback should be used to load the DOM with the appropriate UI items\n callback () {\n // Add the context panel and its handler(s)\n const panelTemplate = document.createElement('template')\n // create the marker panel\n let innerHTML = '<div id=\"marker_panel\">'\n mtypes.forEach((pos) => {\n innerHTML += `<se-list id=\"${pos}_marker_list_opts\" title=\"tools.${pos}_marker_list_opts\" label=\"\" width=\"22px\" height=\"22px\">`\n Object.entries(markerTypes).forEach(([marker, _mkr]) => {\n innerHTML += `<se-list-item id=\"mkr_${pos}_${marker}\" value=\"${marker}\" title=\"tools.mkr_${marker}\" src=\"${marker}.svg\" img-height=\"22px\"></se-list-item>`\n })\n innerHTML += '</se-list>'\n })\n innerHTML += '</div>'\n panelTemplate.innerHTML = innerHTML\n $id('tools_top').appendChild(panelTemplate.content.cloneNode(true))\n // don't display the panels on start\n showPanel(false)\n mtypes.forEach((pos) => {\n $id(`${pos}_marker_list_opts`).addEventListener('change', (evt) => {\n setMarker(pos, evt.detail.value)\n })\n })\n },\n selectedChanged (opts) {\n // Use this to update the current selected elements\n if (opts.elems.length === 0) showPanel(false)\n opts.elems.forEach((elem) => {\n if (elem && markerElems.includes(elem.tagName)) {\n if (opts.selectedElement && !opts.multiselected) {\n showPanel(true, elem)\n } else {\n showPanel(false)\n }\n } else {\n showPanel(false)\n }\n })\n },\n elementChanged (opts) {\n const elem = opts.elems[0]\n if (elem && (\n elem.getAttribute('marker-start') ||\n elem.getAttribute('marker-mid') ||\n elem.getAttribute('marker-end')\n )) {\n colorChanged(elem)\n updateReferences(elem)\n }\n }\n }\n }\n}\n"],"names":["extMarkers","name","init","svgCanvas","this","BatchCommand","RemoveElementCommand","InsertElementCommand","history","$id","addSVGElementsFromJson","addElem","mtypes","markerElems","markerTypes","nomarker","leftarrow","element","attr","d","rightarrow","box","mcircle","r","cx","cy","forEach","v","getLinked","elem","str","getAttribute","m","match","length","getElement","showPanel","on","style","display","pos","marker","attributes","se_type","setAttribute","value","addMarker","id","seType","selElems","getSelectedElements","color","console","error","markerUnits","orient","mel","fillcolor","substr","append","findDefs","setMarker","markerType","markerName","el","remove","removeAttribute","val","call","changeSelectedAttribute","tagName","x1","Number","x2","y1","y2","pline","points","stroke","fill","opacity","nam","batchCmd","addSubCommand","parentNode","insertAdjacentElement","clearSelection","addToSelection","addCommandToHistory","convertline","i18next","t","callback","panelTemplate","document","createElement","innerHTML","Object","entries","_ref","_mkr","appendChild","content","cloneNode","addEventListener","evt","detail","selectedChanged","opts","elems","includes","selectedElement","multiselected","elementChanged","ch","lastElementChild","curfill","curstroke","colorChanged","url","len","linkid","newMarkerId","updateReferences"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const e=(()=>{if("undefined"==typeof self)return!1;if("top"in self&&self!==top)try{top.window.document._=0}catch(e){return!1}return"showOpenFilePicker"in self})(),r=e?Promise.resolve().then((function(){return c})):Promise.resolve().then((function(){return v}));e?Promise.resolve().then((function(){return d})):Promise.resolve().then((function(){return f}));const l=e?Promise.resolve().then((function(){return m})):Promise.resolve().then((function(){return g}));async function o(){return(await l).default(...arguments)}const s=async e=>{const r=await e.getFile();return r.handle=e,r};var c={__proto__:null,default:async function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[{}];Array.isArray(e)||(e=[e]);const r=[];e.forEach(((e,l)=>{r[l]={description:e.description||"Files",accept:{}},e.mimeTypes?e.mimeTypes.map((c=>{r[l].accept[c]=e.extensions||[]})):r[l].accept["*/*"]=e.extensions||[]}));const l=await window.showOpenFilePicker({id:e[0].id,startIn:e[0].startIn,types:r,multiple:e[0].multiple||!1,excludeAcceptAllOption:e[0].excludeAcceptAllOption||!1}),c=await Promise.all(l.map(s));return e[0].multiple?c:c[0]}};function u(e){function t(e){if(Object(e)!==e)return Promise.reject(new TypeError(e+" is not an object."));var r=e.done;return Promise.resolve(e.value).then((function(e){return{value:e,done:r}}))}return u=function(e){this.s=e,this.n=e.next},u.prototype={s:null,n:null,next:function(){return t(this.n.apply(this.s,arguments))},return:function(e){var r=this.s.return;return void 0===r?Promise.resolve({value:e,done:!0}):t(r.apply(this.s,arguments))},throw:function(e){var r=this.s.return;return void 0===r?Promise.reject(e):t(r.apply(this.s,arguments))}},new u(e)}const p=async function(e,r){let l=arguments.length>2&&void 0!==arguments[2]?arguments[2]:e.name,c=arguments.length>3?arguments[3]:void 0;const d=[],m=[];var v,f=!1,g=!1;try{for(var y,_=function(e){var r,l,c,d=2;for("undefined"!=typeof Symbol&&(l=Symbol.asyncIterator,c=Symbol.iterator);d--;){if(l&&null!=(r=e[l]))return r.call(e);if(c&&null!=(r=e[c]))return new u(r.call(e));l="@@asyncIterator",c="@@iterator"}throw new TypeError("Object is not async iterable")}(e.values());f=!(y=await _.next()).done;f=!1){const v=y.value,f=`${l}/${v.name}`;"file"===v.kind?m.push(v.getFile().then((r=>(r.directoryHandle=e,r.handle=v,Object.defineProperty(r,"webkitRelativePath",{configurable:!0,enumerable:!0,get:()=>f}))))):"directory"!==v.kind||!r||c&&c(v)||d.push(p(v,r,f,c))}}catch(e){g=!0,v=e}finally{try{f&&null!=_.return&&await _.return()}finally{if(g)throw v}}return[...(await Promise.all(d)).flat(),...await Promise.all(m)]};var d={__proto__:null,default:async function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};e.recursive=e.recursive||!1,e.mode=e.mode||"read";const r=await window.showDirectoryPicker({id:e.id,startIn:e.startIn,mode:e.mode});return(await(await r.values()).next()).done?[r]:p(r,e.recursive,void 0,e.skipDirectory)}},m={__proto__:null,default:async function(e){let r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[{}],l=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,c=arguments.length>3&&void 0!==arguments[3]&&arguments[3],d=arguments.length>4&&void 0!==arguments[4]?arguments[4]:null;Array.isArray(r)||(r=[r]),r[0].fileName=r[0].fileName||"Untitled";const m=[];let v=null;if(e instanceof Blob&&e.type?v=e.type:e.headers&&e.headers.get("content-type")&&(v=e.headers.get("content-type")),r.forEach(((e,r)=>{m[r]={description:e.description||"Files",accept:{}},e.mimeTypes?(0===r&&v&&e.mimeTypes.push(v),e.mimeTypes.map((l=>{m[r].accept[l]=e.extensions||[]}))):v?m[r].accept[v]=e.extensions||[]:m[r].accept["*/*"]=e.extensions||[]})),l)try{await l.getFile()}catch(e){if(l=null,c)throw e}const f=l||await window.showSaveFilePicker({suggestedName:r[0].fileName,id:r[0].id,startIn:r[0].startIn,types:m,excludeAcceptAllOption:r[0].excludeAcceptAllOption||!1});!l&&d&&d(f);const g=await f.createWritable();if("stream"in e){const r=e.stream();return await r.pipeTo(g),f}return"body"in e?(await e.body.pipeTo(g),f):(await g.write(await e),await g.close(),f)}},v={__proto__:null,default:async function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[{}];return Array.isArray(e)||(e=[e]),new Promise(((r,l)=>{const c=document.createElement("input");c.type="file";const d=[...e.map((e=>e.mimeTypes||[])),...e.map((e=>e.extensions||[]))].join();c.multiple=e[0].multiple||!1,c.accept=d||"",c.style.display="none",document.body.append(c);const a=e=>{"function"==typeof m&&m(),r(e)},m=e[0].legacySetup&&e[0].legacySetup(a,(()=>m(l)),c),s=()=>{window.removeEventListener("focus",s),c.remove()};c.addEventListener("click",(()=>{window.addEventListener("focus",s)})),c.addEventListener("change",(()=>{window.removeEventListener("focus",s),c.remove(),a(c.multiple?Array.from(c.files):c.files[0])})),"showPicker"in HTMLInputElement.prototype?c.showPicker():c.click()}))}},f={__proto__:null,default:async function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[{}];return Array.isArray(e)||(e=[e]),e[0].recursive=e[0].recursive||!1,new Promise(((r,l)=>{const c=document.createElement("input");c.type="file",c.webkitdirectory=!0;const i=e=>{"function"==typeof d&&d(),r(e)},d=e[0].legacySetup&&e[0].legacySetup(i,(()=>d(l)),c);c.addEventListener("change",(()=>{let r=Array.from(c.files);e[0].recursive?e[0].recursive&&e[0].skipDirectory&&(r=r.filter((r=>r.webkitRelativePath.split("/").every((r=>!e[0].skipDirectory({name:r,kind:"directory"})))))):r=r.filter((e=>2===e.webkitRelativePath.split("/").length)),i(r)})),"showPicker"in HTMLInputElement.prototype?c.showPicker():c.click()}))}},g={__proto__:null,default:async function(e){let r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};Array.isArray(r)&&(r=r[0]);const l=document.createElement("a");let c=e;"body"in e&&(c=await async function(e,r){const l=e.getReader(),c=new ReadableStream({start:e=>async function t(){return l.read().then((r=>{let{done:l,value:c}=r;if(!l)return e.enqueue(c),t();e.close()}))}()}),d=new Response(c),m=await d.blob();return l.releaseLock(),new Blob([m],{type:r})}(e.body,e.headers.get("content-type"))),l.download=r.fileName||"Untitled",l.href=URL.createObjectURL(await c);const i=()=>{"function"==typeof d&&d()},d=r.legacySetup&&r.legacySetup(i,(()=>d()),l);return l.addEventListener("click",(()=>{setTimeout((()=>URL.revokeObjectURL(l.href)),3e4),i()})),l.click(),null}};const y="opensave";let _=null;const loadExtensionTranslation=async function(e){let r;const l=e.configObj.pref("lang");try{r=await function __variableDynamicImportRuntime0__(e){switch(e){case"./locale/en.js":return Promise.resolve().then((function(){return w}));case"./locale/fr.js":return Promise.resolve().then((function(){return b}));case"./locale/pl.js":return Promise.resolve().then((function(){return S}));case"./locale/sv.js":return Promise.resolve().then((function(){return P}));case"./locale/tr.js":return Promise.resolve().then((function(){return k}));case"./locale/uk.js":return Promise.resolve().then((function(){return A}));case"./locale/zh-CN.js":return Promise.resolve().then((function(){return x}));default:return new Promise((function(r,l){("function"==typeof queueMicrotask?queueMicrotask:setTimeout)(l.bind(null,new Error("Unknown variable dynamic import: "+e)))}))}}(`./locale/${l}.js`)}catch(e){console.warn(`Missing translation (${l}) for ${y} - using 'en'`),r=await Promise.resolve().then((function(){return w}))}e.i18next.addResourceBundle(l,"translation",r.default,!0,!0)};var h={name:y,async init(e){const l=this,{svgCanvas:c}=l,{$id:d,$click:m}=c;await loadExtensionTranslation(l);const importImage=e=>{d("se-prompt-dialog").title=this.i18next.t("notification.loadingImage"),d("se-prompt-dialog").setAttribute("close",!1),e.stopPropagation(),e.preventDefault();const r="drop"===e.type?e.dataTransfer.files[0]:e.currentTarget.files[0];if(!r)return void d("se-prompt-dialog").setAttribute("close",!0);if(!r.type.includes("image"))return;let l;r.type.includes("svg")?(l=new FileReader,l.onloadend=e=>{const r=this.svgCanvas.importSvgString(e.target.result,v.shiftKey);this.svgCanvas.alignSelectedElements("m","page"),this.svgCanvas.alignSelectedElements("c","page"),this.svgCanvas.selectOnly([r]),d("se-prompt-dialog").setAttribute("close",!0)},l.readAsText(r)):(l=new FileReader,l.onloadend=e=>{let{target:{result:r}}=e;const insertNewImage=(e,l)=>{const c=this.svgCanvas.addSVGElementsFromJson({element:"image",attr:{x:0,y:0,width:e,height:l,id:this.svgCanvas.getNextId(),style:"pointer-events:inherit"}});this.svgCanvas.setHref(c,r),this.svgCanvas.selectOnly([c]),this.svgCanvas.alignSelectedElements("m","page"),this.svgCanvas.alignSelectedElements("c","page"),this.topPanel.updateContextPanel(),d("se-prompt-dialog").setAttribute("close",!0)};let l=100,c=100;const m=new Image;m.style.opacity=0,m.addEventListener("load",(()=>{l=m.offsetWidth||m.naturalWidth||m.width,c=m.offsetHeight||m.naturalHeight||m.height,insertNewImage(l,c)})),m.src=r},l.readAsDataURL(r))},v=document.createElement("input");v.type="file",v.addEventListener("change",importImage),this.workarea.addEventListener("drop",importImage);const clickClear=async function(){const[e,r]=l.configObj.curConfig.dimensions;"Cancel"!==await seConfirm(l.i18next.t("notification.QwantToClear"))&&(l.leftPanel.clickSelect(),l.svgCanvas.clear(),l.svgCanvas.setResolution(e,r),l.updateCanvas(!0),l.zoomImage(),l.layersPanel.populateLayers(),l.topPanel.updateContextPanel(),l.topPanel.updateTitle("bez_tytulu.svg"))},clickOpen=async function(){if("Cancel"!==await l.openPrep()){c.clear();try{const e=await async function n(){return(await r).default(...arguments)}({mimeTypes:["image/*"]}),c=await e.text();await l.loadSvgString(c),l.updateCanvas(),_=e.handle,l.topPanel.updateTitle(e.name),l.svgCanvas.runExtensions("onOpenedDocument",{name:e.name,lastModified:e.lastModified,size:e.size,type:e.type}),l.layersPanel.populateLayers()}catch(e){if("AbortError"!==e.name)return console.error(e)}}},clickSave=async function(e){if("open"===d("se-svg-editor-dialog").getAttribute("dialog"))l.saveSourceEditor();else{const r={images:l.configObj.pref("img_save"),round_digits:2};if(c.clearSelection(),r){const e=c.mergeDeep(c.getSvgOption(),r);for(const[r,l]of Object.entries(e))c.setSvgOption(r,l)}c.setSvgOption("apply",!0);const d='<?xml version="1.0"?>\n'+c.svgCanvasToString(),m=function(e){let r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",l=arguments.length>2&&void 0!==arguments[2]?arguments[2]:512;const c=atob(e),d=[];for(let e=0;e<c.length;e+=l){const r=c.slice(e,e+l),m=new Array(r.length);for(let e=0;e<r.length;e++)m[e]=r.charCodeAt(e);const v=new Uint8Array(m);d.push(v)}return new Blob(d,{type:r})}(c.encode64(d),"image/svg+xml");try{if("save"===e&&null!==_){const e=!1;_=await o(m,{fileName:"bez_tytulu.svg",extensions:[".svg"]},_,e)}else _=await o(m,{fileName:l.title,extensions:[".svg"]});l.topPanel.updateTitle(_.name),c.runExtensions("onSavedDocument",{name:_.name,kind:_.kind})}catch(e){if("AbortError"!==e.name)return console.error(e)}}};return{name:l.i18next.t(`${y}:name`),callback(){c.insertChildAtIndex(d("main_button"),'\n <se-menu-item id="tool_clear" label="opensave.new_doc" shortcut="N" src="new.svg"></se-menu-item>',0);c.insertChildAtIndex(d("main_button"),'<se-menu-item id="tool_open" label="opensave.open_image_doc" src="open.svg"></se-menu-item>',1);c.insertChildAtIndex(d("main_button"),'<se-menu-item id="tool_save" label="opensave.save_doc" shortcut="S" src="saveImg.svg"></se-menu-item>',2);c.insertChildAtIndex(d("main_button"),'<se-menu-item id="tool_save_as" label="opensave.save_as_doc" src="saveImg.svg"></se-menu-item>',3);c.insertChildAtIndex(d("main_button"),'<se-menu-item id="tool_import" label="tools.import_doc" src="importImg.svg"></se-menu-item>',4),m(d("tool_clear"),clickClear.bind(this)),m(d("tool_open"),clickOpen.bind(this)),m(d("tool_save"),clickSave.bind(this,"save")),m(d("tool_save_as"),clickSave.bind(this,"saveas")),m(d("tool_import"),(e=>{v.shiftKey=e.shiftKey,v.click()}))}}}},w=Object.freeze({__proto__:null,default:{opensave:{new_doc:"New Image",open_image_doc:"Open SVG",save_doc:"Save SVG",save_as_doc:"Save as SVG"}}}),b=Object.freeze({__proto__:null,default:{opensave:{new_doc:"Nouvelle image",open_image_doc:"Ouvrir le SVG",save_doc:"Enregistrer l'image",save_as_doc:"Enregistrer en tant qu'image"}}}),S=Object.freeze({__proto__:null,default:{opensave:{new_doc:"Nowy obraz",open_image_doc:"Otwórz SVG",save_doc:"Zapisz SVG",save_as_doc:"Zapisz jako SVG"}}}),P=Object.freeze({__proto__:null,default:{opensave:{new_doc:"Ny bild",open_image_doc:"Öppna SVG",save_doc:"Spara SVG",save_as_doc:"Spara som SVG"}}}),k=Object.freeze({__proto__:null,default:{opensave:{new_doc:"Yeni Resim",open_image_doc:"SVG Aç",save_doc:"SVG Kaydet",save_as_doc:"SVG olarak Kaydet"}}}),A=Object.freeze({__proto__:null,default:{opensave:{new_doc:"Нове Зображення",open_image_doc:"Відкрити SVG",save_doc:"Зберегти SVG",save_as_doc:"Зберегти SVG як"}}}),x=Object.freeze({__proto__:null,default:{opensave:{new_doc:"新图片",open_image_doc:"打开 SVG",save_doc:"保存图像",save_as_doc:"另存为图像"}}});export{h as default};
|
|
2
|
+
//# sourceMappingURL=ext-opensave.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ext-opensave.js","sources":["../../../../node_modules/browser-fs-access/dist/index.modern.js","../../../../src/editor/extensions/ext-opensave/ext-opensave.js","../../../../src/editor/extensions/ext-opensave/locale/en.js","../../../../src/editor/extensions/ext-opensave/locale/fr.js","../../../../src/editor/extensions/ext-opensave/locale/pl.js","../../../../src/editor/extensions/ext-opensave/locale/sv.js","../../../../src/editor/extensions/ext-opensave/locale/tr.js","../../../../src/editor/extensions/ext-opensave/locale/uk.js","../../../../src/editor/extensions/ext-opensave/locale/zh-CN.js"],"sourcesContent":["const e=(()=>{if(\"undefined\"==typeof self)return!1;if(\"top\"in self&&self!==top)try{top.window.document._=0}catch(e){return!1}return\"showOpenFilePicker\"in self})(),t=e?Promise.resolve().then(function(){return l}):Promise.resolve().then(function(){return v});async function n(...e){return(await t).default(...e)}const r=e?Promise.resolve().then(function(){return y}):Promise.resolve().then(function(){return b});async function i(...e){return(await r).default(...e)}const a=e?Promise.resolve().then(function(){return m}):Promise.resolve().then(function(){return k});async function o(...e){return(await a).default(...e)}const s=async e=>{const t=await e.getFile();return t.handle=e,t};var c=async(e=[{}])=>{Array.isArray(e)||(e=[e]);const t=[];e.forEach((e,n)=>{t[n]={description:e.description||\"Files\",accept:{}},e.mimeTypes?e.mimeTypes.map(r=>{t[n].accept[r]=e.extensions||[]}):t[n].accept[\"*/*\"]=e.extensions||[]});const n=await window.showOpenFilePicker({id:e[0].id,startIn:e[0].startIn,types:t,multiple:e[0].multiple||!1,excludeAcceptAllOption:e[0].excludeAcceptAllOption||!1}),r=await Promise.all(n.map(s));return e[0].multiple?r:r[0]},l={__proto__:null,default:c};function u(e){function t(e){if(Object(e)!==e)return Promise.reject(new TypeError(e+\" is not an object.\"));var t=e.done;return Promise.resolve(e.value).then(function(e){return{value:e,done:t}})}return u=function(e){this.s=e,this.n=e.next},u.prototype={s:null,n:null,next:function(){return t(this.n.apply(this.s,arguments))},return:function(e){var n=this.s.return;return void 0===n?Promise.resolve({value:e,done:!0}):t(n.apply(this.s,arguments))},throw:function(e){var n=this.s.return;return void 0===n?Promise.reject(e):t(n.apply(this.s,arguments))}},new u(e)}const p=async(e,t,n=e.name,r)=>{const i=[],a=[];var o,s=!1,c=!1;try{for(var l,d=function(e){var t,n,r,i=2;for(\"undefined\"!=typeof Symbol&&(n=Symbol.asyncIterator,r=Symbol.iterator);i--;){if(n&&null!=(t=e[n]))return t.call(e);if(r&&null!=(t=e[r]))return new u(t.call(e));n=\"@@asyncIterator\",r=\"@@iterator\"}throw new TypeError(\"Object is not async iterable\")}(e.values());s=!(l=await d.next()).done;s=!1){const o=l.value,s=`${n}/${o.name}`;\"file\"===o.kind?a.push(o.getFile().then(t=>(t.directoryHandle=e,t.handle=o,Object.defineProperty(t,\"webkitRelativePath\",{configurable:!0,enumerable:!0,get:()=>s})))):\"directory\"!==o.kind||!t||r&&r(o)||i.push(p(o,t,s,r))}}catch(e){c=!0,o=e}finally{try{s&&null!=d.return&&await d.return()}finally{if(c)throw o}}return[...(await Promise.all(i)).flat(),...await Promise.all(a)]};var d=async(e={})=>{e.recursive=e.recursive||!1,e.mode=e.mode||\"read\";const t=await window.showDirectoryPicker({id:e.id,startIn:e.startIn,mode:e.mode});return(await(await t.values()).next()).done?[t]:p(t,e.recursive,void 0,e.skipDirectory)},y={__proto__:null,default:d},f=async(e,t=[{}],n=null,r=!1,i=null)=>{Array.isArray(t)||(t=[t]),t[0].fileName=t[0].fileName||\"Untitled\";const a=[];let o=null;if(e instanceof Blob&&e.type?o=e.type:e.headers&&e.headers.get(\"content-type\")&&(o=e.headers.get(\"content-type\")),t.forEach((e,t)=>{a[t]={description:e.description||\"Files\",accept:{}},e.mimeTypes?(0===t&&o&&e.mimeTypes.push(o),e.mimeTypes.map(n=>{a[t].accept[n]=e.extensions||[]})):o?a[t].accept[o]=e.extensions||[]:a[t].accept[\"*/*\"]=e.extensions||[]}),n)try{await n.getFile()}catch(e){if(n=null,r)throw e}const s=n||await window.showSaveFilePicker({suggestedName:t[0].fileName,id:t[0].id,startIn:t[0].startIn,types:a,excludeAcceptAllOption:t[0].excludeAcceptAllOption||!1});!n&&i&&i(s);const c=await s.createWritable();if(\"stream\"in e){const t=e.stream();return await t.pipeTo(c),s}return\"body\"in e?(await e.body.pipeTo(c),s):(await c.write(await e),await c.close(),s)},m={__proto__:null,default:f},w=async(e=[{}])=>(Array.isArray(e)||(e=[e]),new Promise((t,n)=>{const r=document.createElement(\"input\");r.type=\"file\";const i=[...e.map(e=>e.mimeTypes||[]),...e.map(e=>e.extensions||[])].join();r.multiple=e[0].multiple||!1,r.accept=i||\"\",r.style.display=\"none\",document.body.append(r);const a=e=>{\"function\"==typeof o&&o(),t(e)},o=e[0].legacySetup&&e[0].legacySetup(a,()=>o(n),r),s=()=>{window.removeEventListener(\"focus\",s),r.remove()};r.addEventListener(\"click\",()=>{window.addEventListener(\"focus\",s)}),r.addEventListener(\"change\",()=>{window.removeEventListener(\"focus\",s),r.remove(),a(r.multiple?Array.from(r.files):r.files[0])}),\"showPicker\"in HTMLInputElement.prototype?r.showPicker():r.click()})),v={__proto__:null,default:w},h=async(e=[{}])=>(Array.isArray(e)||(e=[e]),e[0].recursive=e[0].recursive||!1,new Promise((t,n)=>{const r=document.createElement(\"input\");r.type=\"file\",r.webkitdirectory=!0;const i=e=>{\"function\"==typeof a&&a(),t(e)},a=e[0].legacySetup&&e[0].legacySetup(i,()=>a(n),r);r.addEventListener(\"change\",()=>{let t=Array.from(r.files);e[0].recursive?e[0].recursive&&e[0].skipDirectory&&(t=t.filter(t=>t.webkitRelativePath.split(\"/\").every(t=>!e[0].skipDirectory({name:t,kind:\"directory\"})))):t=t.filter(e=>2===e.webkitRelativePath.split(\"/\").length),i(t)}),\"showPicker\"in HTMLInputElement.prototype?r.showPicker():r.click()})),b={__proto__:null,default:h},P=async(e,t={})=>{Array.isArray(t)&&(t=t[0]);const n=document.createElement(\"a\");let r=e;\"body\"in e&&(r=await async function(e,t){const n=e.getReader(),r=new ReadableStream({start:e=>async function t(){return n.read().then(({done:n,value:r})=>{if(!n)return e.enqueue(r),t();e.close()})}()}),i=new Response(r),a=await i.blob();return n.releaseLock(),new Blob([a],{type:t})}(e.body,e.headers.get(\"content-type\"))),n.download=t.fileName||\"Untitled\",n.href=URL.createObjectURL(await r);const i=()=>{\"function\"==typeof a&&a()},a=t.legacySetup&&t.legacySetup(i,()=>a(),n);return n.addEventListener(\"click\",()=>{setTimeout(()=>URL.revokeObjectURL(n.href),3e4),i()}),n.click(),null},k={__proto__:null,default:P};export{i as directoryOpen,h as directoryOpenLegacy,d as directoryOpenModern,n as fileOpen,w as fileOpenLegacy,c as fileOpenModern,o as fileSave,P as fileSaveLegacy,f as fileSaveModern,e as supported};\n","/* globals seConfirm */\n/**\n * @file ext-opensave.js\n *\n * @license MIT\n *\n * @copyright 2020 OptimistikSAS\n *\n */\n\n/**\n * @type {module:svgcanvas.EventHandler}\n * @param {external:Window} wind\n * @param {module:svgcanvas.SvgCanvas#event:saved} svg The SVG source\n * @listens module:svgcanvas.SvgCanvas#event:saved\n * @returns {void}\n */\nimport { fileOpen, fileSave } from 'browser-fs-access'\n\nconst name = 'opensave'\nlet handle = null\n\nconst loadExtensionTranslation = async function (svgEditor) {\n let translationModule\n const lang = svgEditor.configObj.pref('lang')\n try {\n translationModule = await import(`./locale/${lang}.js`)\n } catch (_error) {\n console.warn(`Missing translation (${lang}) for ${name} - using 'en'`)\n translationModule = await import('./locale/en.js')\n }\n svgEditor.i18next.addResourceBundle(lang, 'translation', translationModule.default, true, true)\n}\n\nexport default {\n name,\n async init(_S) {\n const svgEditor = this\n const { svgCanvas } = svgEditor\n const { $id, $click } = svgCanvas\n await loadExtensionTranslation(svgEditor)\n /**\n * @param {Event} e\n * @returns {void}\n */\n const importImage = (e) => {\n $id('se-prompt-dialog').title = this.i18next.t('notification.loadingImage')\n $id('se-prompt-dialog').setAttribute('close', false)\n e.stopPropagation()\n e.preventDefault()\n const file = (e.type === 'drop') ? e.dataTransfer.files[0] : e.currentTarget.files[0]\n if (!file) {\n $id('se-prompt-dialog').setAttribute('close', true)\n return\n }\n\n if (!file.type.includes('image')) {\n return\n }\n // Detected an image\n // svg handling\n let reader\n if (file.type.includes('svg')) {\n reader = new FileReader()\n reader.onloadend = (ev) => {\n // imgImport.shiftKey (shift key pressed or not) will determine if import should preserve dimension)\n const newElement = this.svgCanvas.importSvgString(ev.target.result, imgImport.shiftKey)\n this.svgCanvas.alignSelectedElements('m', 'page')\n this.svgCanvas.alignSelectedElements('c', 'page')\n // highlight imported element, otherwise we get strange empty selectbox\n this.svgCanvas.selectOnly([newElement])\n $id('se-prompt-dialog').setAttribute('close', true)\n }\n reader.readAsText(file)\n } else {\n // bitmap handling\n reader = new FileReader()\n reader.onloadend = ({ target: { result } }) => {\n /**\n * Insert the new image until we know its dimensions.\n * @param {Float} imageWidth\n * @param {Float} imageHeight\n * @returns {void}\n */\n const insertNewImage = (imageWidth, imageHeight) => {\n const newImage = this.svgCanvas.addSVGElementsFromJson({\n element: 'image',\n attr: {\n x: 0,\n y: 0,\n width: imageWidth,\n height: imageHeight,\n id: this.svgCanvas.getNextId(),\n style: 'pointer-events:inherit'\n }\n })\n this.svgCanvas.setHref(newImage, result)\n this.svgCanvas.selectOnly([newImage])\n this.svgCanvas.alignSelectedElements('m', 'page')\n this.svgCanvas.alignSelectedElements('c', 'page')\n this.topPanel.updateContextPanel()\n $id('se-prompt-dialog').setAttribute('close', true)\n }\n // create dummy img so we know the default dimensions\n let imgWidth = 100\n let imgHeight = 100\n const img = new Image()\n img.style.opacity = 0\n img.addEventListener('load', () => {\n imgWidth = img.offsetWidth || img.naturalWidth || img.width\n imgHeight = img.offsetHeight || img.naturalHeight || img.height\n insertNewImage(imgWidth, imgHeight)\n })\n img.src = result\n }\n reader.readAsDataURL(file)\n }\n }\n // create an input with type file to open the filesystem dialog\n const imgImport = document.createElement('input')\n imgImport.type = 'file'\n imgImport.addEventListener('change', importImage)\n // dropping a svg file will import it in the svg as well\n this.workarea.addEventListener('drop', importImage)\n\n const clickClear = async function () {\n const [x, y] = svgEditor.configObj.curConfig.dimensions\n const ok = await seConfirm(svgEditor.i18next.t('notification.QwantToClear'))\n if (ok === 'Cancel') {\n return\n }\n svgEditor.leftPanel.clickSelect()\n svgEditor.svgCanvas.clear()\n svgEditor.svgCanvas.setResolution(x, y)\n svgEditor.updateCanvas(true)\n svgEditor.zoomImage()\n svgEditor.layersPanel.populateLayers()\n svgEditor.topPanel.updateContextPanel()\n svgEditor.topPanel.updateTitle('bez_tytulu.svg')\n }\n\n /**\n * By default, this.editor.svgCanvas.open() is a no-op. It is up to an extension\n * mechanism (opera widget, etc.) to call `setCustomHandlers()` which\n * will make it do something.\n * @returns {void}\n */\n const clickOpen = async function () {\n // ask user before clearing an unsaved SVG\n const response = await svgEditor.openPrep()\n if (response === 'Cancel') { return }\n svgCanvas.clear()\n try {\n const blob = await fileOpen({\n mimeTypes: ['image/*']\n })\n const svgContent = await blob.text()\n await svgEditor.loadSvgString(svgContent)\n svgEditor.updateCanvas()\n handle = blob.handle\n svgEditor.topPanel.updateTitle(blob.name)\n svgEditor.svgCanvas.runExtensions('onOpenedDocument', {\n name: blob.name,\n lastModified: blob.lastModified,\n size: blob.size,\n type: blob.type\n })\n svgEditor.layersPanel.populateLayers()\n } catch (err) {\n if (err.name !== 'AbortError') {\n return console.error(err)\n }\n }\n }\n const b64toBlob = (b64Data, contentType = '', sliceSize = 512) => {\n const byteCharacters = atob(b64Data)\n const byteArrays = []\n for (let offset = 0; offset < byteCharacters.length; offset += sliceSize) {\n const slice = byteCharacters.slice(offset, offset + sliceSize)\n const byteNumbers = new Array(slice.length)\n for (let i = 0; i < slice.length; i++) {\n byteNumbers[i] = slice.charCodeAt(i)\n }\n const byteArray = new Uint8Array(byteNumbers)\n byteArrays.push(byteArray)\n }\n const blob = new Blob(byteArrays, { type: contentType })\n return blob\n }\n\n /**\n *\n * @returns {void}\n */\n const clickSave = async function (type) {\n const $editorDialog = $id('se-svg-editor-dialog')\n const editingsource = $editorDialog.getAttribute('dialog') === 'open'\n if (editingsource) {\n svgEditor.saveSourceEditor()\n } else {\n // In the future, more options can be provided here\n const saveOpts = {\n images: svgEditor.configObj.pref('img_save'),\n round_digits: 2\n }\n // remove the selected outline before serializing\n svgCanvas.clearSelection()\n // Update save options if provided\n if (saveOpts) {\n const saveOptions = svgCanvas.mergeDeep(svgCanvas.getSvgOption(), saveOpts)\n for (const [key, value] of Object.entries(saveOptions)) {\n svgCanvas.setSvgOption(key, value)\n }\n }\n svgCanvas.setSvgOption('apply', true)\n\n // no need for doctype, see https://jwatt.org/svg/authoring/#doctype-declaration\n const svg = '<?xml version=\"1.0\"?>\\n' + svgCanvas.svgCanvasToString()\n const b64Data = svgCanvas.encode64(svg)\n const blob = b64toBlob(b64Data, 'image/svg+xml')\n try {\n if (type === 'save' && handle !== null) {\n const throwIfExistingHandleNotGood = false\n handle = await fileSave(blob, {\n fileName: 'bez_tytulu.svg',\n extensions: ['.svg']\n }, handle, throwIfExistingHandleNotGood)\n } else {\n handle = await fileSave(blob, {\n fileName: svgEditor.title,\n extensions: ['.svg']\n })\n }\n svgEditor.topPanel.updateTitle(handle.name)\n svgCanvas.runExtensions('onSavedDocument', {\n name: handle.name,\n kind: handle.kind\n })\n } catch (err) {\n if (err.name !== 'AbortError') {\n return console.error(err)\n }\n }\n }\n }\n\n return {\n name: svgEditor.i18next.t(`${name}:name`),\n // The callback should be used to load the DOM with the appropriate UI items\n callback() {\n const buttonTemplate = `\n <se-menu-item id=\"tool_clear\" label=\"opensave.new_doc\" shortcut=\"N\" src=\"new.svg\"></se-menu-item>`\n svgCanvas.insertChildAtIndex($id('main_button'), buttonTemplate, 0)\n const openButtonTemplate = '<se-menu-item id=\"tool_open\" label=\"opensave.open_image_doc\" src=\"open.svg\"></se-menu-item>'\n svgCanvas.insertChildAtIndex($id('main_button'), openButtonTemplate, 1)\n const saveButtonTemplate = '<se-menu-item id=\"tool_save\" label=\"opensave.save_doc\" shortcut=\"S\" src=\"saveImg.svg\"></se-menu-item>'\n svgCanvas.insertChildAtIndex($id('main_button'), saveButtonTemplate, 2)\n const saveAsButtonTemplate = '<se-menu-item id=\"tool_save_as\" label=\"opensave.save_as_doc\" src=\"saveImg.svg\"></se-menu-item>'\n svgCanvas.insertChildAtIndex($id('main_button'), saveAsButtonTemplate, 3)\n const importButtonTemplate = '<se-menu-item id=\"tool_import\" label=\"tools.import_doc\" src=\"importImg.svg\"></se-menu-item>'\n svgCanvas.insertChildAtIndex($id('main_button'), importButtonTemplate, 4)\n\n // handler\n $click($id('tool_clear'), clickClear.bind(this))\n $click($id('tool_open'), clickOpen.bind(this))\n $click($id('tool_save'), clickSave.bind(this, 'save'))\n $click($id('tool_save_as'), clickSave.bind(this, 'saveas'))\n // tool_import pressed with shiftKey will not scale the SVG\n $click($id('tool_import'), (ev) => { imgImport.shiftKey = ev.shiftKey; imgImport.click() })\n }\n }\n }\n}\n","export default {\n opensave: {\n new_doc: 'New Image',\n open_image_doc: 'Open SVG',\n save_doc: 'Save SVG',\n save_as_doc: 'Save as SVG'\n }\n}\n","export default {\n opensave: {\n new_doc: 'Nouvelle image',\n open_image_doc: 'Ouvrir le SVG',\n save_doc: 'Enregistrer l\\'image',\n save_as_doc: 'Enregistrer en tant qu\\'image'\n }\n}\n","export default {\n opensave: {\n new_doc: 'Nowy obraz',\n open_image_doc: 'Otwórz SVG',\n save_doc: 'Zapisz SVG',\n save_as_doc: 'Zapisz jako SVG'\n }\n}","export default {\n opensave: {\n new_doc: 'Ny bild',\n open_image_doc: 'Öppna SVG',\n save_doc: 'Spara SVG',\n save_as_doc: 'Spara som SVG'\n }\n}\n","export default {\n opensave: {\n new_doc: 'Yeni Resim',\n open_image_doc: 'SVG Aç',\n save_doc: 'SVG Kaydet',\n save_as_doc: 'SVG olarak Kaydet'\n }\n}\n","export default {\n opensave: {\n new_doc: 'Нове Зображення',\n open_image_doc: 'Відкрити SVG',\n save_doc: 'Зберегти SVG',\n save_as_doc: 'Зберегти SVG як'\n }\n}\n","export default {\n opensave: {\n new_doc: '新图片',\n open_image_doc: '打开 SVG',\n save_doc: '保存图像',\n save_as_doc: '另存为图像'\n }\n}\n"],"names":["e","self","top","window","document","_","t","Promise","resolve","then","l","v","y","b","a","m","k","async","o","default","arguments","s","getFile","handle","__proto__","length","undefined","Array","isArray","forEach","n","description","accept","mimeTypes","map","r","extensions","showOpenFilePicker","id","startIn","types","multiple","excludeAcceptAllOption","all","u","Object","reject","TypeError","done","value","this","next","prototype","apply","return","throw","p","name","i","c","d","Symbol","asyncIterator","iterator","call","values","kind","push","directoryHandle","defineProperty","configurable","enumerable","get","flat","recursive","mode","showDirectoryPicker","skipDirectory","fileName","Blob","type","headers","showSaveFilePicker","suggestedName","createWritable","stream","pipeTo","body","write","close","createElement","join","style","display","append","legacySetup","removeEventListener","remove","addEventListener","from","files","HTMLInputElement","showPicker","click","webkitdirectory","filter","webkitRelativePath","split","every","getReader","ReadableStream","start","read","_ref","enqueue","Response","blob","releaseLock","download","href","URL","createObjectURL","setTimeout","revokeObjectURL","loadExtensionTranslation","svgEditor","translationModule","lang","configObj","pref","__variableDynamicImportRuntime0__","_error","console","warn","en$1","i18next","addResourceBundle","extOpensave","init","_S","svgCanvas","$id","$click","importImage","title","setAttribute","stopPropagation","preventDefault","file","dataTransfer","currentTarget","includes","reader","FileReader","onloadend","ev","newElement","importSvgString","target","result","imgImport","shiftKey","alignSelectedElements","selectOnly","readAsText","insertNewImage","imageWidth","imageHeight","newImage","addSVGElementsFromJson","element","attr","x","width","height","getNextId","setHref","topPanel","updateContextPanel","imgWidth","imgHeight","img","Image","opacity","offsetWidth","naturalWidth","offsetHeight","naturalHeight","src","readAsDataURL","workarea","clickClear","curConfig","dimensions","seConfirm","leftPanel","clickSelect","clear","setResolution","updateCanvas","zoomImage","layersPanel","populateLayers","updateTitle","clickOpen","openPrep","fileOpen","svgContent","text","loadSvgString","runExtensions","lastModified","size","err","error","clickSave","getAttribute","saveSourceEditor","saveOpts","images","round_digits","clearSelection","saveOptions","mergeDeep","getSvgOption","key","entries","setSvgOption","svg","svgCanvasToString","b64Data","contentType","sliceSize","byteCharacters","atob","byteArrays","offset","slice","byteNumbers","charCodeAt","byteArray","Uint8Array","b64toBlob","encode64","throwIfExistingHandleNotGood","fileSave","callback","insertChildAtIndex","bind","opensave","new_doc","open_image_doc","save_doc","save_as_doc"],"mappings":"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","x_google_ignoreList":[0]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
let e=!1;const t=[],o=void 0!==window.ontouchstart;
|
|
2
|
+
/**
|
|
3
|
+
* @file ext-overview_window.js
|
|
4
|
+
*
|
|
5
|
+
* @license MIT
|
|
6
|
+
*
|
|
7
|
+
* @copyright 2013 James Sacksteder
|
|
8
|
+
*
|
|
9
|
+
*/
|
|
10
|
+
var i={name:"overview_window",init(i){const l=this,{$id:n,$click:r}=l.svgCanvas,p={};n("sidepanel_content").insertAdjacentHTML("beforeend",'<div id="overview_window_content_pane" style="width:100%; word-wrap:break-word; display:inline-block; margin-top:20px;"><div id="overview_window_content" style="position:relative; padding-left:15px; top:0px;"><div style="background-color:#A0A0A0; display:inline-block; overflow:visible;"><svg id="overviewMiniView" width="132" height="100" x="0" y="0" viewBox="0 0 4800 3600" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><use x="0" y="0" xlink:href="#svgroot"> </use></svg><div id="overview_window_view_box" style="min-width:50px; min-height:50px; position:absolute; top:30px; left:30px; z-index:5; background-color:rgba(255,0,102,0.3);"></div></div></div></div>');const updateViewBox=()=>{const{workarea:e}=l,t=parseFloat(getComputedStyle(e,null).height.replace("px","")),o=parseFloat(getComputedStyle(e,null).width.replace("px","")),i=e.scrollLeft,r=e.scrollTop,p=parseFloat(getComputedStyle(n("svgcanvas"),null).width.replace("px","")),a=parseFloat(getComputedStyle(n("svgcanvas"),null).height.replace("px","")),s=parseFloat(getComputedStyle(n("overviewMiniView"),null).width.replace("px","")),w=parseFloat(getComputedStyle(n("overviewMiniView"),null).height.replace("px","")),v=i/p*s,d=r/a*w,u=o/p*s,c=t/a*w;n("overview_window_view_box").style.minWidth=u+"px",n("overview_window_view_box").style.minHeight=c+"px",n("overview_window_view_box").style.top=d+"px",n("overview_window_view_box").style.left=v+"px"};n("workarea").addEventListener("scroll",(()=>{p.viewBoxDragging||updateViewBox()})),n("workarea").addEventListener("resize",updateViewBox),updateViewBox();const updateViewDimensions=function(){const e=parseFloat(getComputedStyle(n("svgroot"),null).width.replace("px","")),t=parseFloat(getComputedStyle(n("svgroot"),null).height.replace("px","")),o=t/e*parseFloat(getComputedStyle(n("overviewMiniView"),null).width.replace("px",""));n("overviewMiniView").setAttribute("viewBox","640 480 "+e+" "+t),n("overviewMiniView").setAttribute("height",o),updateViewBox()};updateViewDimensions(),p.viewBoxDragging=!1;const updateViewPortFromViewBox=function(){const e=parseFloat(getComputedStyle(n("svgcanvas"),null).width.replace("px","")),t=parseFloat(getComputedStyle(n("svgcanvas"),null).height.replace("px","")),o=parseFloat(getComputedStyle(n("overviewMiniView"),null).width.replace("px","")),i=parseFloat(getComputedStyle(n("overviewMiniView"),null).height.replace("px","")),l=parseFloat(getComputedStyle(n("overview_window_view_box"),null).getPropertyValue("left").replace("px",""))/o*e,r=parseFloat(getComputedStyle(n("overview_window_view_box"),null).getPropertyValue("top").replace("px",""))/i*t;n("workarea").scrollLeft=l,n("workarea").scrollTop=r},a=document.querySelector("#overview_window_view_box");return function(i,l,n,r,p,a){e||document.addEventListener(o?"touchmove":"mousemove",(function(e){let o=e;e.touches&&(o=e.touches[0]);for(let e=0;e<t.length;e++)t[e](o.clientX,o.clientY)})),e=!0;let s=!1,w=!1,v=0,d=0,u=0,c=0;l.addEventListener(o?"touchstart":"mousedown",(function(e){if(e.stopPropagation(),e.preventDefault(),"false"===i.dataset.dragEnabled)return;let t=e;e.touches&&(t=e.touches[0]),s=!0,v=i.offsetLeft-t.clientX,d=i.offsetTop-t.clientY})),document.addEventListener(o?"touchend":"mouseup",(function(){p&&w&&p(i,n,parseInt(i.style.left),parseInt(i.style.top)),s=!1,w=!1})),document.addEventListener(o?"touchmove":"mousemove",(function(){a&&w&&a(i,parseInt(i.style.left),parseInt(i.style.top))})),t.push((function move(e,t){if(s){if(w||(w=!0,r&&r(i,u,c)),u=e+v,c=t+d,"true"===i.dataset.dragBoundary){if(u<1||u>=window.innerWidth-i.offsetWidth)return;if(c<1||c>=window.innerHeight-i.offsetHeight)return}i.style.left=u+"px",i.style.top=c+"px"}}))}(a,a,document.querySelector("#overviewMiniView"),(()=>{p.viewBoxDragging=!0,updateViewPortFromViewBox()}),((e,t,o,i)=>{e.offsetLeft+e.offsetWidth>parseFloat(getComputedStyle(t,null).width.replace("px",""))?e.style.left=parseFloat(getComputedStyle(t,null).width.replace("px",""))-e.offsetWidth+"px":e.offsetLeft<0&&(e.style.left="0px"),e.offsetTop+e.offsetHeight>parseFloat(getComputedStyle(t,null).height.replace("px",""))?e.style.top=parseFloat(getComputedStyle(t,null).height.replace("px",""))-e.offsetHeight+"px":e.offsetTop<0&&(e.style.top="0px"),p.viewBoxDragging=!1,updateViewPortFromViewBox()}),(function(){updateViewPortFromViewBox()})),r(n("overviewMiniView"),(e=>{const t=e.offsetX||e.originalEvent.layerX,o=e.offsetY||e.originalEvent.layerY,i=parseFloat(getComputedStyle(n("overviewMiniView"),null).width.replace("px","")),l=parseFloat(getComputedStyle(n("overviewMiniView"),null).height.replace("px","")),r=parseFloat(getComputedStyle(n("overview_window_view_box"),null).getPropertyValue("min-width").replace("px","")),p=parseFloat(getComputedStyle(n("overview_window_view_box"),null).getPropertyValue("min-height").replace("px",""));let a=t-.5*r,s=o-.5*p;a<0&&(a=0),s<0&&(s=0),a+r>i&&(a=i-r),s+p>l&&(s=l-p),n("overview_window_view_box").style.top=s+"px",n("overview_window_view_box").style.left=a+"px",updateViewPortFromViewBox()})),{name:"overview window",canvasUpdated:updateViewDimensions,workareaResized:updateViewBox}}};export{i as default};
|
|
11
|
+
//# sourceMappingURL=ext-overview_window.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ext-overview_window.js","sources":["../../../../src/editor/extensions/ext-overview_window/dragmove/dragmove.js","../../../../src/editor/extensions/ext-overview_window/ext-overview_window.js"],"sourcesContent":["// https://github.com/knadh/dragmove.js\n// Kailash Nadh (c) 2020.\n// MIT License.\n// can't use npm version as the dragmove is different.\n\nlet _loaded = false\nconst _callbacks = []\nconst _isTouch = window.ontouchstart !== undefined\n\nexport const dragmove = function (target, handler, parent, onStart, onEnd, onDrag) {\n // Register a global event to capture mouse moves (once).\n if (!_loaded) {\n document.addEventListener(_isTouch ? 'touchmove' : 'mousemove', function (e) {\n let c = e\n if (e.touches) {\n c = e.touches[0]\n }\n\n // On mouse move, dispatch the coords to all registered callbacks.\n for (let i = 0; i < _callbacks.length; i++) {\n _callbacks[i](c.clientX, c.clientY)\n }\n })\n }\n\n _loaded = true\n let isMoving = false; let hasStarted = false\n let startX = 0; let startY = 0; let lastX = 0; let lastY = 0\n\n // On the first click and hold, record the offset of the pointer in relation\n // to the point of click inside the element.\n handler.addEventListener(_isTouch ? 'touchstart' : 'mousedown', function (e) {\n e.stopPropagation()\n e.preventDefault()\n if (target.dataset.dragEnabled === 'false') {\n return\n }\n\n let c = e\n if (e.touches) {\n c = e.touches[0]\n }\n\n isMoving = true\n startX = target.offsetLeft - c.clientX\n startY = target.offsetTop - c.clientY\n })\n\n // On leaving click, stop moving.\n document.addEventListener(_isTouch ? 'touchend' : 'mouseup', function () {\n if (onEnd && hasStarted) {\n onEnd(target, parent, parseInt(target.style.left), parseInt(target.style.top))\n }\n\n isMoving = false\n hasStarted = false\n })\n\n // On leaving click, stop moving.\n document.addEventListener(_isTouch ? 'touchmove' : 'mousemove', function () {\n if (onDrag && hasStarted) {\n onDrag(target, parseInt(target.style.left), parseInt(target.style.top))\n }\n })\n\n // Register mouse-move callback to move the element.\n _callbacks.push(function move (x, y) {\n if (!isMoving) {\n return\n }\n\n if (!hasStarted) {\n hasStarted = true\n if (onStart) {\n onStart(target, lastX, lastY)\n }\n }\n\n lastX = x + startX\n lastY = y + startY\n\n // If boundary checking is on, don't let the element cross the viewport.\n if (target.dataset.dragBoundary === 'true') {\n if (lastX < 1 || lastX >= window.innerWidth - target.offsetWidth) {\n return\n }\n if (lastY < 1 || lastY >= window.innerHeight - target.offsetHeight) {\n return\n }\n }\n\n target.style.left = lastX + 'px'\n target.style.top = lastY + 'px'\n })\n}\n\nexport { dragmove as default }\n","/**\n * @file ext-overview_window.js\n *\n * @license MIT\n *\n * @copyright 2013 James Sacksteder\n *\n */\nimport { dragmove } from './dragmove/dragmove.js'\n\nexport default {\n name: 'overview_window',\n init ({ _$ }) {\n const svgEditor = this\n const { $id, $click } = svgEditor.svgCanvas\n const overviewWindowGlobals = {}\n\n // Define and insert the base html element.\n const propsWindowHtml =\n '<div id=\"overview_window_content_pane\" style=\"width:100%; word-wrap:break-word; display:inline-block; margin-top:20px;\">' +\n '<div id=\"overview_window_content\" style=\"position:relative; padding-left:15px; top:0px;\">' +\n '<div style=\"background-color:#A0A0A0; display:inline-block; overflow:visible;\">' +\n '<svg id=\"overviewMiniView\" width=\"132\" height=\"100\" x=\"0\" y=\"0\" viewBox=\"0 0 4800 3600\" ' +\n 'xmlns=\"http://www.w3.org/2000/svg\" ' +\n 'xmlns:xlink=\"http://www.w3.org/1999/xlink\">' +\n '<use x=\"0\" y=\"0\" xlink:href=\"#svgroot\"> </use>' +\n '</svg>' +\n '<div id=\"overview_window_view_box\" style=\"min-width:50px; min-height:50px; position:absolute; top:30px; left:30px; z-index:5; background-color:rgba(255,0,102,0.3);\">' +\n '</div>' +\n '</div>' +\n '</div>' +\n '</div>'\n $id('sidepanel_content').insertAdjacentHTML('beforeend', propsWindowHtml)\n\n // Define dynamic animation of the view box.\n const updateViewBox = () => {\n const { workarea } = svgEditor\n const portHeight = parseFloat(getComputedStyle(workarea, null).height.replace('px', ''))\n const portWidth = parseFloat(getComputedStyle(workarea, null).width.replace('px', ''))\n const portX = workarea.scrollLeft\n const portY = workarea.scrollTop\n const windowWidth = parseFloat(getComputedStyle($id('svgcanvas'), null).width.replace('px', ''))\n const windowHeight = parseFloat(getComputedStyle($id('svgcanvas'), null).height.replace('px', ''))\n const overviewWidth = parseFloat(getComputedStyle($id('overviewMiniView'), null).width.replace('px', ''))\n const overviewHeight = parseFloat(getComputedStyle($id('overviewMiniView'), null).height.replace('px', ''))\n\n const viewBoxX = portX / windowWidth * overviewWidth\n const viewBoxY = portY / windowHeight * overviewHeight\n const viewBoxWidth = portWidth / windowWidth * overviewWidth\n const viewBoxHeight = portHeight / windowHeight * overviewHeight\n\n $id('overview_window_view_box').style.minWidth = viewBoxWidth + 'px'\n $id('overview_window_view_box').style.minHeight = viewBoxHeight + 'px'\n $id('overview_window_view_box').style.top = viewBoxY + 'px'\n $id('overview_window_view_box').style.left = viewBoxX + 'px'\n }\n $id('workarea').addEventListener('scroll', () => {\n if (!(overviewWindowGlobals.viewBoxDragging)) {\n updateViewBox()\n }\n })\n $id('workarea').addEventListener('resize', updateViewBox)\n updateViewBox()\n\n // Compensate for changes in zoom and canvas size.\n const updateViewDimensions = function () {\n const viewWidth = parseFloat(getComputedStyle($id('svgroot'), null).width.replace('px', ''))\n const viewHeight = parseFloat(getComputedStyle($id('svgroot'), null).height.replace('px', ''))\n\n const viewX = 640\n const viewY = 480\n\n const svgWidthOld = parseFloat(getComputedStyle($id('overviewMiniView'), null).width.replace('px', ''))\n const svgHeightNew = viewHeight / viewWidth * svgWidthOld\n $id('overviewMiniView').setAttribute('viewBox', viewX + ' ' + viewY + ' ' + viewWidth + ' ' + viewHeight)\n $id('overviewMiniView').setAttribute('height', svgHeightNew)\n updateViewBox()\n }\n updateViewDimensions()\n\n // Set up the overview window as a controller for the view port.\n overviewWindowGlobals.viewBoxDragging = false\n const updateViewPortFromViewBox = function () {\n const windowWidth = parseFloat(getComputedStyle($id('svgcanvas'), null).width.replace('px', ''))\n const windowHeight = parseFloat(getComputedStyle($id('svgcanvas'), null).height.replace('px', ''))\n const overviewWidth = parseFloat(getComputedStyle($id('overviewMiniView'), null).width.replace('px', ''))\n const overviewHeight = parseFloat(getComputedStyle($id('overviewMiniView'), null).height.replace('px', ''))\n const viewBoxX = parseFloat(getComputedStyle($id('overview_window_view_box'), null).getPropertyValue('left').replace('px', ''))\n const viewBoxY = parseFloat(getComputedStyle($id('overview_window_view_box'), null).getPropertyValue('top').replace('px', ''))\n\n const portX = viewBoxX / overviewWidth * windowWidth\n const portY = viewBoxY / overviewHeight * windowHeight\n $id('workarea').scrollLeft = portX\n $id('workarea').scrollTop = portY\n }\n const onStart = () => {\n overviewWindowGlobals.viewBoxDragging = true\n updateViewPortFromViewBox()\n }\n const onEnd = (el, parent, _x, _y) => {\n if ((el.offsetLeft + el.offsetWidth) > parseFloat(getComputedStyle(parent, null).width.replace('px', ''))) {\n el.style.left = (parseFloat(getComputedStyle(parent, null).width.replace('px', '')) - el.offsetWidth) + 'px'\n } else if (el.offsetLeft < 0) {\n el.style.left = '0px'\n }\n if ((el.offsetTop + el.offsetHeight) > parseFloat(getComputedStyle(parent, null).height.replace('px', ''))) {\n el.style.top = (parseFloat(getComputedStyle(parent, null).height.replace('px', '')) - el.offsetHeight) + 'px'\n } else if (el.offsetTop < 0) {\n el.style.top = '0px'\n }\n overviewWindowGlobals.viewBoxDragging = false\n updateViewPortFromViewBox()\n }\n const onDrag = function () {\n updateViewPortFromViewBox()\n }\n const dragElem = document.querySelector('#overview_window_view_box')\n const parentElem = document.querySelector('#overviewMiniView')\n dragmove(dragElem, dragElem, parentElem, onStart, onEnd, onDrag)\n\n $click($id('overviewMiniView'), (evt) => {\n // Firefox doesn't support evt.offsetX and evt.offsetY.\n const mouseX = (evt.offsetX || evt.originalEvent.layerX)\n const mouseY = (evt.offsetY || evt.originalEvent.layerY)\n const overviewWidth = parseFloat(getComputedStyle($id('overviewMiniView'), null).width.replace('px', ''))\n const overviewHeight = parseFloat(getComputedStyle($id('overviewMiniView'), null).height.replace('px', ''))\n const viewBoxWidth = parseFloat(getComputedStyle($id('overview_window_view_box'), null).getPropertyValue('min-width').replace('px', ''))\n const viewBoxHeight = parseFloat(getComputedStyle($id('overview_window_view_box'), null).getPropertyValue('min-height').replace('px', ''))\n\n let viewBoxX = mouseX - 0.5 * viewBoxWidth\n let viewBoxY = mouseY - 0.5 * viewBoxHeight\n // deal with constraints\n if (viewBoxX < 0) {\n viewBoxX = 0\n }\n if (viewBoxY < 0) {\n viewBoxY = 0\n }\n if (viewBoxX + viewBoxWidth > overviewWidth) {\n viewBoxX = overviewWidth - viewBoxWidth\n }\n if (viewBoxY + viewBoxHeight > overviewHeight) {\n viewBoxY = overviewHeight - viewBoxHeight\n }\n $id('overview_window_view_box').style.top = viewBoxY + 'px'\n $id('overview_window_view_box').style.left = viewBoxX + 'px'\n updateViewPortFromViewBox()\n })\n\n return {\n name: 'overview window',\n canvasUpdated: updateViewDimensions,\n workareaResized: updateViewBox\n }\n }\n}\n"],"names":["_loaded","_callbacks","_isTouch","undefined","window","ontouchstart","extOverview_window","name","init","_ref","svgEditor","this","$id","$click","svgCanvas","overviewWindowGlobals","insertAdjacentHTML","updateViewBox","workarea","portHeight","parseFloat","getComputedStyle","height","replace","portWidth","width","portX","scrollLeft","portY","scrollTop","windowWidth","windowHeight","overviewWidth","overviewHeight","viewBoxX","viewBoxY","viewBoxWidth","viewBoxHeight","style","minWidth","minHeight","top","left","addEventListener","viewBoxDragging","updateViewDimensions","viewWidth","viewHeight","svgHeightNew","setAttribute","viewX","updateViewPortFromViewBox","getPropertyValue","dragElem","document","querySelector","target","handler","parent","onStart","onEnd","onDrag","e","c","touches","i","length","clientX","clientY","isMoving","hasStarted","startX","startY","lastX","lastY","stopPropagation","preventDefault","dataset","dragEnabled","offsetLeft","offsetTop","parseInt","push","move","x","y","dragBoundary","innerWidth","offsetWidth","innerHeight","offsetHeight","dragmove","el","_x","_y","evt","mouseX","offsetX","originalEvent","layerX","mouseY","offsetY","layerY","canvasUpdated","workareaResized"],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file ext-panning.js
|
|
3
|
+
*
|
|
4
|
+
* @license MIT
|
|
5
|
+
*
|
|
6
|
+
* @copyright 2013 Luis Aguirre
|
|
7
|
+
*
|
|
8
|
+
*/
|
|
9
|
+
const e="panning",loadExtensionTranslation=async function(n){let s;const u=n.configObj.pref("lang");try{s=await function __variableDynamicImportRuntime0__(e){switch(e){case"./locale/en.js":return Promise.resolve().then((function(){return t}));case"./locale/pl.js":return Promise.resolve().then((function(){return r}));case"./locale/sv.js":return Promise.resolve().then((function(){return a}));case"./locale/tr.js":return Promise.resolve().then((function(){return o}));case"./locale/uk.js":return Promise.resolve().then((function(){return i}));case"./locale/zh-CN.js":return Promise.resolve().then((function(){return l}));default:return new Promise((function(n,t){("function"==typeof queueMicrotask?queueMicrotask:setTimeout)(t.bind(null,new Error("Unknown variable dynamic import: "+e)))}))}}(`./locale/${u}.js`)}catch(n){console.warn(`Missing translation (${u}) for ${e} - using 'en'`),s=await Promise.resolve().then((function(){return t}))}n.i18next.addResourceBundle(u,e,s.default)};var n={name:e,async init(){const n=this;await loadExtensionTranslation(n);const{svgCanvas:t}=n,{$id:r,$click:a}=t;return{name:n.i18next.t(`${e}:name`),callback(){const e=document.createElement("template");var n,o;e.innerHTML='\n <se-button id="ext-panning" title="Przesuwanie [Spacja / kółko myszki + przeciąganie]" src="panning.svg"></se-button>\n ',n=r("tool_zoom"),o=e.content.cloneNode(!0),n.parentNode.insertBefore(o,n.nextSibling),a(r("ext-panning"),(()=>{this.leftPanel.updateLeftPanel("ext-panning")&&t.setMode("ext-panning")}))},mouseDown(){if("ext-panning"===t.getMode())return n.setPanning(!0),{started:!0}},mouseUp(){if("ext-panning"===t.getMode())return n.setPanning(!1),{keep:!1,element:null}}}}},t=Object.freeze({__proto__:null,default:{name:"Extension Panning",buttons:[{title:"Panning"}]}}),r=Object.freeze({__proto__:null,default:{name:"Rozszerzenie przesuwania",buttons:[{title:"Przesuwanie"}]}}),a=Object.freeze({__proto__:null,default:{name:"Panorering av tillägg",buttons:[{title:"Panorering"}]}}),o=Object.freeze({__proto__:null,default:{name:"Kaydırma Aracı ",buttons:[{title:"Kaydırma"}]}}),i=Object.freeze({__proto__:null,default:{name:"Розширення: Малювання",buttons:[{title:"Малювання"}]}}),l=Object.freeze({__proto__:null,default:{name:"移动",buttons:[{title:"移动"}]}});export{n as default};
|
|
10
|
+
//# sourceMappingURL=ext-panning.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ext-panning.js","sources":["../../../../src/editor/extensions/ext-panning/ext-panning.js","../../../../src/editor/extensions/ext-panning/locale/en.js","../../../../src/editor/extensions/ext-panning/locale/pl.js","../../../../src/editor/extensions/ext-panning/locale/sv.js","../../../../src/editor/extensions/ext-panning/locale/tr.js","../../../../src/editor/extensions/ext-panning/locale/uk.js","../../../../src/editor/extensions/ext-panning/locale/zh-CN.js"],"sourcesContent":["/**\n * @file ext-panning.js\n *\n * @license MIT\n *\n * @copyright 2013 Luis Aguirre\n *\n */\n/*\n This is a very basic SVG-Edit extension to let tablet/mobile devices pan without problem\n*/\n\nconst name = 'panning'\n\nconst loadExtensionTranslation = async function (svgEditor) {\n let translationModule\n const lang = svgEditor.configObj.pref('lang')\n try {\n translationModule = await import(`./locale/${lang}.js`)\n } catch (_error) {\n console.warn(`Missing translation (${lang}) for ${name} - using 'en'`)\n translationModule = await import('./locale/en.js')\n }\n svgEditor.i18next.addResourceBundle(lang, name, translationModule.default)\n}\n\nexport default {\n name,\n async init() {\n const svgEditor = this\n await loadExtensionTranslation(svgEditor)\n const {\n svgCanvas\n } = svgEditor\n const { $id, $click } = svgCanvas\n const insertAfter = (referenceNode, newNode) => {\n referenceNode.parentNode.insertBefore(newNode, referenceNode.nextSibling)\n }\n return {\n name: svgEditor.i18next.t(`${name}:name`),\n callback() {\n const btitle = `Przesuwanie [Spacja / kółko myszki + przeciąganie]`\n // Add the button and its handler(s)\n const buttonTemplate = document.createElement('template')\n buttonTemplate.innerHTML = `\n <se-button id=\"ext-panning\" title=\"${btitle}\" src=\"panning.svg\"></se-button>\n `\n insertAfter($id('tool_zoom'), buttonTemplate.content.cloneNode(true))\n $click($id('ext-panning'), () => {\n if (this.leftPanel.updateLeftPanel('ext-panning')) {\n svgCanvas.setMode('ext-panning')\n }\n })\n },\n mouseDown() {\n if (svgCanvas.getMode() === 'ext-panning') {\n svgEditor.setPanning(true)\n return {\n started: true\n }\n }\n return undefined\n },\n mouseUp() {\n if (svgCanvas.getMode() === 'ext-panning') {\n svgEditor.setPanning(false)\n return {\n keep: false,\n element: null\n }\n }\n return undefined\n }\n }\n }\n}\n","export default {\n name: 'Extension Panning',\n buttons: [\n {\n title: 'Panning'\n }\n ]\n}\n","export default {\n name: 'Rozszerzenie przesuwania',\n buttons: [\n {\n title: 'Przesuwanie'\n }\n ]\n}","export default {\n name: 'Panorering av tillägg',\n buttons: [\n {\n title: 'Panorering'\n }\n ]\n}\n","export default {\n name: 'Kaydırma Aracı ',\n buttons: [\n {\n title: 'Kaydırma'\n }\n ]\n}\n","export default {\n name: 'Розширення: Малювання',\n buttons: [\n {\n title: 'Малювання'\n }\n ]\n}\n","export default {\n name: '移动',\n buttons: [\n {\n title: '移动'\n }\n ]\n}\n"],"names":["name","loadExtensionTranslation","async","svgEditor","translationModule","lang","configObj","pref","__variableDynamicImportRuntime0__","_error","console","warn","Promise","resolve","then","en$1","i18next","addResourceBundle","default","extPanning","init","this","svgCanvas","$id","$click","t","callback","buttonTemplate","document","createElement","insertAfter","referenceNode","newNode","innerHTML","content","cloneNode","parentNode","insertBefore","nextSibling","leftPanel","updateLeftPanel","setMode","mouseDown","getMode","setPanning","started","mouseUp","keep","element","buttons","title"],"mappings":";;;;;;;;AAYA,MAAMA,EAAO,UAEPC,yBAA2BC,eAAgBC,GAC/C,IAAIC,EACJ,MAAMC,EAAOF,EAAUG,UAAUC,KAAK,QACtC,IACEH,grBAA0BI,CAAO,YAAYH,OAC9C,CAAC,MAAOI,GACPC,QAAQC,KAAK,wBAAwBN,UAAaL,kBAClDI,QAA0BQ,QAAwBC,UAAAC,MAAA,WAAA,OAAAC,CAAA,GACpD,CACAZ,EAAUa,QAAQC,kBAAkBZ,EAAML,EAAMI,EAAkBc,QACpE,EAEA,IAAeC,EAAA,CACbnB,OACA,UAAMoB,GACJ,MAAMjB,EAAYkB,WACZpB,yBAAyBE,GAC/B,MAAMmB,UACJA,GACEnB,GACEoB,IAAEA,EAAGC,OAAEA,GAAWF,EAIxB,MAAO,CACLtB,KAAMG,EAAUa,QAAQS,EAAE,GAAGzB,UAC7B0B,QAAAA,GACE,MAEMC,EAAiBC,SAASC,cAAc,YAR9BC,IAACC,EAAeC,EAShCL,EAAeM,UAAY,4IATVF,EAYLR,EAAI,aAZgBS,EAYFL,EAAeO,QAAQC,WAAU,GAXjEJ,EAAcK,WAAWC,aAAaL,EAASD,EAAcO,aAY3Dd,EAAOD,EAAI,gBAAgB,KACrBF,KAAKkB,UAAUC,gBAAgB,gBACjClB,EAAUmB,QAAQ,cACpB,GAEH,EACDC,SAAAA,GACE,GAA4B,gBAAxBpB,EAAUqB,UAEZ,OADAxC,EAAUyC,YAAW,GACd,CACLC,SAAS,EAId,EACDC,OAAAA,GACE,GAA4B,gBAAxBxB,EAAUqB,UAEZ,OADAxC,EAAUyC,YAAW,GACd,CACLG,MAAM,EACNC,QAAS,KAIf,EAEJ,2CC1Ea,CACbhD,KAAM,oBACNiD,QAAS,CACP,CACEC,MAAO,uDCJE,CACblD,KAAM,2BACNiD,QAAS,CACP,CACEC,MAAO,2DCJE,CACblD,KAAM,wBACNiD,QAAS,CACP,CACEC,MAAO,0DCJE,CACblD,KAAM,kBACNiD,QAAS,CACP,CACEC,MAAO,wDCJE,CACblD,KAAM,wBACNiD,QAAS,CACP,CACEC,MAAO,yDCJE,CACblD,KAAM,KACNiD,QAAS,CACP,CACEC,MAAO"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file ext-polystar.js
|
|
3
|
+
*
|
|
4
|
+
*
|
|
5
|
+
* @copyright 2010 CloudCanvas, Inc. All rights reserved
|
|
6
|
+
* @copyright 2021 Optimistik SAS, Inc. All rights reserved
|
|
7
|
+
* @license MIT
|
|
8
|
+
*
|
|
9
|
+
*/
|
|
10
|
+
const t="polystar",loadExtensionTranslation=async function(e){let u;const d=e.configObj.pref("lang");try{u=await function __variableDynamicImportRuntime0__(t){switch(t){case"./locale/en.js":return Promise.resolve().then((function(){return l}));case"./locale/fr.js":return Promise.resolve().then((function(){return o}));case"./locale/pl.js":return Promise.resolve().then((function(){return i}));case"./locale/sv.js":return Promise.resolve().then((function(){return n}));case"./locale/tr.js":return Promise.resolve().then((function(){return s}));case"./locale/uk.js":return Promise.resolve().then((function(){return r}));case"./locale/zh-CN.js":return Promise.resolve().then((function(){return a}));default:return new Promise((function(e,l){("function"==typeof queueMicrotask?queueMicrotask:setTimeout)(l.bind(null,new Error("Unknown variable dynamic import: "+t)))}))}}(`./locale/${d}.js`)}catch(e){console.warn(`Missing translation (${d}) for ${t} - using 'en'`),u=await Promise.resolve().then((function(){return l}))}e.i18next.addResourceBundle(d,t,u.default)};var e={name:t,async init(){const e=this,{svgCanvas:l}=e,{ChangeElementCommand:o}=l.history,addToHistory=t=>{l.undoMgr.addCommandToHistory(t)},{$id:i,$click:n}=l;let s,r,a;await loadExtensionTranslation(e);const showPanel=(t,e)=>{t?i(`${e}_panel`).style.removeProperty("display"):i(`${e}_panel`).style.display="none"},setAttr=(t,e)=>{l.changeSelectedAttribute(t,e),l.call("changed",s)},cot=t=>1/Math.tan(t),sec=t=>1/Math.cos(t);return{name:e.i18next.t(`${t}:name`),callback(){const e=`\n <se-flyingbutton id="tools_polygon" title="${`${t}:title`}">\n <se-button id="tool_star" title="${`${t}:buttons.0.title`}" src="star.svg">\n </se-button>\n <se-button id="tool_polygon" title="${`${t}:buttons.1.title`}" src="polygon.svg">\n </se-button>\n </se-flyingbutton>\n `;l.insertChildAtIndex(i("tools_left"),e,10),n(i("tool_star"),(()=>{this.leftPanel.updateLeftPanel("tool_star")&&(l.setMode("star"),showPanel(!0,"star"),showPanel(!1,"polygon"))})),n(i("tool_polygon"),(()=>{this.leftPanel.updateLeftPanel("tool_polygon")&&(l.setMode("polygon"),showPanel(!0,"polygon"),showPanel(!1,"star"))}));const r=`${t}:contextTools.0.label`,a=`${t}:contextTools.0.title`,u=`${t}:contextTools.1.label`,d=`${t}:contextTools.1.title`,c=`${t}:contextTools.2.label`,b=`${t}:contextTools.2.title`,g=`${t}:contextTools.3.label`,p=`${t}:contextTools.3.title`,h=document.createElement("template");h.innerHTML=`\n <div id="star_panel">\n <se-spin-input id="starNumPoints" label="${r}" min=1 step=1 value=5 title="${a}">\n </se-spin-input>\n <se-spin-input id="RadiusMultiplier" label="${u}" min=1 step=2.5 value=3 title="${d}">\n </se-spin-input>\n <se-spin-input id="radialShift" min=0 step=1 value=0 label="${c}" title="${b}">\n </se-spin-input>\n </div>\n <div id="polygon_panel">\n <se-spin-input size="3" id="polySides" min=1 step=1 value=5 label="${g}" title="${p}">\n </se-spin-input>\n </div>\n `,i("tools_top").appendChild(h.content.cloneNode(!0)),showPanel(!1,"star"),showPanel(!1,"polygon"),i("starNumPoints").addEventListener("change",(t=>{setAttr("point",t.target.value);const e=t.target.value;let l=s.length;for(;l--;){const t=s[l];if(t.hasAttribute("r")){const l=t.getAttribute("point"),i=t.getAttribute("points"),n=t.getAttribute("radialshift");let s=0,r=0;if(t.points){const a=t.points,u=a.numberOfItems;for(let t=0;t<u;++t){const e=a.getItem(t);s+=parseFloat(e.x),r+=parseFloat(e.y)}const d=s/u,c=r/u,b=Number(t.getAttribute("r")),g=b/t.getAttribute("starRadiusMultiplier");let p="";for(let t=0;e>=t;t++){let l=2*Math.PI*(t/e);l-=Math.PI/2;let o=b*Math.cos(l)+d,i=b*Math.sin(l)+c;p+=o+","+i+" ",isNaN(g)||(l=2*Math.PI*(t/e)+Math.PI/e,l-=Math.PI/2,l+=n,o=g*Math.cos(l)+d,i=g*Math.sin(l)+c,p+=o+","+i+" ")}t.setAttribute("points",p),addToHistory(new o(t,{point:l,points:i}))}}}})),i("RadiusMultiplier").addEventListener("change",(t=>{setAttr("starRadiusMultiplier",t.target.value)})),i("radialShift").addEventListener("change",(t=>{setAttr("radialshift",t.target.value)})),i("polySides").addEventListener("change",(t=>{setAttr("sides",t.target.value);const e=t.target.value;let l=s.length;for(;l--;){const t=s[l];if(t.hasAttribute("edge")){const l=t.getAttribute("sides"),i=t.getAttribute("points");let n=0,s=0;if(t.points){const r=t.points,a=r.numberOfItems;for(let t=0;t<a;++t){const e=r.getItem(t);n+=parseFloat(e.x),s+=parseFloat(e.y)}const u=n/a,d=s/a,c=t.getAttribute("edge")/2*cot(Math.PI/e)*sec(Math.PI/e);let b="";for(let t=0;e>=t;t++){const l=2*Math.PI*t/e;b+=c*Math.cos(l)+u+","+(c*Math.sin(l)+d)+" "}t.setAttribute("points",b),addToHistory(new o(t,{sides:l,points:i}))}}}}))},mouseDown(t){if("star"===l.getMode()){const e=l.getColor("fill"),o=l.getColor("stroke"),n=l.getStrokeWidth();return r=!0,a=l.addSVGElementsFromJson({element:"polygon",attr:{cx:t.start_x,cy:t.start_y,id:l.getNextId(),shape:"star",point:i("starNumPoints").value,r:0,radialshift:i("radialShift").value,r2:0,orient:"point",fill:e,stroke:o,"stroke-width":n}}),{started:!0}}if("polygon"===l.getMode()){const e=l.getColor("fill"),o=l.getColor("stroke"),n=l.getStrokeWidth();return r=!0,a=l.addSVGElementsFromJson({element:"polygon",attr:{cx:t.start_x,cy:t.start_y,id:l.getNextId(),shape:"regularPoly",sides:i("polySides").value,orient:"x",edge:0,fill:e,stroke:o,"stroke-width":n}}),{started:!0}}},mouseMove(t){if(r){if("star"===l.getMode()){const e=Number(a.getAttribute("cx")),l=Number(a.getAttribute("cy")),o=Number(a.getAttribute("point")),i=a.getAttribute("orient"),n=a.getAttribute("fill"),s=a.getAttribute("stroke"),r=Number(a.getAttribute("stroke-width")),u=Number(a.getAttribute("radialshift"));let d=t.mouse_x,c=t.mouse_y;const b=Math.sqrt((d-e)*(d-e)+(c-l)*(c-l))/1.5,g=document.getElementById("RadiusMultiplier").value,p=b/g;a.setAttribute("r",b),a.setAttribute("r2",p),a.setAttribute("starRadiusMultiplier",g);let h="";for(let t=0;o>=t;t++){let n=2*Math.PI*(t/o);"point"===i?n-=Math.PI/2:"edge"===i&&(n=n+Math.PI/o-Math.PI/2),d=b*Math.cos(n)+e,c=b*Math.sin(n)+l,h+=d+","+c+" ",isNaN(p)||(n=2*Math.PI*(t/o)+Math.PI/o,"point"===i?n-=Math.PI/2:"edge"===i&&(n=n+Math.PI/o-Math.PI/2),n+=u,d=p*Math.cos(n)+e,c=p*Math.sin(n)+l,h+=d+","+c+" ")}return a.setAttribute("points",h),a.setAttribute("fill",n),a.setAttribute("stroke",s),a.setAttribute("stroke-width",r),a.getAttribute("shape"),{started:!0}}if("polygon"===l.getMode()){const e=Number(a.getAttribute("cx")),l=Number(a.getAttribute("cy")),o=Number(a.getAttribute("sides")),i=a.getAttribute("fill"),n=a.getAttribute("stroke"),s=Number(a.getAttribute("stroke-width"));let r=t.mouse_x,u=t.mouse_y;const d=Math.sqrt((r-e)*(r-e)+(u-l)*(u-l))/1.5;a.setAttribute("edge",d);const c=d/2*cot(Math.PI/o)*sec(Math.PI/o);let b="";for(let t=0;o>=t;t++){const i=2*Math.PI*t/o;r=c*Math.cos(i)+e,u=c*Math.sin(i)+l,b+=r+","+u+" "}return a.setAttribute("points",b),a.setAttribute("fill",i),a.setAttribute("stroke",n),a.setAttribute("stroke-width",s),{started:!0}}}},mouseUp(){if("star"===l.getMode()){return{keep:"0"!==a.getAttribute("r"),element:a}}if("polygon"===l.getMode()){return{keep:"0"!==a.getAttribute("edge"),element:a}}},selectedChanged(t){s=t.elems;let e=s.length;if(!e)return showPanel(!1,"star"),void showPanel(!1,"polygon");for(;e--;){const l=s[e];"star"===l?.getAttribute("shape")?t.selectedElement&&!t.multiselected?(i("starNumPoints").value=l.getAttribute("point"),i("radialShift").value=l.getAttribute("radialshift"),showPanel(!0,"star")):showPanel(!1,"star"):"regularPoly"===l?.getAttribute("shape")?t.selectedElement&&!t.multiselected?(i("polySides").value=l.getAttribute("sides"),showPanel(!0,"polygon")):showPanel(!1,"polygon"):(showPanel(!1,"star"),showPanel(!1,"polygon"))}}}}},l=Object.freeze({__proto__:null,default:{name:"star",title:"Polygone/Star Tool",buttons:[{title:"Star Tool"},{title:"Polygon Tool"}],contextTools:[{title:"Number of Sides",label:"points"},{title:"Pointiness",label:"Pointiness"},{title:"Twists the star",label:"Radial Shift"},{title:"Number of Sides",label:"sides"}]}}),o=Object.freeze({__proto__:null,default:{name:"etoile",title:"Outil Polygone/Etoile",buttons:[{title:"Outil Etoile"},{title:"Outil Polygone"}],contextTools:[{title:"Nombre de côtés",label:"points"},{title:"Précision",label:"Précision"},{title:"Torsion Etoile",label:"Décalage Radial"},{title:"Nombre de côtés",label:"côtés"}]}}),i=Object.freeze({__proto__:null,default:{name:"gwiazda",title:"Narzędzie wielokąt/gwiazda",buttons:[{title:"Narzędzie gwiazda"},{title:"Narzędzie wielokąt"}],contextTools:[{title:"Liczba boków",label:"punkty"},{title:"Ostrość",label:"Ostrość"},{title:"Skręca gwiazdę",label:"Przesunięcie radialne"},{title:"Liczba boków",label:"boki"}]}}),n=Object.freeze({__proto__:null,default:{name:"stjärna",title:"Polygon/stjärnverktyg",buttons:[{title:"Stjärnverktyg"},{title:"Polygonverktyg"}],contextTools:[{title:"Antal sidor",label:"poäng"},{title:"Pointiness",label:"Pointiness"},{title:"Vrider stjärnan",label:"Radiell förskjutning"},{title:"Antal sidor",label:"sidor"}]}}),s=Object.freeze({__proto__:null,default:{name:"yıldız",title:"Çokgen/Yıldız Aracı",buttons:[{title:"Yıldız Aracı"},{title:"Çokgen Aracı"}],contextTools:[{title:"Kenar Sayısı",label:"noktalar"},{title:"Sivrilik",label:"Sivrilik"},{title:"Yıldızı Kıvır",label:"Döngüsel Kaydırma"},{title:"Kenar Sayısı",label:"kenarlar"}]}}),r=Object.freeze({__proto__:null,default:{name:"зірка",title:"Полігон/Зірка",buttons:[{title:"Зірка"},{title:"Полігон"}],contextTools:[{title:"Кількість Сторін",label:"точки"},{title:"Без точок",label:"Без точок"},{title:"Закручення зірки",label:"Радіальне Зміщення"},{title:"Кількість Сторін",label:"сторони"}]}}),a=Object.freeze({__proto__:null,default:{name:"星形",title:"Polygone/Star Tool",buttons:[{title:"星形工具"},{title:"多边形工具"}],contextTools:[{title:"顶点",label:"顶点"},{title:"钝度",label:"钝度"},{title:"径向",label:"径向"},{title:"边数",label:"边数"}]}});export{e as default};
|
|
11
|
+
//# sourceMappingURL=ext-polystar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ext-polystar.js","sources":["../../../../src/editor/extensions/ext-polystar/ext-polystar.js","../../../../src/editor/extensions/ext-polystar/locale/en.js","../../../../src/editor/extensions/ext-polystar/locale/fr.js","../../../../src/editor/extensions/ext-polystar/locale/pl.js","../../../../src/editor/extensions/ext-polystar/locale/sv.js","../../../../src/editor/extensions/ext-polystar/locale/tr.js","../../../../src/editor/extensions/ext-polystar/locale/uk.js","../../../../src/editor/extensions/ext-polystar/locale/zh-CN.js"],"sourcesContent":["/**\n * @file ext-polystar.js\n *\n *\n * @copyright 2010 CloudCanvas, Inc. All rights reserved\n * @copyright 2021 Optimistik SAS, Inc. All rights reserved\n * @license MIT\n *\n */\n\nconst name = 'polystar'\n\nconst loadExtensionTranslation = async function (svgEditor) {\n let translationModule\n const lang = svgEditor.configObj.pref('lang')\n try {\n translationModule = await import(`./locale/${lang}.js`)\n } catch (_error) {\n console.warn(`Missing translation (${lang}) for ${name} - using 'en'`)\n translationModule = await import('./locale/en.js')\n }\n svgEditor.i18next.addResourceBundle(lang, name, translationModule.default)\n}\n\nexport default {\n name,\n async init () {\n const svgEditor = this\n const { svgCanvas } = svgEditor\n const { ChangeElementCommand } = svgCanvas.history\n const addToHistory = (cmd) => { svgCanvas.undoMgr.addCommandToHistory(cmd) }\n const { $id, $click } = svgCanvas\n let selElems\n let started\n let newFO\n await loadExtensionTranslation(svgEditor)\n\n /**\n * @param {boolean} on true=display\n * @param {string} tool \"star\" or \"polygone\"\n * @returns {void}\n */\n const showPanel = (on, tool) => {\n if (on) {\n $id(`${tool}_panel`).style.removeProperty('display')\n } else {\n $id(`${tool}_panel`).style.display = 'none'\n }\n }\n\n /**\n *\n * @param {string} attr attribute to change\n * @param {string|Float} val new value\n * @returns {void}\n */\n const setAttr = (attr, val) => {\n svgCanvas.changeSelectedAttribute(attr, val)\n svgCanvas.call('changed', selElems)\n }\n\n /**\n * @param {Float} n angle\n * @return {Float} cotangeante\n */\n const cot = (n) => 1 / Math.tan(n)\n\n /**\n * @param {Float} n angle\n * @returns {Float} sec\n */\n const sec = (n) => 1 / Math.cos(n)\n\n return {\n name: svgEditor.i18next.t(`${name}:name`),\n // The callback should be used to load the DOM with the appropriate UI items\n callback () {\n // Add the button and its handler(s)\n // Note: the star extension needs to be loaded before the polygon extension\n const fbtitle = `${name}:title`\n const titleStar = `${name}:buttons.0.title`\n const titlePolygon = `${name}:buttons.1.title`\n const buttonTemplate = `\n <se-flyingbutton id=\"tools_polygon\" title=\"${fbtitle}\">\n <se-button id=\"tool_star\" title=\"${titleStar}\" src=\"star.svg\">\n </se-button>\n <se-button id=\"tool_polygon\" title=\"${titlePolygon}\" src=\"polygon.svg\">\n </se-button>\n </se-flyingbutton>\n `\n svgCanvas.insertChildAtIndex($id('tools_left'), buttonTemplate, 10)\n // handler\n $click($id('tool_star'), () => {\n if (this.leftPanel.updateLeftPanel('tool_star')) {\n svgCanvas.setMode('star')\n showPanel(true, 'star')\n showPanel(false, 'polygon')\n }\n })\n $click($id('tool_polygon'), () => {\n if (this.leftPanel.updateLeftPanel('tool_polygon')) {\n svgCanvas.setMode('polygon')\n showPanel(true, 'polygon')\n showPanel(false, 'star')\n }\n })\n const label0 = `${name}:contextTools.0.label`\n const title0 = `${name}:contextTools.0.title`\n const label1 = `${name}:contextTools.1.label`\n const title1 = `${name}:contextTools.1.title`\n const label2 = `${name}:contextTools.2.label`\n const title2 = `${name}:contextTools.2.title`\n const label3 = `${name}:contextTools.3.label`\n const title3 = `${name}:contextTools.3.title`\n // Add the context panel and its handler(s)\n const panelTemplate = document.createElement('template')\n panelTemplate.innerHTML = `\n <div id=\"star_panel\">\n <se-spin-input id=\"starNumPoints\" label=\"${label0}\" min=1 step=1 value=5 title=\"${title0}\">\n </se-spin-input>\n <se-spin-input id=\"RadiusMultiplier\" label=\"${label1}\" min=1 step=2.5 value=3 title=\"${title1}\">\n </se-spin-input>\n <se-spin-input id=\"radialShift\" min=0 step=1 value=0 label=\"${label2}\" title=\"${title2}\">\n </se-spin-input>\n </div>\n <div id=\"polygon_panel\">\n <se-spin-input size=\"3\" id=\"polySides\" min=1 step=1 value=5 label=\"${label3}\" title=\"${title3}\">\n </se-spin-input>\n </div>\n `\n // add handlers for the panel\n $id('tools_top').appendChild(panelTemplate.content.cloneNode(true))\n // don't display the panels on start\n showPanel(false, 'star')\n showPanel(false, 'polygon')\n $id('starNumPoints').addEventListener('change', (event) => {\n setAttr('point', event.target.value)\n const orient = 'point'\n const point = event.target.value\n let i = selElems.length\n while (i--) {\n const elem = selElems[i]\n if (elem.hasAttribute('r')) {\n const oldPoint = elem.getAttribute('point')\n const oldPoints = elem.getAttribute('points')\n const radialshift = elem.getAttribute('radialshift')\n let xpos = 0\n let ypos = 0\n if (elem.points) {\n const list = elem.points\n const len = list.numberOfItems\n for (let i = 0; i < len; ++i) {\n const pt = list.getItem(i)\n xpos += parseFloat(pt.x)\n ypos += parseFloat(pt.y)\n }\n const cx = xpos / len\n const cy = ypos / len\n const circumradius = Number(elem.getAttribute('r'))\n const inradius = circumradius / elem.getAttribute('starRadiusMultiplier')\n\n let polyPoints = ''\n for (let s = 0; point >= s; s++) {\n let angle = 2.0 * Math.PI * (s / point)\n if (orient === 'point') {\n angle -= Math.PI / 2\n } else if (orient === 'edge') {\n angle = angle + Math.PI / point - Math.PI / 2\n }\n\n let x = circumradius * Math.cos(angle) + cx\n let y = circumradius * Math.sin(angle) + cy\n\n polyPoints += x + ',' + y + ' '\n\n if (!isNaN(inradius)) {\n angle = 2.0 * Math.PI * (s / point) + Math.PI / point\n if (orient === 'point') {\n angle -= Math.PI / 2\n } else if (orient === 'edge') {\n angle = angle + Math.PI / point - Math.PI / 2\n }\n angle += radialshift\n\n x = inradius * Math.cos(angle) + cx\n y = inradius * Math.sin(angle) + cy\n\n polyPoints += x + ',' + y + ' '\n }\n }\n elem.setAttribute('points', polyPoints)\n addToHistory(new ChangeElementCommand(elem, { point: oldPoint, points: oldPoints }))\n }\n }\n }\n })\n $id('RadiusMultiplier').addEventListener('change', (event) => {\n setAttr('starRadiusMultiplier', event.target.value)\n })\n $id('radialShift').addEventListener('change', (event) => {\n setAttr('radialshift', event.target.value)\n })\n $id('polySides').addEventListener('change', (event) => {\n setAttr('sides', event.target.value)\n const sides = event.target.value\n let i = selElems.length\n while (i--) {\n const elem = selElems[i]\n if (elem.hasAttribute('edge')) {\n const oldSides = elem.getAttribute('sides')\n const oldPoints = elem.getAttribute('points')\n let xpos = 0\n let ypos = 0\n if (elem.points) {\n const list = elem.points\n const len = list.numberOfItems\n for (let i = 0; i < len; ++i) {\n const pt = list.getItem(i)\n xpos += parseFloat(pt.x)\n ypos += parseFloat(pt.y)\n }\n const cx = xpos / len\n const cy = ypos / len\n const edg = elem.getAttribute('edge')\n const inradius = (edg / 2) * cot(Math.PI / sides)\n const circumradius = inradius * sec(Math.PI / sides)\n let points = ''\n for (let s = 0; sides >= s; s++) {\n const angle = (2.0 * Math.PI * s) / sides\n const x = circumradius * Math.cos(angle) + cx\n const y = circumradius * Math.sin(angle) + cy\n points += x + ',' + y + ' '\n }\n elem.setAttribute('points', points)\n addToHistory(new ChangeElementCommand(elem, { sides: oldSides, points: oldPoints }))\n }\n }\n }\n })\n },\n mouseDown (opts) {\n if (svgCanvas.getMode() === 'star') {\n const fill = svgCanvas.getColor('fill')\n const stroke = svgCanvas.getColor('stroke')\n const strokeWidth = svgCanvas.getStrokeWidth()\n started = true\n newFO = svgCanvas.addSVGElementsFromJson({\n element: 'polygon',\n attr: {\n cx: opts.start_x,\n cy: opts.start_y,\n id: svgCanvas.getNextId(),\n shape: 'star',\n point: $id('starNumPoints').value,\n r: 0,\n radialshift: $id('radialShift').value,\n r2: 0,\n orient: 'point',\n fill,\n stroke,\n 'stroke-width': strokeWidth\n }\n })\n return {\n started: true\n }\n }\n if (svgCanvas.getMode() === 'polygon') {\n const fill = svgCanvas.getColor('fill')\n const stroke = svgCanvas.getColor('stroke')\n const strokeWidth = svgCanvas.getStrokeWidth()\n started = true\n newFO = svgCanvas.addSVGElementsFromJson({\n element: 'polygon',\n attr: {\n cx: opts.start_x,\n cy: opts.start_y,\n id: svgCanvas.getNextId(),\n shape: 'regularPoly',\n sides: $id('polySides').value,\n orient: 'x',\n edge: 0,\n fill,\n stroke,\n 'stroke-width': strokeWidth\n }\n })\n\n return {\n started: true\n }\n }\n return undefined\n },\n mouseMove (opts) {\n if (!started) {\n return undefined\n }\n if (svgCanvas.getMode() === 'star') {\n const cx = Number(newFO.getAttribute('cx'))\n const cy = Number(newFO.getAttribute('cy'))\n const point = Number(newFO.getAttribute('point'))\n const orient = newFO.getAttribute('orient')\n const fill = newFO.getAttribute('fill')\n const stroke = newFO.getAttribute('stroke')\n const strokeWidth = Number(newFO.getAttribute('stroke-width'))\n const radialshift = Number(newFO.getAttribute('radialshift'))\n\n let x = opts.mouse_x\n let y = opts.mouse_y\n\n const circumradius =\n Math.sqrt((x - cx) * (x - cx) + (y - cy) * (y - cy)) / 1.5\n const RadiusMultiplier = document.getElementById('RadiusMultiplier').value\n const inradius =\n circumradius / RadiusMultiplier\n newFO.setAttribute('r', circumradius)\n newFO.setAttribute('r2', inradius)\n newFO.setAttribute('starRadiusMultiplier', RadiusMultiplier)\n\n let polyPoints = ''\n for (let s = 0; point >= s; s++) {\n let angle = 2.0 * Math.PI * (s / point)\n if (orient === 'point') {\n angle -= Math.PI / 2\n } else if (orient === 'edge') {\n angle = angle + Math.PI / point - Math.PI / 2\n }\n\n x = circumradius * Math.cos(angle) + cx\n y = circumradius * Math.sin(angle) + cy\n\n polyPoints += x + ',' + y + ' '\n\n if (!isNaN(inradius)) {\n angle = 2.0 * Math.PI * (s / point) + Math.PI / point\n if (orient === 'point') {\n angle -= Math.PI / 2\n } else if (orient === 'edge') {\n angle = angle + Math.PI / point - Math.PI / 2\n }\n angle += radialshift\n\n x = inradius * Math.cos(angle) + cx\n y = inradius * Math.sin(angle) + cy\n\n polyPoints += x + ',' + y + ' '\n }\n }\n newFO.setAttribute('points', polyPoints)\n newFO.setAttribute('fill', fill)\n newFO.setAttribute('stroke', stroke)\n newFO.setAttribute('stroke-width', strokeWidth)\n /* const shape = */ newFO.getAttribute('shape')\n\n return {\n started: true\n }\n }\n if (svgCanvas.getMode() === 'polygon') {\n const cx = Number(newFO.getAttribute('cx'))\n const cy = Number(newFO.getAttribute('cy'))\n const sides = Number(newFO.getAttribute('sides'))\n // const orient = newFO.getAttribute('orient');\n const fill = newFO.getAttribute('fill')\n const stroke = newFO.getAttribute('stroke')\n const strokeWidth = Number(newFO.getAttribute('stroke-width'))\n\n let x = opts.mouse_x\n let y = opts.mouse_y\n\n const edg =\n Math.sqrt((x - cx) * (x - cx) + (y - cy) * (y - cy)) / 1.5\n newFO.setAttribute('edge', edg)\n\n const inradius = (edg / 2) * cot(Math.PI / sides)\n const circumradius = inradius * sec(Math.PI / sides)\n let points = ''\n for (let s = 0; sides >= s; s++) {\n const angle = (2.0 * Math.PI * s) / sides\n x = circumradius * Math.cos(angle) + cx\n y = circumradius * Math.sin(angle) + cy\n\n points += x + ',' + y + ' '\n }\n\n // const poly = newFO.createElementNS(NS.SVG, 'polygon');\n newFO.setAttribute('points', points)\n newFO.setAttribute('fill', fill)\n newFO.setAttribute('stroke', stroke)\n newFO.setAttribute('stroke-width', strokeWidth)\n return {\n started: true\n }\n }\n return undefined\n },\n mouseUp () {\n if (svgCanvas.getMode() === 'star') {\n const r = newFO.getAttribute('r')\n return {\n keep: r !== '0',\n element: newFO\n }\n }\n if (svgCanvas.getMode() === 'polygon') {\n const edge = newFO.getAttribute('edge')\n const keep = edge !== '0'\n // svgCanvas.addToSelection([newFO], true);\n return {\n keep,\n element: newFO\n }\n }\n return undefined\n },\n selectedChanged (opts) {\n // Use this to update the current selected elements\n selElems = opts.elems\n let i = selElems.length\n // Hide panels if nothing is selected\n if (!i) {\n showPanel(false, 'star')\n showPanel(false, 'polygon')\n return\n }\n while (i--) {\n const elem = selElems[i]\n if (elem?.getAttribute('shape') === 'star') {\n if (opts.selectedElement && !opts.multiselected) {\n $id('starNumPoints').value = elem.getAttribute('point')\n $id('radialShift').value = elem.getAttribute('radialshift')\n showPanel(true, 'star')\n } else {\n showPanel(false, 'star')\n }\n } else if (elem?.getAttribute('shape') === 'regularPoly') {\n if (opts.selectedElement && !opts.multiselected) {\n $id('polySides').value = elem.getAttribute('sides')\n showPanel(true, 'polygon')\n } else {\n showPanel(false, 'polygon')\n }\n } else {\n showPanel(false, 'star')\n showPanel(false, 'polygon')\n }\n }\n }\n }\n }\n}\n","export default {\n name: 'star',\n title: 'Polygone/Star Tool',\n buttons: [\n {\n title: 'Star Tool'\n },\n {\n title: 'Polygon Tool'\n }\n ],\n contextTools: [\n {\n title: 'Number of Sides',\n label: 'points'\n },\n {\n title: 'Pointiness',\n label: 'Pointiness'\n },\n {\n title: 'Twists the star',\n label: 'Radial Shift'\n },\n {\n title: 'Number of Sides',\n label: 'sides'\n }\n ]\n}\n","export default {\n name: 'etoile',\n title: 'Outil Polygone/Etoile',\n buttons: [\n {\n title: 'Outil Etoile'\n },\n {\n title: 'Outil Polygone'\n }\n ],\n contextTools: [\n {\n title: 'Nombre de côtés',\n label: 'points'\n },\n {\n title: 'Précision',\n label: 'Précision'\n },\n {\n title: 'Torsion Etoile',\n label: 'Décalage Radial'\n },\n {\n title: 'Nombre de côtés',\n label: 'côtés'\n }\n ]\n}\n","export default {\n name: 'gwiazda',\n title: 'Narzędzie wielokąt/gwiazda',\n buttons: [\n {\n title: 'Narzędzie gwiazda'\n },\n {\n title: 'Narzędzie wielokąt'\n }\n ],\n contextTools: [\n {\n title: 'Liczba boków',\n label: 'punkty'\n },\n {\n title: 'Ostrość',\n label: 'Ostrość'\n },\n {\n title: 'Skręca gwiazdę',\n label: 'Przesunięcie radialne'\n },\n {\n title: 'Liczba boków',\n label: 'boki'\n }\n ]\n}","export default {\n name: 'stjärna',\n title: 'Polygon/stjärnverktyg',\n buttons: [\n {\n title: 'Stjärnverktyg'\n },\n {\n title: 'Polygonverktyg'\n }\n ],\n contextTools: [\n {\n title: 'Antal sidor',\n label: 'poäng'\n },\n {\n title: 'Pointiness',\n label: 'Pointiness'\n },\n {\n title: 'Vrider stjärnan',\n label: 'Radiell förskjutning'\n },\n {\n title: 'Antal sidor',\n label: 'sidor'\n }\n ]\n}\n","export default {\n name: 'yıldız',\n title: 'Çokgen/Yıldız Aracı',\n buttons: [\n {\n title: 'Yıldız Aracı'\n },\n {\n title: 'Çokgen Aracı'\n }\n ],\n contextTools: [\n {\n title: 'Kenar Sayısı',\n label: 'noktalar'\n },\n {\n title: 'Sivrilik',\n label: 'Sivrilik'\n },\n {\n title: 'Yıldızı Kıvır',\n label: 'Döngüsel Kaydırma'\n },\n {\n title: 'Kenar Sayısı',\n label: 'kenarlar'\n }\n ]\n}\n","export default {\n name: 'зірка',\n title: 'Полігон/Зірка',\n buttons: [\n {\n title: 'Зірка'\n },\n {\n title: 'Полігон'\n }\n ],\n contextTools: [\n {\n title: 'Кількість Сторін',\n label: 'точки'\n },\n {\n title: 'Без точок',\n label: 'Без точок'\n },\n {\n title: 'Закручення зірки',\n label: 'Радіальне Зміщення'\n },\n {\n title: 'Кількість Сторін',\n label: 'сторони'\n }\n ]\n}\n","export default {\n name: '星形',\n title: 'Polygone/Star Tool',\n buttons: [\n {\n title: '星形工具'\n },\n {\n title: '多边形工具'\n }\n ],\n contextTools: [\n {\n title: '顶点',\n label: '顶点'\n },\n {\n title: '钝度',\n label: '钝度'\n },\n {\n title: '径向',\n label: '径向'\n },\n {\n title: '边数',\n label: '边数'\n }\n ]\n}\n"],"names":["name","loadExtensionTranslation","async","svgEditor","translationModule","lang","configObj","pref","__variableDynamicImportRuntime0__","_error","console","warn","Promise","resolve","then","en$1","i18next","addResourceBundle","default","extPolystar","init","this","svgCanvas","ChangeElementCommand","history","addToHistory","cmd","undoMgr","addCommandToHistory","$id","$click","selElems","started","newFO","showPanel","on","tool","style","removeProperty","display","setAttr","attr","val","changeSelectedAttribute","call","cot","n","Math","tan","sec","cos","t","callback","buttonTemplate","insertChildAtIndex","leftPanel","updateLeftPanel","setMode","label0","title0","label1","title1","label2","title2","label3","title3","panelTemplate","document","createElement","innerHTML","appendChild","content","cloneNode","addEventListener","event","target","value","point","i","length","elem","hasAttribute","oldPoint","getAttribute","oldPoints","radialshift","xpos","ypos","points","list","len","numberOfItems","pt","getItem","parseFloat","x","y","cx","cy","circumradius","Number","inradius","polyPoints","s","angle","PI","sin","isNaN","setAttribute","sides","oldSides","mouseDown","opts","getMode","fill","getColor","stroke","strokeWidth","getStrokeWidth","addSVGElementsFromJson","element","start_x","start_y","id","getNextId","shape","r","r2","orient","edge","mouseMove","mouse_x","mouse_y","sqrt","RadiusMultiplier","getElementById","edg","mouseUp","keep","selectedChanged","elems","selectedElement","multiselected","title","buttons","contextTools","label"],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file ext-shapes.js
|
|
3
|
+
*
|
|
4
|
+
* @license MIT
|
|
5
|
+
*
|
|
6
|
+
* @copyright 2010 Christian Tzurcanu, 2010 Alexis Deveria
|
|
7
|
+
*
|
|
8
|
+
*/
|
|
9
|
+
const e="shapes",loadExtensionTranslation=async function(t){let c;const m=t.configObj.pref("lang");try{c=await function __variableDynamicImportRuntime0__(e){switch(e){case"./locale/en.js":return Promise.resolve().then((function(){return a}));case"./locale/fr.js":return Promise.resolve().then((function(){return o}));case"./locale/pl.js":return Promise.resolve().then((function(){return l}));case"./locale/sv.js":return Promise.resolve().then((function(){return r}));case"./locale/tr.js":return Promise.resolve().then((function(){return s}));case"./locale/uk.js":return Promise.resolve().then((function(){return n}));case"./locale/zh-CN.js":return Promise.resolve().then((function(){return i}));default:return new Promise((function(t,a){("function"==typeof queueMicrotask?queueMicrotask:setTimeout)(a.bind(null,new Error("Unknown variable dynamic import: "+e)))}))}}(`./locale/${m}.js`)}catch(t){console.warn(`Missing translation (${m}) for ${e} - using 'en'`),c=await Promise.resolve().then((function(){return a}))}t.i18next.addResourceBundle(m,e,c.default)};var t={name:e,async init(){const t=this,a=t.svgCanvas,{$id:o,$click:l}=a,r=a.getSvgRoot();let s={};await loadExtensionTranslation(t);const n="shapelib",i={};let c,m,u;return{callback(){if(null===o("tool_shapelib")){const r=t.configObj.curConfig.extPath,s=`\n <se-explorerbutton id="tool_shapelib" title="${t.i18next.t(`${e}:buttons.0.title`)}" lib="${r}/ext-shapes/shapelib/"\n src="shapelib.svg"></se-explorerbutton>\n `;a.insertChildAtIndex(o("tools_left"),s,9),l(o("tool_shapelib"),(()=>{this.leftPanel.updateLeftPanel("tool_shapelib")&&a.setMode(n)}))}},mouseDown(e){if(a.getMode()!==n)return;const t=document.getElementById("tool_shapelib").dataset.draw;m=e.start_x;const o=m;u=e.start_y;const l=u,r=a.getStyle();return i.x=e.event.clientX,i.y=e.event.clientY,c=a.addSVGElementsFromJson({element:"path",curStyles:!0,attr:{d:t,id:a.getNextId(),opacity:r.opacity/2,style:"pointer-events:none"}}),c.setAttribute("transform","translate("+o+","+l+") scale(0.005) translate("+-o+","+-l+")"),a.recalculateDimensions(c),s=c.getBBox(),{started:!0}},mouseMove(e){if(a.getMode()!==n)return;const t=a.getZoom(),o=e.event,l=e.mouse_x/t,i=e.mouse_y/t,h=c.transform.baseVal,b=c.getBBox(),p=b.x,d=b.y,g=(Math.min(m,l),Math.min(u,i),Math.abs(l-m)),_=Math.abs(i-u);let f=g/s.width||1,j=_/s.height||1,y=0;l<m&&(y=s.width);let w=0;i<u&&(w=s.height);const k=r.createSVGTransform(),v=r.createSVGTransform(),M=r.createSVGTransform();if(k.setTranslate(-(p+y),-(d+w)),!o.shiftKey){const e=Math.min(Math.abs(f),Math.abs(j));f=e*(f<0?-1:1),j=e*(j<0?-1:1)}v.setScale(f,j),M.setTranslate(p+y,d+w),h.appendItem(M),h.appendItem(v),h.appendItem(k),a.recalculateDimensions(c),s=c.getBBox()},mouseUp(e){if(a.getMode()!==n)return;return{keep:e.event.clientX!==i.x&&e.event.clientY!==i.y,element:c,started:!1}}}}},a=Object.freeze({__proto__:null,default:{loading:"Loading...",categories:{basic:"Basic",object:"Objects",symbol:"Symbols",arrow:"Arrows",flowchart:"Flowchart",animal:"Animals",game:"Cards & Chess",dialog_balloon:"Dialog balloons",electronics:"Electronics",math:"Mathematical",music:"Music",misc:"Miscellaneous",raphael_1:"raphaeljs.com set 1",raphael_2:"raphaeljs.com set 2"},buttons:[{title:"Shape library"}]}}),o=Object.freeze({__proto__:null,default:{loading:"Chargement...",categories:{basic:"Basique",object:"Objets",symbol:"Symboles",arrow:"Flèches",flowchart:"Flowchart",animal:"Animaux",game:"Cartes & Echecs",dialog_balloon:"Dialog balloons",electronics:"Electronique",math:"Mathematiques",music:"Musique",misc:"Divers",raphael_1:"raphaeljs.com set 1",raphael_2:"raphaeljs.com set 2"},buttons:[{title:"Bibliothèque d'images"}]}}),l=Object.freeze({__proto__:null,default:{loading:"Ładowanie...",categories:{basic:"Podstawowe",object:"Obiekty",symbol:"Symbole",arrow:"Strzałki",flowchart:"Schematy blokowe",animal:"Zwierzęta",game:"Karty i szachy",dialog_balloon:"Dymki dialogowe",electronics:"Elektronika",math:"Matematyczne",music:"Muzyka",misc:"Różne",raphael_1:"raphaeljs.com zestaw 1",raphael_2:"raphaeljs.com zestaw 2"},buttons:[{title:"Biblioteka kształtów"}]}}),r=Object.freeze({__proto__:null,default:{loading:"Läser in...",categories:{basic:"Grundläggande",object:"Objekt",symbol:"Symboler",arrow:"Pilar",flowchart:"Flödesschema",animal:"Djur",game:"Kort & schack",dialog_balloon:"Dialogballonger",electronics:"Elektronik",math:"Matematisk",music:"Musik",misc:"Diverse",raphael_1:"raphaeljs.com uppsättning 1",raphael_2:"raphaeljs.com uppsättning 2"},buttons:[{title:"Formbibliotek"}]}}),s=Object.freeze({__proto__:null,default:{loading:"Yükleniyor...",categories:{basic:"Temel",object:"Nesneler",symbol:"Semboller",arrow:"Oklar",flowchart:"Akış Şemaları",animal:"Hayvanlar",game:"Kartlar & Satranç",dialog_balloon:"Diyalog baloncukları",electronics:"Elektronikler",math:"Matematikseller",music:"Müzik",misc:"Diğerleri",raphael_1:"raphaeljs.com set 1",raphael_2:"raphaeljs.com set 2"},buttons:[{title:"Şekil kütüphanesi"}]}}),n=Object.freeze({__proto__:null,default:{loading:"Завантаження...",categories:{basic:"Основні",object:"Об’єкти",symbol:"Символи",arrow:"Стрілки",flowchart:"Блок-схеми",animal:"Тварини",game:"Карти та Шахи",dialog_balloon:"Хмаринки діалогів",electronics:"Електроніка",math:"Математичні",music:"Музика",misc:"Різне",raphael_1:"raphaeljs.com набір 1",raphael_2:"raphaeljs.com набір 2"},buttons:[{title:"Спільна Бібліотека"}]}}),i=Object.freeze({__proto__:null,default:{loading:"正在加载...",categories:{basic:"基本",object:"对象",symbol:"符号",arrow:"箭头",flowchart:"工作流",animal:"动物",game:"棋牌",dialog_balloon:"会话框",electronics:"电子",math:"数学",music:"音乐",misc:"其他",raphael_1:"raphaeljs.com 集合 1",raphael_2:"raphaeljs.com 集合 2"},buttons:[{title:"图元库"}]}});export{t as default};
|
|
10
|
+
//# sourceMappingURL=ext-shapes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ext-shapes.js","sources":["../../../../src/editor/extensions/ext-shapes/ext-shapes.js","../../../../src/editor/extensions/ext-shapes/locale/en.js","../../../../src/editor/extensions/ext-shapes/locale/fr.js","../../../../src/editor/extensions/ext-shapes/locale/pl.js","../../../../src/editor/extensions/ext-shapes/locale/sv.js","../../../../src/editor/extensions/ext-shapes/locale/tr.js","../../../../src/editor/extensions/ext-shapes/locale/uk.js","../../../../src/editor/extensions/ext-shapes/locale/zh-CN.js"],"sourcesContent":["/**\n * @file ext-shapes.js\n *\n * @license MIT\n *\n * @copyright 2010 Christian Tzurcanu, 2010 Alexis Deveria\n *\n */\nconst name = 'shapes'\n\nconst loadExtensionTranslation = async function (svgEditor) {\n let translationModule\n const lang = svgEditor.configObj.pref('lang')\n try {\n translationModule = await import(`./locale/${lang}.js`)\n } catch (_error) {\n console.warn(`Missing translation (${lang}) for ${name} - using 'en'`)\n translationModule = await import('./locale/en.js')\n }\n svgEditor.i18next.addResourceBundle(lang, name, translationModule.default)\n}\n\nexport default {\n name,\n async init () {\n const svgEditor = this\n const canv = svgEditor.svgCanvas\n const { $id, $click } = canv\n const svgroot = canv.getSvgRoot()\n let lastBBox = {}\n await loadExtensionTranslation(svgEditor)\n\n const modeId = 'shapelib'\n const startClientPos = {}\n\n let curShape\n let startX\n let startY\n\n return {\n callback () {\n if ($id('tool_shapelib') === null) {\n const extPath = svgEditor.configObj.curConfig.extPath\n const buttonTemplate = `\n <se-explorerbutton id=\"tool_shapelib\" title=\"${svgEditor.i18next.t(`${name}:buttons.0.title`)}\" lib=\"${extPath}/ext-shapes/shapelib/\"\n src=\"shapelib.svg\"></se-explorerbutton>\n `\n canv.insertChildAtIndex($id('tools_left'), buttonTemplate, 9)\n $click($id('tool_shapelib'), () => {\n if (this.leftPanel.updateLeftPanel('tool_shapelib')) {\n canv.setMode(modeId)\n }\n })\n }\n },\n mouseDown (opts) {\n const mode = canv.getMode()\n if (mode !== modeId) { return undefined }\n\n const currentD = document.getElementById('tool_shapelib').dataset.draw\n startX = opts.start_x\n const x = startX\n startY = opts.start_y\n const y = startY\n const curStyle = canv.getStyle()\n\n startClientPos.x = opts.event.clientX\n startClientPos.y = opts.event.clientY\n\n curShape = canv.addSVGElementsFromJson({\n element: 'path',\n curStyles: true,\n attr: {\n d: currentD,\n id: canv.getNextId(),\n opacity: curStyle.opacity / 2,\n style: 'pointer-events:none'\n }\n })\n\n curShape.setAttribute('transform', 'translate(' + x + ',' + y + ') scale(0.005) translate(' + -x + ',' + -y + ')')\n\n canv.recalculateDimensions(curShape)\n\n lastBBox = curShape.getBBox()\n\n return {\n started: true\n }\n },\n mouseMove (opts) {\n const mode = canv.getMode()\n if (mode !== modeId) { return }\n\n const zoom = canv.getZoom()\n const evt = opts.event\n\n const x = opts.mouse_x / zoom\n const y = opts.mouse_y / zoom\n\n const tlist = curShape.transform.baseVal\n const box = curShape.getBBox()\n const left = box.x; const top = box.y\n\n const newbox = {\n x: Math.min(startX, x),\n y: Math.min(startY, y),\n width: Math.abs(x - startX),\n height: Math.abs(y - startY)\n }\n\n let sx = (newbox.width / lastBBox.width) || 1\n let sy = (newbox.height / lastBBox.height) || 1\n\n // Not perfect, but mostly works...\n let tx = 0\n if (x < startX) {\n tx = lastBBox.width\n }\n let ty = 0\n if (y < startY) {\n ty = lastBBox.height\n }\n\n // update the transform list with translate,scale,translate\n const translateOrigin = svgroot.createSVGTransform()\n const scale = svgroot.createSVGTransform()\n const translateBack = svgroot.createSVGTransform()\n\n translateOrigin.setTranslate(-(left + tx), -(top + ty))\n if (!evt.shiftKey) {\n const max = Math.min(Math.abs(sx), Math.abs(sy))\n\n sx = max * (sx < 0 ? -1 : 1)\n sy = max * (sy < 0 ? -1 : 1)\n }\n scale.setScale(sx, sy)\n\n translateBack.setTranslate(left + tx, top + ty)\n tlist.appendItem(translateBack)\n tlist.appendItem(scale)\n tlist.appendItem(translateOrigin)\n\n canv.recalculateDimensions(curShape)\n\n lastBBox = curShape.getBBox()\n },\n mouseUp (opts) {\n const mode = canv.getMode()\n if (mode !== modeId) { return undefined }\n\n const keepObject = (opts.event.clientX !== startClientPos.x && opts.event.clientY !== startClientPos.y)\n\n return {\n keep: keepObject,\n element: curShape,\n started: false\n }\n }\n }\n }\n}\n","export default {\n loading: 'Loading...',\n categories: {\n basic: 'Basic',\n object: 'Objects',\n symbol: 'Symbols',\n arrow: 'Arrows',\n flowchart: 'Flowchart',\n animal: 'Animals',\n game: 'Cards & Chess',\n dialog_balloon: 'Dialog balloons',\n electronics: 'Electronics',\n math: 'Mathematical',\n music: 'Music',\n misc: 'Miscellaneous',\n raphael_1: 'raphaeljs.com set 1',\n raphael_2: 'raphaeljs.com set 2'\n },\n buttons: [\n {\n title: 'Shape library'\n }\n ]\n}\n","export default {\n loading: 'Chargement...',\n categories: {\n basic: 'Basique',\n object: 'Objets',\n symbol: 'Symboles',\n arrow: 'Flèches',\n flowchart: 'Flowchart',\n animal: 'Animaux',\n game: 'Cartes & Echecs',\n dialog_balloon: 'Dialog balloons',\n electronics: 'Electronique',\n math: 'Mathematiques',\n music: 'Musique',\n misc: 'Divers',\n raphael_1: 'raphaeljs.com set 1',\n raphael_2: 'raphaeljs.com set 2'\n },\n buttons: [\n {\n title: \"Bibliothèque d'images\"\n }\n ]\n}\n","export default {\n loading: 'Ładowanie...',\n categories: {\n basic: 'Podstawowe',\n object: 'Obiekty',\n symbol: 'Symbole',\n arrow: 'Strzałki',\n flowchart: 'Schematy blokowe',\n animal: 'Zwierzęta',\n game: 'Karty i szachy',\n dialog_balloon: 'Dymki dialogowe',\n electronics: 'Elektronika',\n math: 'Matematyczne',\n music: 'Muzyka',\n misc: 'Różne',\n raphael_1: 'raphaeljs.com zestaw 1',\n raphael_2: 'raphaeljs.com zestaw 2'\n },\n buttons: [\n {\n title: 'Biblioteka kształtów'\n }\n ]\n}","export default {\n loading: 'Läser in...',\n categories: {\n basic: 'Grundläggande',\n object: 'Objekt',\n symbol: 'Symboler',\n arrow: 'Pilar',\n flowchart: 'Flödesschema',\n animal: 'Djur',\n game: 'Kort & schack',\n dialog_balloon: 'Dialogballonger',\n electronics: 'Elektronik',\n math: 'Matematisk',\n music: 'Musik',\n misc: 'Diverse',\n raphael_1: 'raphaeljs.com uppsättning 1',\n raphael_2: 'raphaeljs.com uppsättning 2'\n },\n buttons: [\n {\n title: 'Formbibliotek'\n }\n ]\n}\n","export default {\n loading: 'Yükleniyor...',\n categories: {\n basic: 'Temel',\n object: 'Nesneler',\n symbol: 'Semboller',\n arrow: 'Oklar',\n flowchart: 'Akış Şemaları',\n animal: 'Hayvanlar',\n game: 'Kartlar & Satranç',\n dialog_balloon: 'Diyalog baloncukları',\n electronics: 'Elektronikler',\n math: 'Matematikseller',\n music: 'Müzik',\n misc: 'Diğerleri',\n raphael_1: 'raphaeljs.com set 1',\n raphael_2: 'raphaeljs.com set 2'\n },\n buttons: [\n {\n title: 'Şekil kütüphanesi'\n }\n ]\n}\n","export default {\n loading: 'Завантаження...',\n categories: {\n basic: 'Основні',\n object: 'Об’єкти',\n symbol: 'Символи',\n arrow: 'Стрілки',\n flowchart: 'Блок-схеми',\n animal: 'Тварини',\n game: 'Карти та Шахи',\n dialog_balloon: 'Хмаринки діалогів',\n electronics: 'Електроніка',\n math: 'Математичні',\n music: 'Музика',\n misc: 'Різне',\n raphael_1: 'raphaeljs.com набір 1',\n raphael_2: 'raphaeljs.com набір 2'\n },\n buttons: [\n {\n title: 'Спільна Бібліотека'\n }\n ]\n}\n","export default {\n loading: '正在加载...',\n categories: {\n basic: '基本',\n object: '对象',\n symbol: '符号',\n arrow: '箭头',\n flowchart: '工作流',\n animal: '动物',\n game: '棋牌',\n dialog_balloon: '会话框',\n electronics: '电子',\n math: '数学',\n music: '音乐',\n misc: '其他',\n raphael_1: 'raphaeljs.com 集合 1',\n raphael_2: 'raphaeljs.com 集合 2'\n },\n buttons: [\n {\n title: '图元库'\n }\n ]\n}\n"],"names":["name","loadExtensionTranslation","async","svgEditor","translationModule","lang","configObj","pref","__variableDynamicImportRuntime0__","_error","console","warn","Promise","resolve","then","en$1","i18next","addResourceBundle","default","extShapes","init","this","canv","svgCanvas","$id","$click","svgroot","getSvgRoot","lastBBox","modeId","startClientPos","curShape","startX","startY","callback","extPath","curConfig","buttonTemplate","t","insertChildAtIndex","leftPanel","updateLeftPanel","setMode","mouseDown","opts","getMode","currentD","document","getElementById","dataset","draw","start_x","x","start_y","y","curStyle","getStyle","event","clientX","clientY","addSVGElementsFromJson","element","curStyles","attr","d","id","getNextId","opacity","style","setAttribute","recalculateDimensions","getBBox","started","mouseMove","zoom","getZoom","evt","mouse_x","mouse_y","tlist","transform","baseVal","box","left","top","newbox","Math","min","abs","sx","width","sy","height","tx","ty","translateOrigin","createSVGTransform","scale","translateBack","setTranslate","shiftKey","max","setScale","appendItem","mouseUp","keep","loading","categories","basic","object","symbol","arrow","flowchart","animal","game","dialog_balloon","electronics","math","music","misc","raphael_1","raphael_2","buttons","title"],"mappings":"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"}
|