@smart-factor/gem-ui-components 0.0.57 → 0.0.59

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.
Files changed (254) hide show
  1. package/dist/{Drawer-D8kHnT0B.js → Drawer-d8461jqd.js} +115 -115
  2. package/dist/SignEditor.js +72298 -0
  3. package/dist/{Stack-Dr1yNuib.js → Stack-ThmeJzqr.js} +65 -65
  4. package/dist/{Tree-B4Bd33fe.js → Tree-D_Zjc1fk.js} +711 -774
  5. package/dist/assets/SignEditor.css +1 -0
  6. package/dist/components/AuthDecorator/AuthDecorator.d.ts +1 -0
  7. package/dist/components/Dialogs/ConfirmDialog/ConfirmDialog.d.ts +11 -0
  8. package/dist/components/Dialogs/ConfirmDialog/ConfirmDialog.styles.d.ts +2 -0
  9. package/dist/components/Dialogs/ConfirmDialog/index.d.ts +1 -0
  10. package/dist/components/Dialogs/EditDialog/EditDialog.d.ts +13 -0
  11. package/dist/components/Dialogs/EditDialog/EditDialog.styles.d.ts +2 -0
  12. package/dist/components/Dialogs/EditDialog/index.d.ts +1 -0
  13. package/dist/components/Drawer/index.js +1 -1
  14. package/dist/components/Dropzone/Dropzone.d.ts +2 -1
  15. package/dist/components/Dropzone/DropzoneField.d.ts +2 -1
  16. package/dist/components/Dropzone/const.d.ts +1 -0
  17. package/dist/components/SignEditor/SignEditor.d.ts +7 -0
  18. package/dist/components/SignEditor/SignEditor.stories.d.ts +6 -0
  19. package/dist/components/SignEditor/SignEditor.styles.d.ts +33 -0
  20. package/dist/components/SignEditor/SignEditorCanvas.d.ts +7 -0
  21. package/dist/components/SignEditor/SignEditorCanvasHeader.d.ts +7 -0
  22. package/dist/components/SignEditor/SignEditorContext.d.ts +9 -0
  23. package/dist/components/SignEditor/SignEditorContextProvider.d.ts +7 -0
  24. package/dist/components/SignEditor/SignEditorEditDialog.d.ts +12 -0
  25. package/dist/components/SignEditor/SignEditorImage.d.ts +16 -0
  26. package/dist/components/SignEditor/SignEditorImagesList.d.ts +11 -0
  27. package/dist/components/SignEditor/SignEditorPicker.d.ts +1 -0
  28. package/dist/components/SignEditor/SignEditorPickerSigns.d.ts +1 -0
  29. package/dist/components/SignEditor/SignEditorPickerStencils.d.ts +1 -0
  30. package/dist/components/SignEditor/SignEditorSaveDialog.d.ts +10 -0
  31. package/dist/components/SignEditor/useIsNameUnique.d.ts +1 -0
  32. package/dist/components/SignEditor/useOnSvgSelected.d.ts +3 -0
  33. package/dist/components/SignEditor/useSaveStencil.d.ts +9 -0
  34. package/dist/components/SignEditor/useSvgMount.d.ts +2 -0
  35. package/dist/components/SvgImage/SvgImage.d.ts +10 -0
  36. package/dist/components/SvgImage/SvgImage.styles.d.ts +5 -0
  37. package/dist/components/SvgImage/convertFontToBase64.d.ts +1 -0
  38. package/dist/components/SvgImage/index.d.ts +0 -0
  39. package/dist/components/Tree/index.js +1 -1
  40. package/dist/extensions/ext-connector/ext-connector.js +11 -0
  41. package/dist/extensions/ext-connector/ext-connector.js.map +1 -0
  42. package/dist/extensions/ext-eyedropper/ext-eyedropper.js +11 -0
  43. package/dist/extensions/ext-eyedropper/ext-eyedropper.js.map +1 -0
  44. package/dist/extensions/ext-grid/ext-grid.js +10 -0
  45. package/dist/extensions/ext-grid/ext-grid.js.map +1 -0
  46. package/dist/extensions/ext-helloworld/ext-helloworld.js +10 -0
  47. package/dist/extensions/ext-helloworld/ext-helloworld.js.map +1 -0
  48. package/dist/extensions/ext-layer_view/ext-layer_view.js +9 -0
  49. package/dist/extensions/ext-layer_view/ext-layer_view.js.map +1 -0
  50. package/dist/extensions/ext-markers/ext-markers.js +30 -0
  51. package/dist/extensions/ext-markers/ext-markers.js.map +1 -0
  52. package/dist/extensions/ext-opensave/ext-opensave.js +2 -0
  53. package/dist/extensions/ext-opensave/ext-opensave.js.map +1 -0
  54. package/dist/extensions/ext-overview_window/ext-overview_window.js +11 -0
  55. package/dist/extensions/ext-overview_window/ext-overview_window.js.map +1 -0
  56. package/dist/extensions/ext-panning/ext-panning.js +10 -0
  57. package/dist/extensions/ext-panning/ext-panning.js.map +1 -0
  58. package/dist/extensions/ext-polystar/ext-polystar.js +11 -0
  59. package/dist/extensions/ext-polystar/ext-polystar.js.map +1 -0
  60. package/dist/extensions/ext-shapes/ext-shapes.js +10 -0
  61. package/dist/extensions/ext-shapes/ext-shapes.js.map +1 -0
  62. package/dist/extensions/ext-shapes/shapelib/animal.json +21 -0
  63. package/dist/extensions/ext-shapes/shapelib/arrow.json +28 -0
  64. package/dist/extensions/ext-shapes/shapelib/basic.json +32 -0
  65. package/dist/extensions/ext-shapes/shapelib/dialog_balloon.json +9 -0
  66. package/dist/extensions/ext-shapes/shapelib/electronics.json +20 -0
  67. package/dist/extensions/ext-shapes/shapelib/flowchart.json +25 -0
  68. package/dist/extensions/ext-shapes/shapelib/game.json +13 -0
  69. package/dist/extensions/ext-shapes/shapelib/index.json +18 -0
  70. package/dist/extensions/ext-shapes/shapelib/license-MIT-raphael.txt +12 -0
  71. package/dist/extensions/ext-shapes/shapelib/math.json +9 -0
  72. package/dist/extensions/ext-shapes/shapelib/misc.json +37 -0
  73. package/dist/extensions/ext-shapes/shapelib/music.json +21 -0
  74. package/dist/extensions/ext-shapes/shapelib/object.json +18 -0
  75. package/dist/extensions/ext-shapes/shapelib/raphael_1.json +65 -0
  76. package/dist/extensions/ext-shapes/shapelib/raphael_2.json +64 -0
  77. package/dist/extensions/ext-shapes/shapelib/symbol.json +28 -0
  78. package/dist/extensions/ext-storage/ext-storage.js +23 -0
  79. package/dist/extensions/ext-storage/ext-storage.js.map +1 -0
  80. package/dist/helpers/getErrorMessage.d.ts +1 -0
  81. package/dist/helpers/sanitizeSvgString.d.ts +5 -0
  82. package/dist/helpers/zodTransforms.d.ts +11 -0
  83. package/dist/hooks/useKeyOnChange.d.ts +1 -0
  84. package/dist/licenses.txt +1034 -172
  85. package/dist/main.js +2402 -38744
  86. package/dist/providers/QueryClientProvider.d.ts +7 -0
  87. package/dist/services/api.d.ts +4 -0
  88. package/dist/services/generated/api-candidate.d.ts +22942 -0
  89. package/dist/services/generated/api.d.ts +22898 -0
  90. package/dist/services/mutations/roadSigns/useCreateRoadSignFile.d.ts +9 -0
  91. package/dist/services/mutations/roadSigns/useCreateRoadSignTemplate.d.ts +9 -0
  92. package/dist/services/mutations/stencils/useCreateStencil.d.ts +9 -0
  93. package/dist/services/mutations/stencils/useCreateStencilFile.d.ts +11 -0
  94. package/dist/services/mutations/stencils/useDeleteStencil.d.ts +8 -0
  95. package/dist/services/mutations/stencils/useUpdateStencil.d.ts +10 -0
  96. package/dist/services/mutations/stencils/useUpdateStencilFile.d.ts +11 -0
  97. package/dist/services/queries/roadSigns/useGetRoadSignNameUnique.d.ts +5 -0
  98. package/dist/services/queries/roadSigns/useGetRoadSignsByGroupName.d.ts +6 -0
  99. package/dist/services/queries/roadSigns/useGetRoadSignsGroups.d.ts +5 -0
  100. package/dist/services/queries/stencils/useGetStencilById.d.ts +0 -0
  101. package/dist/services/queries/stencils/useGetStencilGroups.d.ts +5 -0
  102. package/dist/services/queries/stencils/useGetStencils.d.ts +5 -0
  103. package/dist/services/queryKeys.d.ts +8 -0
  104. package/dist/svgedit-assets/fonts/roadsign-condensed.ttf +0 -0
  105. package/dist/svgedit-assets/fonts/roadsign-normal.ttf +0 -0
  106. package/dist/svgedit-assets/images/add_subpath.svg +16 -0
  107. package/dist/svgedit-assets/images/align.svg +5 -0
  108. package/dist/svgedit-assets/images/align_bottom.svg +1 -0
  109. package/dist/svgedit-assets/images/align_center.svg +1 -0
  110. package/dist/svgedit-assets/images/align_distrib_horiz.svg +1 -0
  111. package/dist/svgedit-assets/images/align_distrib_verti.svg +1 -0
  112. package/dist/svgedit-assets/images/align_left.svg +1 -0
  113. package/dist/svgedit-assets/images/align_middle.svg +1 -0
  114. package/dist/svgedit-assets/images/align_right.svg +1 -0
  115. package/dist/svgedit-assets/images/align_top.svg +1 -0
  116. package/dist/svgedit-assets/images/anchor_end.svg +8 -0
  117. package/dist/svgedit-assets/images/anchor_middle.svg +8 -0
  118. package/dist/svgedit-assets/images/anchor_start.svg +8 -0
  119. package/dist/svgedit-assets/images/angle.svg +1 -0
  120. package/dist/svgedit-assets/images/arrow_down.svg +3 -0
  121. package/dist/svgedit-assets/images/arrow_right.svg +3 -0
  122. package/dist/svgedit-assets/images/arrow_right_big.svg +3 -0
  123. package/dist/svgedit-assets/images/blur.svg +1 -0
  124. package/dist/svgedit-assets/images/bold.svg +8 -0
  125. package/dist/svgedit-assets/images/box.svg +3 -0
  126. package/dist/svgedit-assets/images/box_o.svg +3 -0
  127. package/dist/svgedit-assets/images/c_radius.svg +5 -0
  128. package/dist/svgedit-assets/images/cancel.svg +9 -0
  129. package/dist/svgedit-assets/images/circle.svg +1 -0
  130. package/dist/svgedit-assets/images/clone.svg +1 -0
  131. package/dist/svgedit-assets/images/close_path.svg +14 -0
  132. package/dist/svgedit-assets/images/closepath_icons.svg +41 -0
  133. package/dist/svgedit-assets/images/config.svg +1 -0
  134. package/dist/svgedit-assets/images/conn.svg +1 -0
  135. package/dist/svgedit-assets/images/context_menu.svg +9 -0
  136. package/dist/svgedit-assets/images/cursors/circle_cursor.svg +14 -0
  137. package/dist/svgedit-assets/images/cursors/ellipse_cursor.svg +14 -0
  138. package/dist/svgedit-assets/images/cursors/rect_cursor.svg +14 -0
  139. package/dist/svgedit-assets/images/cursors/square_cursor.svg +13 -0
  140. package/dist/svgedit-assets/images/delete.svg +1 -0
  141. package/dist/svgedit-assets/images/docprop.svg +1 -0
  142. package/dist/svgedit-assets/images/docprops.svg +19 -0
  143. package/dist/svgedit-assets/images/editPref.svg +1 -0
  144. package/dist/svgedit-assets/images/edit_foreign.svg +57 -0
  145. package/dist/svgedit-assets/images/ellipse.svg +1 -0
  146. package/dist/svgedit-assets/images/export.svg +1 -0
  147. package/dist/svgedit-assets/images/eye.svg +12 -0
  148. package/dist/svgedit-assets/images/eye_dropper.svg +1 -0
  149. package/dist/svgedit-assets/images/fh_ellipse.svg +1 -0
  150. package/dist/svgedit-assets/images/fh_rect.svg +1 -0
  151. package/dist/svgedit-assets/images/fill.svg +8 -0
  152. package/dist/svgedit-assets/images/fontsize.svg +4 -0
  153. package/dist/svgedit-assets/images/forwardslash.svg +3 -0
  154. package/dist/svgedit-assets/images/globe_link.svg +1 -0
  155. package/dist/svgedit-assets/images/go_down.svg +9 -0
  156. package/dist/svgedit-assets/images/go_up.svg +9 -0
  157. package/dist/svgedit-assets/images/grid.svg +1 -0
  158. package/dist/svgedit-assets/images/group_elements.svg +1 -0
  159. package/dist/svgedit-assets/images/handle.svg +1 -0
  160. package/dist/svgedit-assets/images/height.svg +3 -0
  161. package/dist/svgedit-assets/images/hello_world.svg +11 -0
  162. package/dist/svgedit-assets/images/image.svg +1 -0
  163. package/dist/svgedit-assets/images/imagelib.svg +10 -0
  164. package/dist/svgedit-assets/images/import.svg +10 -0
  165. package/dist/svgedit-assets/images/importImg.svg +1 -0
  166. package/dist/svgedit-assets/images/italic.svg +8 -0
  167. package/dist/svgedit-assets/images/layer_view.svg +6 -0
  168. package/dist/svgedit-assets/images/leftarrow.svg +3 -0
  169. package/dist/svgedit-assets/images/leftarrow_o.svg +3 -0
  170. package/dist/svgedit-assets/images/letter_spacing.svg +17 -0
  171. package/dist/svgedit-assets/images/library.svg +1 -0
  172. package/dist/svgedit-assets/images/linecap_butt.svg +1 -0
  173. package/dist/svgedit-assets/images/linecap_round.svg +1 -0
  174. package/dist/svgedit-assets/images/linecap_square.svg +1 -0
  175. package/dist/svgedit-assets/images/linejoin_bevel.svg +1 -0
  176. package/dist/svgedit-assets/images/linejoin_miter.svg +1 -0
  177. package/dist/svgedit-assets/images/linejoin_round.svg +1 -0
  178. package/dist/svgedit-assets/images/link_controls.svg +7 -0
  179. package/dist/svgedit-assets/images/logo.svg +25 -0
  180. package/dist/svgedit-assets/images/mcircle.svg +3 -0
  181. package/dist/svgedit-assets/images/mcircle_o.svg +3 -0
  182. package/dist/svgedit-assets/images/mkr_markers_dimension.svg +7 -0
  183. package/dist/svgedit-assets/images/mkr_markers_label.svg +5 -0
  184. package/dist/svgedit-assets/images/mkr_markers_off.svg +3 -0
  185. package/dist/svgedit-assets/images/move_bottom.svg +1 -0
  186. package/dist/svgedit-assets/images/move_top.svg +1 -0
  187. package/dist/svgedit-assets/images/netlify-dark.svg +17 -0
  188. package/dist/svgedit-assets/images/new.svg +1 -0
  189. package/dist/svgedit-assets/images/no_color.svg +4 -0
  190. package/dist/svgedit-assets/images/node_clone.svg +8 -0
  191. package/dist/svgedit-assets/images/node_delete.svg +10 -0
  192. package/dist/svgedit-assets/images/nomarker.svg +3 -0
  193. package/dist/svgedit-assets/images/ok.svg +9 -0
  194. package/dist/svgedit-assets/images/opacity.svg +12 -0
  195. package/dist/svgedit-assets/images/open.svg +1 -0
  196. package/dist/svgedit-assets/images/open_path.svg +17 -0
  197. package/dist/svgedit-assets/images/openpath.png +0 -0
  198. package/dist/svgedit-assets/images/panning.svg +1 -0
  199. package/dist/svgedit-assets/images/path.svg +1 -0
  200. package/dist/svgedit-assets/images/pen.svg +1 -0
  201. package/dist/svgedit-assets/images/pencil.svg +1 -0
  202. package/dist/svgedit-assets/images/polygon.svg +1 -0
  203. package/dist/svgedit-assets/images/rect.svg +1 -0
  204. package/dist/svgedit-assets/images/redo.svg +1 -0
  205. package/dist/svgedit-assets/images/reorient.svg +1 -0
  206. package/dist/svgedit-assets/images/reverseslash.svg +3 -0
  207. package/dist/svgedit-assets/images/rightarrow.svg +3 -0
  208. package/dist/svgedit-assets/images/rightarrow_o.svg +3 -0
  209. package/dist/svgedit-assets/images/rotate.svg +4 -0
  210. package/dist/svgedit-assets/images/save.svg +16 -0
  211. package/dist/svgedit-assets/images/saveImg.svg +1 -0
  212. package/dist/svgedit-assets/images/select.svg +1 -0
  213. package/dist/svgedit-assets/images/select_node.svg +4 -0
  214. package/dist/svgedit-assets/images/shapelib.svg +1 -0
  215. package/dist/svgedit-assets/images/source.svg +1 -0
  216. package/dist/svgedit-assets/images/square.svg +1 -0
  217. package/dist/svgedit-assets/images/star.svg +1 -0
  218. package/dist/svgedit-assets/images/star_o.svg +3 -0
  219. package/dist/svgedit-assets/images/stroke.svg +3 -0
  220. package/dist/svgedit-assets/images/svg-edit-home.svg +26 -0
  221. package/dist/svgedit-assets/images/text.svg +1 -0
  222. package/dist/svgedit-assets/images/text_decoration_linethrough.svg +6 -0
  223. package/dist/svgedit-assets/images/text_decoration_overline.svg +6 -0
  224. package/dist/svgedit-assets/images/text_decoration_underline.svg +6 -0
  225. package/dist/svgedit-assets/images/text_length.svg +19 -0
  226. package/dist/svgedit-assets/images/textmarker.svg +3 -0
  227. package/dist/svgedit-assets/images/textmarker_bottom.svg +3 -0
  228. package/dist/svgedit-assets/images/textmarker_top.svg +3 -0
  229. package/dist/svgedit-assets/images/to_path.svg +1 -0
  230. package/dist/svgedit-assets/images/tool_add_subpath.svg +1 -0
  231. package/dist/svgedit-assets/images/tool_foreign.svg +30 -0
  232. package/dist/svgedit-assets/images/tool_imagelib.svg +10 -0
  233. package/dist/svgedit-assets/images/tool_node_clone.svg +1 -0
  234. package/dist/svgedit-assets/images/tool_node_delete.svg +1 -0
  235. package/dist/svgedit-assets/images/tool_node_link.svg +1 -0
  236. package/dist/svgedit-assets/images/tool_openclose_path.svg +1 -0
  237. package/dist/svgedit-assets/images/tool_placemark.svg +11 -0
  238. package/dist/svgedit-assets/images/triangle.svg +3 -0
  239. package/dist/svgedit-assets/images/triangle_o.svg +3 -0
  240. package/dist/svgedit-assets/images/undo.svg +1 -0
  241. package/dist/svgedit-assets/images/ungroup.svg +21 -0
  242. package/dist/svgedit-assets/images/unlink_use.svg +14 -0
  243. package/dist/svgedit-assets/images/verticalslash.svg +3 -0
  244. package/dist/svgedit-assets/images/warning.svg +11 -0
  245. package/dist/svgedit-assets/images/webappfind.svg +23 -0
  246. package/dist/svgedit-assets/images/width.svg +3 -0
  247. package/dist/svgedit-assets/images/wireframe.svg +1 -0
  248. package/dist/svgedit-assets/images/word_spacing.svg +15 -0
  249. package/dist/svgedit-assets/images/xmark.svg +3 -0
  250. package/dist/svgedit-assets/images/zoom.svg +1 -0
  251. package/dist/theme-BzEoBwfH.js +37291 -0
  252. package/dist/types/generic.d.ts +1 -0
  253. package/dist/useFormControl-Cj8rSR6R.js +68 -0
  254. package/package.json +29 -5
@@ -0,0 +1 @@
1
+ :root{--main-bg-color: #72797A;--text-color: #000000;--border-color: #808080;--canvas-bg-color: #B2B2B2;--link-color: #19c;--ruler-color: #B2B2B2;--icon-bg-color: #72797A;--icon-bg-color-hover: #2B3C45;--input-color: #B2B2B2;--orange-color: #f9bc01;--global-se-spin-input-width: 82px}.svg_editor *{transform-origin:0 0}.svg_editor{display:grid;grid-template-rows:auto 15px 1fr 40px;grid-template-columns:40px 15px 50px 1fr 15px;grid-template-areas:"main main main top top" "left corner rulerX rulerX side" "left rulerY workarea workarea side" "left bottom bottom bottom bottom";font-size:8pt;background:var(--main-bg-color);font-family:Verdana,Helvetica,Arial;color:var(--text-color);-webkit-user-select:text;user-select:text;width:100%;height:100%}#title_panel>p{color:#fff;padding-left:5px;padding-right:3px;font-weight:700}@media screen and (max-width:1250px){.svg_editor{grid-template-rows:minmax(80px,auto) 15px 1fr 40px}}.svg_editor.open{grid-template-columns:34px 15px 50px 1fr 220px}#svgroot{-webkit-user-select:none;user-select:none;position:absolute;top:0;left:0}#workarea{grid-area:workarea;background-color:#a0a0a0;border:1px solid var(--border-color);overflow:auto;text-align:center}#svgcanvas{line-height:normal;display:inline-block;background:var(--canvas-bg-color);text-align:center;vertical-align:middle;position:relative}#sidepanels{grid-area:side}#sidepanel_handle{writing-mode:vertical-rl;text-orientation:upright;color:#fff;position:absolute;cursor:pointer;top:50%}.svg_editor:not(.open) #sidepanel_content{display:none}a{color:var(--link-color)}hr{border:none;border-bottom:1px solid var(--border-color)}#linkLabel>svg{height:20px;padding-top:4px}#layersLabel{color:#fff}#layerpanel{-webkit-user-select:none;user-select:none;padding-left:15px}#layerbuttons{margin:0;padding:0 2px;width:125px;height:20px;border:0px;overflow:hidden;display:flex;justify-content:center;align-items:center}#layerlist{margin:1px;padding:0;width:132px;border-collapse:collapse;border:1px solid var(--border-color);background-color:#fff}#layerlist tr.layer{background-color:#fff;margin:0;padding:0}#layerlist tr.layersel{border:1px solid var(--border-color);background-color:#ccc}#layerlist td.layervis{width:22px;cursor:pointer}#layerlist td.layerinvis{background-image:none;cursor:pointer}#layerlist td.layervis *{display:block}#layerlist td.layerinvis *{display:none}#layerlist td.layername{cursor:pointer}#layerlist td.layername:hover{color:#00f}#layerlist tr.layersel td.layername{font-weight:700}#selLayerLabel{white-space:nowrap}#selLayerNames{display:block;top:-8px;position:relative}#main_button{grid-area:main;color:#fff;border-radius:3px;padding-block:2px;padding-left:3px;height:34px}#main_icon{position:relative;top:-2px;left:-2px;width:95px;line-height:26px}#main_icon:hover{background:#eee!important}#main_icon.buttondown{background:#eee!important;-moz-box-shadow:none!important;-webkit-box-shadow:none!important;box-shadow:none!important;border-radius:3px 3px 0 0}#logo{margin-top:-2px}#logo img{border:0;width:28px;height:28px}#main_icon>div{float:left}#main_button .dropdown{position:absolute;right:7px;top:4px}#main_icon span{position:absolute;top:0;left:0;bottom:0;right:0;display:block;z-index:2;font-weight:700;padding-left:34px;line-height:32px;font-family:sans-serif}#main_menu{z-index:12;background:#eee;position:relative;width:230px;padding:5px;-moz-box-shadow:#555 1px 1px 4px;-webkit-box-shadow:#555 1px 1px 4px;box-shadow:#555 1px 1px 4px;font-size:1.1em;display:none;overflow:hidden;clear:both;top:-9px}#main_menu ul,#main_menu li{list-style:none;margin:0;padding:0}#main_menu li{line-height:22px;padding-top:7px;padding-left:7px;margin:-5px;overflow:auto;cursor:pointer}#main_menu li:hover{background:#ffc}#main_menu li>div{float:left;padding-right:5px}#main_menu p{margin-top:5px}#tools_top{grid-area:top;display:flex;flex-direction:row;flex-wrap:wrap;align-items:flex-start;background-color:var(--main-bg-color)}#tools_top>*{display:flex;flex-direction:row;flex-wrap:wrap;background-color:var(--main-bg-color)}#tools_bottom{grid-area:bottom;overflow-x:auto;overflow-y:hidden;display:flex;align-items:center;scrollbar-width:thin}#tools_bottom::-webkit-scrollbar{width:3px;height:3px}#tools_bottom se-list,#tools_bottom se-select{margin-bottom:8px}#zoom{color:var(--text-color);background-color:var(--main-bg-color);border:none}#tools_left{grid-area:left;border-right:none;margin-left:auto;margin-right:auto;overflow-y:scroll;scrollbar-width:none;-webkit-user-select:none;user-select:none}#tools_left::-webkit-scrollbar{width:3px}#tools_left::-webkit-scrollbar-track,#tools_bottom::-webkit-scrollbar-track{background:transparent}#tools_left::-webkit-scrollbar-thumb,#tools_bottom::-webkit-scrollbar-thumb{background-color:#464646}#workarea.wireframe #svgcontent *{fill:none;stroke:#000;stroke-width:1px;stroke-opacity:1;stroke-dasharray:0;opacity:1;pointer-events:stroke;filter:none}#workarea.wireframe #svgcontent text{fill:#000;stroke:none}#workarea.wireframe #canvasBackground>rect{fill:#fff!important}#cur_context_panel{grid-area:rulerX;line-height:22px;overflow:auto;padding-left:5px;font-size:12px;background:#000c;color:#ccc}#cur_context_panel a{float:none;text-decoration:none}#cur_context_panel a:hover{text-decoration:underline}.dropdown button{width:15px;height:21px;margin:6px 0 0 1px;padding:0;border-left:1px solid #FFFFFF;border-top:1px solid #FFFFFF;border-right:1px solid var(--border-color);border-bottom:1px solid var(--border-color);background-color:#e8e8e8}.dropdown button.down{border-left:1px solid var(--border-color);border-top:1px solid var(--border-color);border-right:1px solid #FFFFFF;border-bottom:1px solid #FFFFFF;background-color:#5a6162}.dropdown ul{list-style:none;position:absolute;margin:0;padding:0;left:-85px;top:26px;z-index:4;display:none}.dropup ul{top:auto;bottom:24px}.dropdown li{display:block;width:120px;padding:4px;background:#e8e8e8;border:1px solid #5a6162;margin:0 0 -1px;line-height:16px}.dropdown li:hover{background-color:#ffc}.dropdown li.special{padding:10px 4px}.dropdown li.special:hover{background:#ffc}#font_family_dropdown-list li{font-size:1.4em}#font_family{margin-left:5px;margin-right:0}#main_menu li#tool_open,#main_menu li#tool_import{position:relative;overflow:hidden}#tool_image{overflow:hidden}#tool_open input,#tool_import input,#tool_image input{position:absolute;opacity:0;font-size:10em;top:-5px;right:-5px;margin:0;cursor:pointer}.disabled{opacity:.5;cursor:default}.tool_sep{border-left:1px outset #EEE;margin:5px 1px;height:30px}.width_label{padding-right:5px}#text{position:absolute;left:-9999px}.bottom-icon{width:22px}#palette{margin-left:auto;margin-right:16px;display:flex;align-items:center}#stroke_expand{width:0;overflow:hidden}#toggle_stroke_tools{position:absolute;right:0;top:0;bottom:0;width:25px;text-align:center;border-radius:0 3px 3px 0;margin:0}#toggle_stroke_tools:before{content:">>";letter-spacing:-3px;font-weight:700;color:#666}.expanded #toggle_stroke_tools:before{content:"<<"}#toggle_stroke_tools:hover{background:#fff}#tool_opacity{right:0}#tool_opacity{overflow:visible}ul li.current{background-color:#f4e284}#copyright{text-align:right;padding-right:.3em}.overlay{position:absolute;top:0;right:0;left:0;bottom:0;background-color:#000;opacity:.6;z-index:5}#save_output_btns{display:none;text-align:left}#save_output_btns p{margin:.5em 1.5em;display:inline-block}#bg_blocks{overflow:auto;margin-left:30px}.dropdown li.tool_button{width:24px}@font-face{font-family:roadsign-normal;src:url(/fonts/roadsign-normal.ttf)}@font-face{font-family:roadsign-condensed;src:url(/fonts/roadsign-condensed.ttf)}#svgedit-container #tool_open,#svgedit-container #tool_import{display:none}
@@ -0,0 +1 @@
1
+ export declare const AuthDecorator: () => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,11 @@
1
+ import { FC } from 'react';
2
+
3
+ interface ConfirmDialog {
4
+ open: boolean;
5
+ onSubmit: () => void;
6
+ onClose: () => void;
7
+ title?: string;
8
+ subtitle?: string;
9
+ }
10
+ export declare const ConfirmDialog: FC<ConfirmDialog>;
11
+ export {};
@@ -0,0 +1,2 @@
1
+ /// <reference types="react" />
2
+ export declare const Actions: import('@emotion/styled').StyledComponent<import('@mui/system').MUIStyledCommonProps<import('@mui/material').Theme>, import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {}>;
@@ -0,0 +1 @@
1
+ export { ConfirmDialog } from './ConfirmDialog';
@@ -0,0 +1,13 @@
1
+ import { FC, ReactNode } from 'react';
2
+ import { DialogProps } from '../../Dialog/types';
3
+
4
+ interface EditDialogProps extends DialogProps {
5
+ open: boolean;
6
+ onSubmit: () => void;
7
+ onClose: () => void;
8
+ children: ReactNode;
9
+ title: string;
10
+ subtitle?: string;
11
+ }
12
+ export declare const EditDialog: FC<EditDialogProps>;
13
+ export {};
@@ -0,0 +1,2 @@
1
+ /// <reference types="react" />
2
+ export declare const Actions: import('@emotion/styled').StyledComponent<import('@mui/system').MUIStyledCommonProps<import('@mui/material').Theme>, import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {}>;
@@ -0,0 +1 @@
1
+ export { EditDialog } from './EditDialog';
@@ -1,4 +1,4 @@
1
- import { D as e } from "../../Drawer-D8kHnT0B.js";
1
+ import { D as e } from "../../Drawer-d8461jqd.js";
2
2
  export {
3
3
  e as Drawer
4
4
  };
@@ -3,5 +3,6 @@ export interface DropzoneProps {
3
3
  file?: File;
4
4
  isImage?: boolean;
5
5
  errorMessage?: string;
6
+ accept?: Record<string, string[]>;
6
7
  }
7
- export declare const Dropzone: ({ onChange, file, isImage, errorMessage, }: DropzoneProps) => import("react/jsx-runtime").JSX.Element;
8
+ export declare const Dropzone: ({ onChange, file, isImage, errorMessage, accept, }: DropzoneProps) => import("react/jsx-runtime").JSX.Element;
@@ -6,7 +6,8 @@ interface DropFieldProps<T extends FieldValues> {
6
6
  label?: string;
7
7
  isImage?: boolean;
8
8
  errorMessage?: string;
9
- onChange: (file: File | null) => void;
9
+ onChange?: (file: File | null) => void;
10
+ accept?: Record<string, string[]>;
10
11
  }
11
12
  export declare const DropzoneField: <T extends FieldValues>({ name, label, control, isImage, onChange: propsOnChange, ...rest }: DropFieldProps<T>) => import("react/jsx-runtime").JSX.Element;
12
13
  export {};
@@ -4,6 +4,7 @@ export declare const ACCEPTED_FILE_TYPES: {
4
4
  'image/jpg': string[];
5
5
  'image/jpeg': string[];
6
6
  'image/heic': string[];
7
+ 'image/svg': string[];
7
8
  'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet': string[];
8
9
  'application/vnd.ms-excel': string[];
9
10
  'application/msword': string[];
@@ -0,0 +1,7 @@
1
+
2
+ interface SignEditorProps {
3
+ className?: string;
4
+ onRoadSignAdded?: () => void;
5
+ }
6
+ declare const SignEditor: (props: SignEditorProps) => import("react/jsx-runtime").JSX.Element;
7
+ export default SignEditor;
@@ -0,0 +1,6 @@
1
+ import { Meta, StoryObj } from '@storybook/react';
2
+ import { default as SignEditor } from './SignEditor';
3
+
4
+ declare const meta: Meta<typeof SignEditor>;
5
+ export default meta;
6
+ export declare const Docs: StoryObj;
@@ -0,0 +1,33 @@
1
+ /// <reference types="react" />
2
+ export declare const SignEditor: import('@emotion/styled').StyledComponent<import('@mui/system').BoxOwnProps<import('@mui/material').Theme> & Omit<Omit<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & {
3
+ ref?: ((instance: HTMLDivElement | null) => void) | import('react').RefObject<HTMLDivElement> | null | undefined;
4
+ }, keyof import('@mui/system').BoxOwnProps<import('@mui/material').Theme>> & import('@mui/system').MUIStyledCommonProps<import('@mui/material').Theme>, {}, {}>;
5
+ export declare const SignEditorPicker: import('@emotion/styled').StyledComponent<import('@mui/system').BoxOwnProps<import('@mui/material').Theme> & Omit<Omit<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & {
6
+ ref?: ((instance: HTMLDivElement | null) => void) | import('react').RefObject<HTMLDivElement> | null | undefined;
7
+ }, keyof import('@mui/system').BoxOwnProps<import('@mui/material').Theme>> & import('@mui/system').MUIStyledCommonProps<import('@mui/material').Theme>, {}, {}>;
8
+ export declare const SignEditorCanvas: import('@emotion/styled').StyledComponent<import('@mui/system').BoxOwnProps<import('@mui/material').Theme> & Omit<Omit<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & {
9
+ ref?: ((instance: HTMLDivElement | null) => void) | import('react').RefObject<HTMLDivElement> | null | undefined;
10
+ }, keyof import('@mui/system').BoxOwnProps<import('@mui/material').Theme>> & import('@mui/system').MUIStyledCommonProps<import('@mui/material').Theme>, {}, {}>;
11
+ export declare const SignEditorCanvasHeader: import('@emotion/styled').StyledComponent<import('@mui/system').BoxOwnProps<import('@mui/material').Theme> & Omit<Omit<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & {
12
+ ref?: ((instance: HTMLDivElement | null) => void) | import('react').RefObject<HTMLDivElement> | null | undefined;
13
+ }, keyof import('@mui/system').BoxOwnProps<import('@mui/material').Theme>> & import('@mui/system').MUIStyledCommonProps<import('@mui/material').Theme>, {}, {}>;
14
+ export declare const SvgEditContainer: import('@emotion/styled').StyledComponent<import('@mui/system').MUIStyledCommonProps<import('@mui/material').Theme>, import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {}>;
15
+ export declare const SignEditorCanvasHeaderTitle: import('@emotion/styled').StyledComponent<import('@mui/material').TypographyOwnProps & import('@mui/material/OverridableComponent').CommonProps & Omit<Omit<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, "ref"> & {
16
+ ref?: ((instance: HTMLSpanElement | null) => void) | import('react').RefObject<HTMLSpanElement> | null | undefined;
17
+ }, "className" | "style" | "classes" | "children" | "sx" | "p" | "color" | "border" | "boxShadow" | "fontWeight" | "zIndex" | "alignContent" | "alignItems" | "alignSelf" | "bottom" | "boxSizing" | "columnGap" | "display" | "flexBasis" | "flexDirection" | "flexGrow" | "flexShrink" | "flexWrap" | "fontFamily" | "fontSize" | "fontStyle" | "gridAutoColumns" | "gridAutoFlow" | "gridAutoRows" | "gridTemplateAreas" | "gridTemplateColumns" | "gridTemplateRows" | "height" | "justifyContent" | "justifyItems" | "justifySelf" | "left" | "letterSpacing" | "lineHeight" | "marginBlockEnd" | "marginBlockStart" | "marginBottom" | "marginInlineEnd" | "marginInlineStart" | "marginLeft" | "marginRight" | "marginTop" | "maxHeight" | "maxWidth" | "minHeight" | "minWidth" | "order" | "paddingBlockEnd" | "paddingBlockStart" | "paddingBottom" | "paddingInlineEnd" | "paddingInlineStart" | "paddingLeft" | "paddingRight" | "paddingTop" | "position" | "right" | "rowGap" | "textAlign" | "textOverflow" | "textTransform" | "top" | "visibility" | "whiteSpace" | "width" | "borderBottom" | "borderColor" | "borderLeft" | "borderRadius" | "borderRight" | "borderTop" | "flex" | "gap" | "gridArea" | "gridColumn" | "gridRow" | "margin" | "marginBlock" | "marginInline" | "overflow" | "padding" | "paddingBlock" | "paddingInline" | "bgcolor" | "m" | "mt" | "mr" | "mb" | "ml" | "mx" | "marginX" | "my" | "marginY" | "pt" | "pr" | "pb" | "pl" | "px" | "paddingX" | "py" | "paddingY" | "typography" | "displayPrint" | "align" | "variant" | "gutterBottom" | "noWrap" | "paragraph" | "variantMapping"> & import('@mui/system').MUIStyledCommonProps<import('@mui/material').Theme>, {}, {}>;
18
+ export declare const SignEditorCanvasHeaderActions: import('@emotion/styled').StyledComponent<import('@mui/system').BoxOwnProps<import('@mui/material').Theme> & Omit<Omit<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & {
19
+ ref?: ((instance: HTMLDivElement | null) => void) | import('react').RefObject<HTMLDivElement> | null | undefined;
20
+ }, keyof import('@mui/system').BoxOwnProps<import('@mui/material').Theme>> & import('@mui/system').MUIStyledCommonProps<import('@mui/material').Theme>, {}, {}>;
21
+ export declare const SvgImageBackground: import('@emotion/styled').StyledComponent<import('@mui/system').MUIStyledCommonProps<import('@mui/material').Theme>, import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {}>;
22
+ export declare const SignEditorImageList: import('@emotion/styled').StyledComponent<import('@mui/material').GridOwnProps & import('@mui/material/OverridableComponent').CommonProps & Omit<Omit<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & {
23
+ ref?: ((instance: HTMLDivElement | null) => void) | import('react').RefObject<HTMLDivElement> | null | undefined;
24
+ }, "className" | "style" | "classes" | "children" | "sx" | "p" | "color" | "border" | "boxShadow" | "fontWeight" | "zIndex" | "alignContent" | "alignItems" | "alignSelf" | "bottom" | "boxSizing" | "columnGap" | "direction" | "display" | "flexBasis" | "flexDirection" | "flexGrow" | "flexShrink" | "flexWrap" | "fontFamily" | "fontSize" | "fontStyle" | "gridAutoColumns" | "gridAutoFlow" | "gridAutoRows" | "gridTemplateAreas" | "gridTemplateColumns" | "gridTemplateRows" | "height" | "justifyContent" | "justifyItems" | "justifySelf" | "left" | "letterSpacing" | "lineHeight" | "marginBlockEnd" | "marginBlockStart" | "marginBottom" | "marginInlineEnd" | "marginInlineStart" | "marginLeft" | "marginRight" | "marginTop" | "maxHeight" | "maxWidth" | "minHeight" | "minWidth" | "order" | "paddingBlockEnd" | "paddingBlockStart" | "paddingBottom" | "paddingInlineEnd" | "paddingInlineStart" | "paddingLeft" | "paddingRight" | "paddingTop" | "position" | "right" | "rowGap" | "textAlign" | "textOverflow" | "textTransform" | "top" | "visibility" | "whiteSpace" | "width" | "borderBottom" | "borderColor" | "borderLeft" | "borderRadius" | "borderRight" | "borderTop" | "columns" | "container" | "flex" | "gap" | "gridArea" | "gridColumn" | "gridRow" | "margin" | "marginBlock" | "marginInline" | "overflow" | "padding" | "paddingBlock" | "paddingInline" | "bgcolor" | "m" | "mt" | "mr" | "mb" | "ml" | "mx" | "marginX" | "my" | "marginY" | "pt" | "pr" | "pb" | "pl" | "px" | "paddingX" | "py" | "paddingY" | "typography" | "displayPrint" | "spacing" | "wrap" | "xs" | "sm" | "md" | "lg" | "xl" | "item" | "columnSpacing" | "rowSpacing" | "zeroMinWidth"> & import('@mui/system').MUIStyledCommonProps<import('@mui/material').Theme>, {}, {}>;
25
+ export declare const SignEditorImage: import('@emotion/styled').StyledComponent<import('@mui/system').MUIStyledCommonProps<import('@mui/material').Theme>, import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {}>;
26
+ export declare const SignEditorImagePanel: import('@emotion/styled').StyledComponent<import('@mui/system').MUIStyledCommonProps<import('@mui/material').Theme>, import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {}>;
27
+ export declare const SignEditorImageName: import('@emotion/styled').StyledComponent<import('@mui/material').TypographyOwnProps & import('@mui/material/OverridableComponent').CommonProps & Omit<Omit<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, "ref"> & {
28
+ ref?: ((instance: HTMLSpanElement | null) => void) | import('react').RefObject<HTMLSpanElement> | null | undefined;
29
+ }, "className" | "style" | "classes" | "children" | "sx" | "p" | "color" | "border" | "boxShadow" | "fontWeight" | "zIndex" | "alignContent" | "alignItems" | "alignSelf" | "bottom" | "boxSizing" | "columnGap" | "display" | "flexBasis" | "flexDirection" | "flexGrow" | "flexShrink" | "flexWrap" | "fontFamily" | "fontSize" | "fontStyle" | "gridAutoColumns" | "gridAutoFlow" | "gridAutoRows" | "gridTemplateAreas" | "gridTemplateColumns" | "gridTemplateRows" | "height" | "justifyContent" | "justifyItems" | "justifySelf" | "left" | "letterSpacing" | "lineHeight" | "marginBlockEnd" | "marginBlockStart" | "marginBottom" | "marginInlineEnd" | "marginInlineStart" | "marginLeft" | "marginRight" | "marginTop" | "maxHeight" | "maxWidth" | "minHeight" | "minWidth" | "order" | "paddingBlockEnd" | "paddingBlockStart" | "paddingBottom" | "paddingInlineEnd" | "paddingInlineStart" | "paddingLeft" | "paddingRight" | "paddingTop" | "position" | "right" | "rowGap" | "textAlign" | "textOverflow" | "textTransform" | "top" | "visibility" | "whiteSpace" | "width" | "borderBottom" | "borderColor" | "borderLeft" | "borderRadius" | "borderRight" | "borderTop" | "flex" | "gap" | "gridArea" | "gridColumn" | "gridRow" | "margin" | "marginBlock" | "marginInline" | "overflow" | "padding" | "paddingBlock" | "paddingInline" | "bgcolor" | "m" | "mt" | "mr" | "mb" | "ml" | "mx" | "marginX" | "my" | "marginY" | "pt" | "pr" | "pb" | "pl" | "px" | "paddingX" | "py" | "paddingY" | "typography" | "displayPrint" | "align" | "variant" | "gutterBottom" | "noWrap" | "paragraph" | "variantMapping"> & import('@mui/system').MUIStyledCommonProps<import('@mui/material').Theme>, {}, {}>;
30
+ export declare const SignEditorImageListPlaceholder: import('@emotion/styled').StyledComponent<import('@mui/system').MUIStyledCommonProps<import('@mui/material').Theme>, import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {}>;
31
+ export declare const TabContent: import('@emotion/styled').StyledComponent<import('@mui/system').MUIStyledCommonProps<import('@mui/material').Theme>, import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {}>;
32
+ export declare const Collapse: import('@emotion/styled').StyledComponent<import('@mui/system').MUIStyledCommonProps<import('@mui/material').Theme>, import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLDivElement>, HTMLDivElement>, {}>;
33
+ export declare const CollapseButton: import('@emotion/styled').StyledComponent<import('@mui/system').MUIStyledCommonProps<import('@mui/material').Theme>, import('react').DetailedHTMLProps<import('react').ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>, {}>;
@@ -0,0 +1,7 @@
1
+ import { FC } from 'react';
2
+
3
+ interface SignEditorCanvasProps {
4
+ onRoadSignAdded?: () => void;
5
+ }
6
+ export declare const SignEditorCanvas: FC<SignEditorCanvasProps>;
7
+ export {};
@@ -0,0 +1,7 @@
1
+ import { FC } from 'react';
2
+
3
+ interface SignEditorCanvasHeaderProps {
4
+ onRoadSignAdded?: () => void;
5
+ }
6
+ export declare const SignEditorCanvasHeader: FC<SignEditorCanvasHeaderProps>;
7
+ export {};
@@ -0,0 +1,9 @@
1
+ import { RefObject } from 'react';
2
+
3
+ type SvgEdit = any;
4
+ interface Value {
5
+ svgEdit: RefObject<SvgEdit>;
6
+ }
7
+ export declare const SignEditorContext: import('react').Context<Value>;
8
+ export declare const useSignEditor: () => Value;
9
+ export {};
@@ -0,0 +1,7 @@
1
+ import { FC, ReactNode } from 'react';
2
+
3
+ interface SignEditorContextProviderProps {
4
+ children: ReactNode;
5
+ }
6
+ export declare const SignEditorContextProvider: FC<SignEditorContextProviderProps>;
7
+ export {};
@@ -0,0 +1,12 @@
1
+ import { FC } from 'react';
2
+ import { Nilable } from '../../types/generic';
3
+ import { ISignEditorImage } from './SignEditorImage';
4
+
5
+ interface SignEditorEditDialogProps {
6
+ open: boolean;
7
+ onSaved: () => void;
8
+ onClose: () => void;
9
+ item: Nilable<ISignEditorImage>;
10
+ }
11
+ export declare const SignEditorEditDialog: FC<SignEditorEditDialogProps>;
12
+ export {};
@@ -0,0 +1,16 @@
1
+ import { FC } from 'react';
2
+ import { Nilable } from '../../types/generic';
3
+
4
+ export interface ISignEditorImage {
5
+ id: string;
6
+ name: string;
7
+ symbol: string;
8
+ src: Nilable<string>;
9
+ graphic?: Nilable<string>;
10
+ }
11
+ export interface SignEditorImageProps extends ISignEditorImage {
12
+ onEdit?: () => void;
13
+ onDelete?: () => void;
14
+ isEditable?: boolean;
15
+ }
16
+ export declare const SignEditorImage: FC<SignEditorImageProps>;
@@ -0,0 +1,11 @@
1
+ import { FC, ReactNode } from 'react';
2
+ import { ISignEditorImage } from './SignEditorImage';
3
+
4
+ interface SignEditorImageListProps {
5
+ children?: ReactNode | ReactNode[];
6
+ items: ISignEditorImage[];
7
+ isLoading: boolean;
8
+ isEditable?: boolean;
9
+ }
10
+ export declare const SignEditorImageList: FC<SignEditorImageListProps>;
11
+ export {};
@@ -0,0 +1 @@
1
+ export declare const SignEditorPicker: () => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1 @@
1
+ export declare const SignEditorPickerSigns: () => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1 @@
1
+ export declare const SignEditorPickerStencils: () => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,10 @@
1
+ import { FC } from 'react';
2
+
3
+ interface SignEditorSaveDialog {
4
+ open: boolean;
5
+ svgStringified: string | null;
6
+ onRoadSignAdded: () => void;
7
+ onClose: () => void;
8
+ }
9
+ export declare const SignEditorSaveDialog: FC<SignEditorSaveDialog>;
10
+ export {};
@@ -0,0 +1 @@
1
+ export declare const useIsNameUnique: (name: string) => boolean | undefined;
@@ -0,0 +1,3 @@
1
+ import { ISignEditorImage } from './SignEditorImage';
2
+
3
+ export declare const useOnSvgSelected: () => (svgItem: ISignEditorImage) => Promise<void>;
@@ -0,0 +1,9 @@
1
+ import { Nilable } from '../../types/generic';
2
+
3
+ interface SaveStencilPayload {
4
+ id: Nilable<string>;
5
+ name: string;
6
+ file: File;
7
+ }
8
+ export declare const useSaveStencil: () => (payload: SaveStencilPayload) => Promise<void>;
9
+ export {};
@@ -0,0 +1,2 @@
1
+
2
+ export declare const useSvgEdit: () => import('react').MutableRefObject<any>;
@@ -0,0 +1,10 @@
1
+ import { FC } from 'react';
2
+ import { Nilable } from '../../types/generic';
3
+
4
+ interface SvgImageProps {
5
+ src?: Nilable<string>;
6
+ graphic?: Nilable<string>;
7
+ alt?: string;
8
+ }
9
+ export declare const SvgImage: FC<SvgImageProps>;
10
+ export {};
@@ -0,0 +1,5 @@
1
+ /// <reference types="react" />
2
+ export declare const Image: import('@emotion/styled').StyledComponent<import('@mui/system').MUIStyledCommonProps<import('@mui/material').Theme>, import('react').DetailedHTMLProps<import('react').ImgHTMLAttributes<HTMLImageElement>, HTMLImageElement>, {}>;
3
+ export declare const Error: import('@emotion/styled').StyledComponent<import('@mui/material').TypographyOwnProps & import('@mui/material/OverridableComponent').CommonProps & Omit<Omit<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, "ref"> & {
4
+ ref?: ((instance: HTMLSpanElement | null) => void) | import('react').RefObject<HTMLSpanElement> | null | undefined;
5
+ }, "className" | "style" | "classes" | "children" | "sx" | "p" | "color" | "border" | "boxShadow" | "fontWeight" | "zIndex" | "alignContent" | "alignItems" | "alignSelf" | "bottom" | "boxSizing" | "columnGap" | "display" | "flexBasis" | "flexDirection" | "flexGrow" | "flexShrink" | "flexWrap" | "fontFamily" | "fontSize" | "fontStyle" | "gridAutoColumns" | "gridAutoFlow" | "gridAutoRows" | "gridTemplateAreas" | "gridTemplateColumns" | "gridTemplateRows" | "height" | "justifyContent" | "justifyItems" | "justifySelf" | "left" | "letterSpacing" | "lineHeight" | "marginBlockEnd" | "marginBlockStart" | "marginBottom" | "marginInlineEnd" | "marginInlineStart" | "marginLeft" | "marginRight" | "marginTop" | "maxHeight" | "maxWidth" | "minHeight" | "minWidth" | "order" | "paddingBlockEnd" | "paddingBlockStart" | "paddingBottom" | "paddingInlineEnd" | "paddingInlineStart" | "paddingLeft" | "paddingRight" | "paddingTop" | "position" | "right" | "rowGap" | "textAlign" | "textOverflow" | "textTransform" | "top" | "visibility" | "whiteSpace" | "width" | "borderBottom" | "borderColor" | "borderLeft" | "borderRadius" | "borderRight" | "borderTop" | "flex" | "gap" | "gridArea" | "gridColumn" | "gridRow" | "margin" | "marginBlock" | "marginInline" | "overflow" | "padding" | "paddingBlock" | "paddingInline" | "bgcolor" | "m" | "mt" | "mr" | "mb" | "ml" | "mx" | "marginX" | "my" | "marginY" | "pt" | "pr" | "pb" | "pl" | "px" | "paddingX" | "py" | "paddingY" | "typography" | "displayPrint" | "align" | "variant" | "gutterBottom" | "noWrap" | "paragraph" | "variantMapping"> & import('@mui/system').MUIStyledCommonProps<import('@mui/material').Theme>, {}, {}>;
@@ -0,0 +1 @@
1
+ export declare function convertFontToBase64(cssString: string): Promise<string>;
File without changes
@@ -1,4 +1,4 @@
1
- import { T as o } from "../../Tree-B4Bd33fe.js";
1
+ import { T as o } from "../../Tree-D_Zjc1fk.js";
2
2
  export {
3
3
  o as Tree
4
4
  };
@@ -0,0 +1,11 @@
1
+ /**
2
+ * @file ext-connector.js
3
+ *
4
+ * @license MIT
5
+ *
6
+ * @copyright 2010 Alexis Deveria
7
+ * @copyright 2023 Optimistik SAS
8
+ *
9
+ */
10
+ const e="connector",loadExtensionTranslation=async function(t){let c;const l=t.configObj.pref("lang");try{c=await function __variableDynamicImportRuntime0__(e){switch(e){case"./locale/en.js":return Promise.resolve().then((function(){return n}));case"./locale/fr.js":return Promise.resolve().then((function(){return o}));case"./locale/pl.js":return Promise.resolve().then((function(){return r}));case"./locale/zh-CN.js":return Promise.resolve().then((function(){return s}));default:return new Promise((function(t,n){("function"==typeof queueMicrotask?queueMicrotask:setTimeout)(n.bind(null,new Error("Unknown variable dynamic import: "+e)))}))}}(`./locale/${l}.js`)}catch(t){console.warn(`Missing translation (${l}) for ${e} - using 'en'`),c=await Promise.resolve().then((function(){return n}))}t.i18next.addResourceBundle(l,e,c.default)};var t={name:e,async init(t){const n=this,{svgCanvas:o}=n,{getElement:r,$id:s,$click:c,addSVGElementsFromJson:l}=o,{svgroot:a,selectorManager:i}=t,u=o.getEditorNS();let d,g,m;await loadExtensionTranslation(n);let f=!1,p=[];const _=o.groupSelectedElements;o.groupSelectedElements=function(){o.removeFromSelection(document.querySelectorAll('[id^="conn_"]'));for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return _.apply(this,t)};const b=o.moveSelectedElements;o.moveSelectedElements=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];const r=b.apply(this,t);return updateConnectors(o.getSelectedElements()),r};const getBBintersect=(e,t,n,o)=>{o&&((n={...n}).width+=o,n.height+=o,n.x-=o/2,n.y-=o/2);const r=n.x+n.width/2,s=n.y+n.height/2,c=e-r,l=t-s;let a;return a=Math.abs(l/c)<n.height/n.width?n.width/2/Math.abs(c):l?n.height/2/Math.abs(l):0,{x:r+c*a,y:s+l*a}},getOffset=(e,t)=>{const n=t.getAttribute("marker-"+e),o=5*t.getAttribute("stroke-width");return n?o:0},showPanel=e=>{let t=s("connector_rules");t||(t=document.createElement("style"),t.setAttribute("id","connector_rules"),document.getElementsByTagName("head")[0].appendChild(t)),t.textContent=e?"#tool_clone, #tool_topath, #tool_angle, #xy_panel { display: none !important; }":"",s("connector_rules")&&(s("connector_rules").style.display=e?"block":"none")},setPoint=(e,t,n,o,r)=>{const s=e.points,c=a.createSVGPoint();if(c.x=n,c.y=o,"end"===t&&(t=s.numberOfItems-1),s.replaceItem(c,t),r){const t=s.getItem(0),n=s.getItem(s.numberOfItems-1);setPoint(e,1,(n.x+t.x)/2,(n.y+t.y)/2)}},findConnectors=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];const t=o.getDataStorage(),n=document.querySelectorAll('[id^="conn_"]');p=[];for(const r of n){let n=!1;const s=[];for(const[e,n]of["start","end"].entries()){let c=t.get(r,`c_${n}`);c?c=document.getElementById(c):(c=document.getElementById(r.attributes["se:connector"].value.split(" ")[e]),t.put(r,`c_${n}`,c.id),t.put(r,`${n}_bb`,o.getStrokedBBox([c]))),s.push(c)}for(let t=0;t<2;t++){const c=s[t],l=o.getParents(c?.parentNode);for(const t of l)if(e.includes(t)){n=!0;break}if(c&&c.parentNode){if(e.includes(c)||n){const e=o.getStrokedBBox([c]);p.push({elem:c,connector:r,is_start:0===t,start_x:e.x,start_y:e.y})}}else r.remove()}}},updateConnectors=e=>{const t=o.getDataStorage();if(findConnectors(e),p.length)for(const e of p){const{elem:n,connector:r,is_start:s,start_x:c,start_y:l}=e,a=s?"start":"end",i=o.getStrokedBBox([n]);i.x=c,i.y=l,t.put(r,`${a}_bb`,i);const u=s?"end":"start",d=t.get(r,`${u}_bb`),g=getBBintersect(d?.x+d?.width/2,d?.y+d?.height/2,i,getOffset(a,r));setPoint(r,s?0:"end",g.x,g.y,!0);const m=getBBintersect(g.x,g.y,t.get(r,`${u}_bb`),getOffset(u,r));setPoint(r,s?"end":0,m.x,m.y,!0)}},reset=()=>{const e=o.getDataStorage();o.getSvgContent().querySelectorAll("*").forEach((t=>{const n=t.getAttributeNS(u,"connector");if(n){const s=n.split(" "),c=o.getStrokedBBox([r(s[0])]),l=o.getStrokedBBox([r(s[1])]);e.put(t,"c_start",s[0]),e.put(t,"c_end",s[1]),e.put(t,"start_bb",c),e.put(t,"end_bb",l),o.getEditorNS(!0)}}))};return reset(),{name:n.i18next.t(`${e}:name`),callback(){const t=document.createElement("template"),n=`${e}:buttons.0.title`;t.innerHTML=`\n <se-button id="tool_connect" title="${n}" src="conn.svg"></se-button>\n `,s("tools_left").append(t.content.cloneNode(!0)),c(s("tool_connect"),(()=>{this.leftPanel.updateLeftPanel("tool_connect")&&o.setMode("connector")}))},mouseDown(e){const t=o.getDataStorage(),r=o.getSvgContent(),{event:s,start_x:c,start_y:a}=e,i=o.getMode(),{curConfig:{initStroke:u}}=n.configObj;if("connector"===i){if(f)return;const e=s.target;if(o.getParents(e.parentNode).includes(r)){const n=o.getClosest(e.parentNode,"foreignObject");g=n||e;const r=o.getStrokedBBox([g]),s=r.x+r.width/2,i=r.y+r.height/2;f=!0,d=l({element:"polyline",attr:{id:"conn_"+o.getNextId(),points:`${s},${i} ${s},${i} ${c},${a}`,stroke:`#${u.color}`,"stroke-width":g.stroke_width&&0!==g.stroke_width?g.stroke_width:u.width,fill:"none",opacity:u.opacity,style:"pointer-events:none"}}),t.put(d,"start_bb",r)}return{started:!0}}"select"===i&&findConnectors(e.selectedElements)},mouseMove(e){if(0===p.length)return;o.getDataStorage();o.getZoom();e.mouse_x,e.mouse_y},mouseUp(e){const t=o.getDataStorage(),n=o.getSvgContent(),{event:r}=e;let s=r.target;if("connector"!==o.getMode())return;const c=o.getClosest(s.parentNode,"foreignObject");c&&(s=c);const l=o.getParents(s.parentNode).includes(n);if(s===g)return f=!0,{keep:!0,element:null,started:f};if(!l)return d?.remove(),f=!1,{keep:!1,element:null,started:f};m=s;const a=g?.id||"",p=m?.id||"",_=`${a} ${p}`,b=`${p} ${a}`;if(Array.from(document.querySelectorAll('[id^="conn_"]')).filter((e=>e.getAttributeNS(u,"connector")===_||e.getAttributeNS(u,"connector")===b)).length)return d.remove(),{keep:!1,element:null,started:!1};const h=o.getStrokedBBox([m]),y=getBBintersect(undefined,undefined,h,getOffset("start",d));return setPoint(d,"end",y.x,y.y,!0),t.put(d,"c_start",a),t.put(d,"c_end",p),t.put(d,"end_bb",h),d.setAttributeNS(u,"se:connector",_),d.setAttribute("opacity",1),o.addToSelection([d]),o.moveToBottomSelectedElement(),i.requestSelector(d).showGrips(!1),f=!1,{keep:!0,element:d,started:f}},selectedChanged(e){const t=o.getDataStorage();if(!o.getSvgContent().querySelectorAll('[id^="conn_"]').length)return;"connector"===o.getMode()&&o.setMode("select");const{elems:n}=e;for(const o of n)o&&t.has(o,"c_start")?(i.requestSelector(o).showGrips(!1),showPanel(e.selectedElement&&!e.multiselected)):showPanel(!1);updateConnectors(o.getSelectedElements())},elementChanged(e){const t=o.getDataStorage();let[n]=e.elems;if(!n)return;"svg"===n.tagName&&"svgcontent"===n.id&&reset();const{markerStart:s,markerMid:c,markerEnd:a}=n.attributes;if((s||c||a)&&(d=n,t.put(n,"start_off",Boolean(s)),t.put(n,"end_off",Boolean(a)),"line"===n.tagName&&c)){const{x1:e,x2:t,y1:r,y2:s,id:a}=n.attributes,i=`${(Number(e.value)+Number(t.value))/2},${(Number(r.value)+Number(s.value))/2}`,u=l({element:"polyline",attr:{points:`${e.value},${r.value} ${i} ${t.value},${s.value}`,stroke:n.getAttribute("stroke"),"stroke-width":n.getAttribute("stroke-width"),"marker-mid":c.value,fill:"none",opacity:n.getAttribute("opacity")||1}});n.insertAdjacentElement("afterend",u),n.remove(),o.clearSelection(),u.id=a.value,o.addToSelection([u]),n=u}if(n?.id.startsWith("conn_")){const e=r(t.get(n,"c_start"));updateConnectors([e])}else updateConnectors(o.getSelectedElements())},IDsUpdated(e){const t=[];return e.elems.forEach((function(n){"se:connector"in n.attr&&(n.attr["se:connector"]=n.attr["se:connector"].split(" ").map((function(t){return e.changes[t]})).join(" "),/. ./.test(n.attr["se:connector"])||t.push(n.attr.id))})),{remove:t}},toolButtonStateUpdate(e){const t=document.getElementById("tool_connect");e.nostroke&&!0===t.pressed&&n.clickSelect(),t.disabled=e.nostroke}}}},n=Object.freeze({__proto__:null,default:{name:"Connector",langListTitle:"Connect two objects",langList:[{id:"mode_connect",title:"Connect two objects"}],buttons:[{title:"Connect two objects"}]}}),o=Object.freeze({__proto__:null,default:{name:"Connecteur",langListTitle:"Connecter deux objets",langList:[{id:"mode_connect",title:"Connecter deux objets"}],buttons:[{title:"Connecter deux objets"}]}}),r=Object.freeze({__proto__:null,default:{name:"Łącznik",langListTitle:"Połącz dwa obiekty",langList:[{id:"mode_connect",title:"Połącz dwa obiekty"}],buttons:[{title:"Połącz dwa obiekty"}]}}),s=Object.freeze({__proto__:null,default:{name:"连接器",langListTitle:"连接两个对象",langList:[{id:"mode_connect",title:"连接两个对象"}],buttons:[{title:"连接两个对象"}]}});export{t as default};
11
+ //# sourceMappingURL=ext-connector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ext-connector.js","sources":["../../../../src/editor/extensions/ext-connector/ext-connector.js","../../../../src/editor/extensions/ext-connector/locale/en.js","../../../../src/editor/extensions/ext-connector/locale/fr.js","../../../../src/editor/extensions/ext-connector/locale/pl.js","../../../../src/editor/extensions/ext-connector/locale/zh-CN.js"],"sourcesContent":["/**\n * @file ext-connector.js\n *\n * @license MIT\n *\n * @copyright 2010 Alexis Deveria\n * @copyright 2023 Optimistik SAS\n *\n */\n\nconst name = 'connector'\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 // eslint-disable-next-line no-console\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 (S) {\n const svgEditor = this\n const { svgCanvas } = svgEditor\n const { getElement, $id, $click, addSVGElementsFromJson } = svgCanvas\n const { svgroot, selectorManager } = S\n const seNs = svgCanvas.getEditorNS()\n await loadExtensionTranslation(svgEditor)\n\n let startX\n let startY\n let curLine\n let startElem\n let endElem\n\n let started = false\n let connections = []\n\n // Save the original groupSelectedElements method\n const originalGroupSelectedElements = svgCanvas.groupSelectedElements\n\n // Override the original groupSelectedElements to exclude connectors\n svgCanvas.groupSelectedElements = function (...args) {\n // Remove connectors from selection\n svgCanvas.removeFromSelection(document.querySelectorAll('[id^=\"conn_\"]'))\n\n // Call the original method\n return originalGroupSelectedElements.apply(this, args)\n }\n\n // Save the original moveSelectedElements method\n const originalMoveSelectedElements = svgCanvas.moveSelectedElements\n\n // Override the original moveSelectedElements to handle connectors\n svgCanvas.moveSelectedElements = function (...args) {\n // Call the original method and store its result\n const cmd = originalMoveSelectedElements.apply(this, args)\n\n // Update connectors\n updateConnectors(svgCanvas.getSelectedElements())\n\n // Return the result of the original method\n return cmd\n }\n\n /**\n * getBBintersect\n * @param {Float} x\n * @param {Float} y\n * @param {module:utilities.BBoxObject} bb\n * @param {Float} offset\n * @returns {module:math.XYObject}\n */\n const getBBintersect = (x, y, bb, offset) => {\n // Adjust bounding box if offset is provided\n if (offset) {\n bb = { ...bb } // Create a shallow copy\n bb.width += offset\n bb.height += offset\n bb.x -= offset / 2\n bb.y -= offset / 2\n }\n\n // Calculate center of bounding box\n const midX = bb.x + bb.width / 2\n const midY = bb.y + bb.height / 2\n\n // Calculate lengths from (x, y) to center\n const lenX = x - midX\n const lenY = y - midY\n\n // Calculate slope of line from (x, y) to center\n const slope = Math.abs(lenY / lenX)\n\n // Calculate ratio to find intersection point\n let ratio\n if (slope < bb.height / bb.width) {\n ratio = bb.width / 2 / Math.abs(lenX)\n } else {\n ratio = lenY ? bb.height / 2 / Math.abs(lenY) : 0\n }\n\n // Calculate intersection point\n return {\n x: midX + lenX * ratio,\n y: midY + lenY * ratio\n }\n }\n\n /**\n * getOffset\n * @param {\"start\"|\"end\"} side - The side of the line (\"start\" or \"end\") where the marker may be present.\n * @param {Element} line - The line element to check for a marker.\n * @returns {Float} - Returns the calculated offset if a marker is present, otherwise returns 0.\n */\n const getOffset = (side, line) => {\n // Check for marker attribute on the given side (\"marker-start\" or \"marker-end\")\n const hasMarker = line.getAttribute('marker-' + side)\n\n // Calculate size based on stroke-width, multiplied by a constant factor (here, 5)\n // TODO: This factor should ideally be based on the actual size of the marker.\n const size = line.getAttribute('stroke-width') * 5\n\n // Return calculated size if marker is present, otherwise return 0.\n return hasMarker ? size : 0\n }\n\n /**\n * showPanel\n * @param {boolean} on - Determines whether to show or hide the elements.\n * @returns {void}\n */\n const showPanel = on => {\n // Find the 'connector_rules' or create it if it doesn't exist.\n let connRules = $id('connector_rules')\n if (!connRules) {\n connRules = document.createElement('style')\n connRules.setAttribute('id', 'connector_rules')\n document.getElementsByTagName('head')[0].appendChild(connRules)\n }\n\n // Update the content of <style> element to either hide or show certain elements.\n connRules.textContent = !on\n ? ''\n : '#tool_clone, #tool_topath, #tool_angle, #xy_panel { display: none !important; }'\n\n // Update the display property of the <style> element itself based on the 'on' value.\n if ($id('connector_rules')) {\n $id('connector_rules').style.display = on ? 'block' : 'none'\n }\n }\n\n /**\n * setPoint\n * @param {Element} elem - The SVG element.\n * @param {Integer|\"end\"} pos - The position index or \"end\".\n * @param {Float} x - The x-coordinate.\n * @param {Float} y - The y-coordinate.\n * @param {boolean} [setMid] - Whether to set the midpoint.\n * @returns {void}\n */\n const setPoint = (elem, pos, x, y, setMid) => {\n // Create a new SVG point\n const pts = elem.points\n const pt = svgroot.createSVGPoint()\n pt.x = x\n pt.y = y\n\n // If position is \"end\", set it to the last index\n if (pos === 'end') {\n pos = pts.numberOfItems - 1\n }\n\n // Try replacing the point at the specified position\n pts.replaceItem(pt, pos)\n\n // Optionally, set the midpoint\n if (setMid) {\n const ptStart = pts.getItem(0)\n const ptEnd = pts.getItem(pts.numberOfItems - 1)\n setPoint(elem, 1, (ptEnd.x + ptStart.x) / 2, (ptEnd.y + ptStart.y) / 2)\n }\n }\n\n /**\n * @param {Float} diffX\n * @param {Float} diffY\n * @returns {void}\n */\n const updatePoints = (line, conn, bb, altBB, pre, altPre) => {\n const srcX = altBB.x + altBB.width / 2\n const srcY = altBB.y + altBB.height / 2\n\n const pt = getBBintersect(srcX, srcY, bb, getOffset(pre, line))\n setPoint(line, conn.is_start ? 0 : 'end', pt.x, pt.y, true)\n\n const pt2 = getBBintersect(pt.x, pt.y, altBB, getOffset(altPre, line))\n setPoint(line, conn.is_start ? 'end' : 0, pt2.x, pt2.y, true)\n }\n\n const updateLine = (diffX, diffY) => {\n const dataStorage = svgCanvas.getDataStorage()\n\n for (const conn of connections) {\n const {\n connector: line,\n is_start: isStart,\n start_x: startX,\n start_y: startY\n } = conn\n\n const pre = isStart ? 'start' : 'end'\n const altPre = isStart ? 'end' : 'start'\n\n // Update bbox for this element\n const bb = { ...dataStorage.get(line, `${pre}_bb`) }\n bb.x = startX + diffX\n bb.y = startY + diffY\n\n dataStorage.put(line, `${pre}_bb`, bb)\n\n // Get center point of connected element\n const altBB = dataStorage.get(line, `${altPre}_bb`)\n\n updatePoints(line, conn, bb, altBB, pre, altPre)\n }\n }\n\n // Finds connectors associated with selected elements\n const findConnectors = (elems = []) => {\n // Fetch data storage object from svgCanvas\n const dataStorage = svgCanvas.getDataStorage()\n\n // Query all connector elements (id startss with conn_)\n const connectors = document.querySelectorAll('[id^=\"conn_\"]')\n // Reset connections array\n connections = []\n\n // Loop through each connector\n for (const connector of connectors) {\n let addThis = false // Flag to indicate whether to add this connector\n const parts = [] // To hold the starting and ending elements connected by the connector\n\n // Loop through the connector ends (\"start\" and \"end\")\n for (const [i, pos] of ['start', 'end'].entries()) {\n // Fetch connected element and its bounding box\n let part = dataStorage.get(connector, `c_${pos}`)\n\n // If part is null or undefined, fetch it and store it\n if (!part) {\n part = document.getElementById(\n connector.attributes['se:connector'].value.split(' ')[i]\n )\n dataStorage.put(connector, `c_${pos}`, part.id)\n dataStorage.put(\n connector,\n `${pos}_bb`,\n svgCanvas.getStrokedBBox([part])\n )\n } else {\n // If part is already stored, fetch it by ID\n part = document.getElementById(part)\n }\n\n // Add the part to the parts array\n parts.push(part)\n }\n\n // Loop through the starting and ending elements connected by the connector\n for (let i = 0; i < 2; i++) {\n const cElem = parts[i]\n const parents = svgCanvas.getParents(cElem?.parentNode)\n\n // Check if the element is part of a selected group\n for (const el of parents) {\n if (elems.includes(el)) {\n addThis = true\n break\n }\n }\n\n // If element is missing or parent is null, remove the connector\n if (!cElem || !cElem.parentNode) {\n connector.remove()\n continue\n }\n\n // If element is in the selection or part of a selected group\n if (elems.includes(cElem) || addThis) {\n const bb = svgCanvas.getStrokedBBox([cElem])\n\n // Add connection information to the connections array\n connections.push({\n elem: cElem,\n connector,\n is_start: i === 0,\n start_x: bb.x,\n start_y: bb.y\n })\n }\n }\n }\n }\n\n /**\n * Updates the connectors based on selected elements.\n * @param {Element[]} [elems] - Optional array of selected elements.\n * @returns {void}\n */\n const updateConnectors = elems => {\n const dataStorage = svgCanvas.getDataStorage()\n\n // Find connectors associated with selected elements\n findConnectors(elems)\n\n if (connections.length) {\n // Iterate through each connection to update its state\n for (const conn of connections) {\n const {\n elem,\n connector: line,\n is_start: isStart,\n start_x: startX,\n start_y: startY\n } = conn\n\n // Determine whether the connection starts or ends with this element\n const pre = isStart ? 'start' : 'end'\n\n // Update the bounding box for this element\n const bb = svgCanvas.getStrokedBBox([elem])\n bb.x = startX\n bb.y = startY\n dataStorage.put(line, `${pre}_bb`, bb)\n\n // Determine the opposite end ('start' or 'end') of the connection\n const altPre = isStart ? 'end' : 'start'\n\n // Retrieve the bounding box for the connected element at the opposite end\n const bb2 = dataStorage.get(line, `${altPre}_bb`)\n\n // Calculate the center point of the connected element\n const srcX = bb2?.x + bb2?.width / 2\n const srcY = bb2?.y + bb2?.height / 2\n\n // Update the point of the element being moved\n const pt = getBBintersect(srcX, srcY, bb, getOffset(pre, line))\n setPoint(line, isStart ? 0 : 'end', pt.x, pt.y, true)\n\n // Update the point of the connected element at the opposite end\n const pt2 = getBBintersect(\n pt.x,\n pt.y,\n dataStorage.get(line, `${altPre}_bb`),\n getOffset(altPre, line)\n )\n setPoint(line, isStart ? 'end' : 0, pt2.x, pt2.y, true)\n }\n }\n }\n\n /**\n * Do on reset.\n * @returns {void}\n */\n const reset = () => {\n const dataStorage = svgCanvas.getDataStorage()\n // Make sure all connectors have data set\n const svgContent = svgCanvas.getSvgContent()\n const elements = svgContent.querySelectorAll('*')\n elements.forEach(element => {\n const conn = element.getAttributeNS(seNs, 'connector')\n if (conn) {\n const connData = conn.split(' ')\n const sbb = svgCanvas.getStrokedBBox([getElement(connData[0])])\n const ebb = svgCanvas.getStrokedBBox([getElement(connData[1])])\n dataStorage.put(element, 'c_start', connData[0])\n dataStorage.put(element, 'c_end', connData[1])\n dataStorage.put(element, 'start_bb', sbb)\n dataStorage.put(element, 'end_bb', ebb)\n svgCanvas.getEditorNS(true)\n }\n })\n }\n\n reset()\n\n return {\n name: svgEditor.i18next.t(`${name}:name`),\n callback () {\n // Add the button and its handler(s)\n const buttonTemplate = document.createElement('template')\n const title = `${name}:buttons.0.title`\n buttonTemplate.innerHTML = `\n <se-button id=\"tool_connect\" title=\"${title}\" src=\"conn.svg\"></se-button>\n `\n $id('tools_left').append(buttonTemplate.content.cloneNode(true))\n $click($id('tool_connect'), () => {\n if (this.leftPanel.updateLeftPanel('tool_connect')) {\n svgCanvas.setMode('connector')\n }\n })\n },\n mouseDown (opts) {\n // Retrieve necessary data from the SVG canvas and the event object\n const dataStorage = svgCanvas.getDataStorage()\n const svgContent = svgCanvas.getSvgContent()\n const { event: e, start_x: startX, start_y: startY } = opts\n const mode = svgCanvas.getMode()\n const {\n curConfig: { initStroke }\n } = svgEditor.configObj\n\n if (mode === 'connector') {\n // Return if the line is already started\n if (started) return undefined\n\n const mouseTarget = e.target\n const parents = svgCanvas.getParents(mouseTarget.parentNode)\n\n // Check if the target is a child of the main SVG content\n if (parents.includes(svgContent)) {\n // Identify the connectable element, considering foreignObject elements\n const fo = svgCanvas.getClosest(\n mouseTarget.parentNode,\n 'foreignObject'\n )\n startElem = fo || mouseTarget\n\n // Retrieve the bounding box and calculate the center of the start element\n const bb = svgCanvas.getStrokedBBox([startElem])\n const x = bb.x + bb.width / 2\n const y = bb.y + bb.height / 2\n\n // Set the flag to indicate the line has started\n started = true\n\n // Create a new polyline element\n curLine = addSVGElementsFromJson({\n element: 'polyline',\n attr: {\n id: 'conn_' + svgCanvas.getNextId(),\n points: `${x},${y} ${x},${y} ${startX},${startY}`,\n stroke: `#${initStroke.color}`,\n 'stroke-width':\n !startElem.stroke_width || startElem.stroke_width === 0\n ? initStroke.width\n : startElem.stroke_width,\n fill: 'none',\n opacity: initStroke.opacity,\n style: 'pointer-events:none'\n }\n })\n\n // Store the bounding box of the start element\n dataStorage.put(curLine, 'start_bb', bb)\n }\n\n return {\n started: true\n }\n }\n\n if (mode === 'select') {\n // Find connectors if the mode is 'select'\n findConnectors(opts.selectedElements)\n }\n\n return undefined\n },\n mouseMove (opts) {\n // Exit early if there are no connectors\n if (connections.length === 0) return\n\n const dataStorage = svgCanvas.getDataStorage()\n const zoom = svgCanvas.getZoom()\n // const e = opts.event;\n const x = opts.mouse_x / zoom\n const y = opts.mouse_y / zoom\n /** @todo We have a concern if startX or startY are undefined */\n if (!startX || !startY) return\n\n const diffX = x - startX\n const diffY = y - startY\n\n const mode = svgCanvas.getMode()\n if (mode === 'connector' && started) {\n // const sw = curLine.getAttribute('stroke-width') * 3;\n // Set start point (adjusts based on bb)\n const pt = getBBintersect(\n x,\n y,\n dataStorage.get(curLine, 'start_bb'),\n getOffset('start', curLine)\n )\n startX = pt.x\n startY = pt.y\n\n setPoint(curLine, 0, pt.x, pt.y, true)\n\n // Set end point\n setPoint(curLine, 'end', x, y, true)\n } else if (mode === 'select') {\n for (const elem of svgCanvas.getSelectedElements()) {\n if (elem && dataStorage.has(elem, 'c_start')) {\n svgCanvas.removeFromSelection([elem])\n elem.transform.baseVal.clear()\n }\n }\n if (connections.length) {\n updateLine(diffX, diffY)\n }\n }\n },\n mouseUp (opts) {\n // Get necessary data and initial setups\n const dataStorage = svgCanvas.getDataStorage()\n const svgContent = svgCanvas.getSvgContent()\n const { event: e } = opts\n let mouseTarget = e.target\n\n // Early exit if not in connector mode\n if (svgCanvas.getMode() !== 'connector') return undefined\n\n // Check for a foreignObject parent and update mouseTarget if found\n const fo = svgCanvas.getClosest(mouseTarget.parentNode, 'foreignObject')\n if (fo) mouseTarget = fo\n\n // Check if the target is a child of the main SVG content\n const parents = svgCanvas.getParents(mouseTarget.parentNode)\n const isInSvgContent = parents.includes(svgContent)\n\n if (mouseTarget === startElem) {\n // Case: Started drawing line via click\n started = true\n return {\n keep: true,\n element: null,\n started\n }\n }\n\n if (!isInSvgContent) {\n // Case: Invalid target element; remove the line\n curLine?.remove()\n started = false\n return {\n keep: false,\n element: null,\n started\n }\n }\n\n // Valid target element for the end of the line\n endElem = mouseTarget\n\n const startId = startElem?.id || ''\n const endId = endElem?.id || ''\n const connStr = `${startId} ${endId}`\n const altStr = `${endId} ${startId}`\n\n // Prevent duplicate connectors\n const dupe = Array.from(\n document.querySelectorAll('[id^=\"conn_\"]')\n ).filter(\n conn =>\n conn.getAttributeNS(seNs, 'connector') === connStr ||\n conn.getAttributeNS(seNs, 'connector') === altStr\n )\n\n if (dupe.length) {\n curLine.remove()\n return {\n keep: false,\n element: null,\n started: false\n }\n }\n\n // Update the end point of the connector\n const bb = svgCanvas.getStrokedBBox([endElem])\n const pt = getBBintersect(\n startX,\n startY,\n bb,\n getOffset('start', curLine)\n )\n setPoint(curLine, 'end', pt.x, pt.y, true)\n\n // Save metadata to the connector\n dataStorage.put(curLine, 'c_start', startId)\n dataStorage.put(curLine, 'c_end', endId)\n dataStorage.put(curLine, 'end_bb', bb)\n curLine.setAttributeNS(seNs, 'se:connector', connStr)\n curLine.setAttribute('opacity', 1)\n\n // Finalize the connector\n svgCanvas.addToSelection([curLine])\n svgCanvas.moveToBottomSelectedElement()\n selectorManager.requestSelector(curLine).showGrips(false)\n\n started = false\n return {\n keep: true,\n element: curLine,\n started\n }\n },\n selectedChanged (opts) {\n // Get necessary data storage and SVG content\n const dataStorage = svgCanvas.getDataStorage()\n const svgContent = svgCanvas.getSvgContent()\n\n // Exit early if there are no connectors\n if (!svgContent.querySelectorAll('[id^=\"conn_\"]').length) return\n\n // If the current mode is 'connector', switch to 'select'\n if (svgCanvas.getMode() === 'connector') {\n svgCanvas.setMode('select')\n }\n\n // Get currently selected elements\n const { elems: selElems } = opts\n\n // Iterate through selected elements\n for (const elem of selElems) {\n // If the element has a connector start, handle it\n if (elem && dataStorage.has(elem, 'c_start')) {\n selectorManager.requestSelector(elem).showGrips(false)\n\n // Show panel depending on selection state\n showPanel(opts.selectedElement && !opts.multiselected)\n } else {\n // Hide panel if no connector start\n showPanel(false)\n }\n }\n\n // Update connectors based on selected elements\n updateConnectors(svgCanvas.getSelectedElements())\n },\n elementChanged (opts) {\n // Get the necessary data storage\n const dataStorage = svgCanvas.getDataStorage()\n\n // Get the first element from the options; exit early if it's null\n let [elem] = opts.elems\n if (!elem) return\n\n // Reinitialize if it's the main SVG content\n if (elem.tagName === 'svg' && elem.id === 'svgcontent') {\n reset()\n }\n\n // Check for marker attributes and update offsets\n const { markerStart, markerMid, markerEnd } = elem.attributes\n if (markerStart || markerMid || markerEnd) {\n curLine = elem\n dataStorage.put(elem, 'start_off', Boolean(markerStart))\n dataStorage.put(elem, 'end_off', Boolean(markerEnd))\n\n // Convert lines to polyline if there's a mid-marker\n if (elem.tagName === 'line' && markerMid) {\n const { x1, x2, y1, y2, id } = elem.attributes\n\n const midPt = `${(Number(x1.value) + Number(x2.value)) / 2},${\n (Number(y1.value) + Number(y2.value)) / 2\n }`\n const pline = addSVGElementsFromJson({\n element: 'polyline',\n attr: {\n points: `${x1.value},${y1.value} ${midPt} ${x2.value},${y2.value}`,\n stroke: elem.getAttribute('stroke'),\n 'stroke-width': elem.getAttribute('stroke-width'),\n 'marker-mid': markerMid.value,\n fill: 'none',\n opacity: elem.getAttribute('opacity') || 1\n }\n })\n\n elem.insertAdjacentElement('afterend', pline)\n elem.remove()\n svgCanvas.clearSelection()\n pline.id = id.value\n svgCanvas.addToSelection([pline])\n elem = pline\n }\n }\n\n // Update connectors based on the current element\n if (elem?.id.startsWith('conn_')) {\n const start = getElement(dataStorage.get(elem, 'c_start'))\n updateConnectors([start])\n } else {\n updateConnectors(svgCanvas.getSelectedElements())\n }\n },\n IDsUpdated (input) {\n const remove = []\n input.elems.forEach(function (elem) {\n if ('se:connector' in elem.attr) {\n elem.attr['se:connector'] = elem.attr['se:connector']\n .split(' ')\n .map(function (oldID) {\n return input.changes[oldID]\n })\n .join(' ')\n\n // Check validity - the field would be something like 'svg_21 svg_22', but\n // if one end is missing, it would be 'svg_21' and therefore fail this test\n if (!/. ./.test(elem.attr['se:connector'])) {\n remove.push(elem.attr.id)\n }\n }\n })\n return { remove }\n },\n toolButtonStateUpdate (opts) {\n const button = document.getElementById('tool_connect')\n if (opts.nostroke && button.pressed === true) {\n svgEditor.clickSelect()\n }\n button.disabled = opts.nostroke\n }\n }\n }\n}\n","export default {\n name: 'Connector',\n langListTitle: 'Connect two objects',\n langList: [\n { id: 'mode_connect', title: 'Connect two objects' }\n ],\n buttons: [\n {\n title: 'Connect two objects'\n }\n ]\n}\n","export default {\n name: 'Connecteur',\n langListTitle: 'Connecter deux objets',\n langList: [\n { id: 'mode_connect', title: 'Connecter deux objets' }\n ],\n buttons: [\n {\n title: 'Connecter deux objets'\n }\n ]\n}\n","export default {\n name: 'Łącznik',\n langListTitle: 'Połącz dwa obiekty',\n langList: [\n { id: 'mode_connect', title: 'Połącz dwa obiekty' }\n ],\n buttons: [\n {\n title: 'Połącz dwa obiekty'\n }\n ]\n}","export default {\n name: '连接器',\n langListTitle: '连接两个对象',\n langList: [\n { id: 'mode_connect', title: '连接两个对象' }\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","extConnector","init","S","this","svgCanvas","getElement","$id","$click","addSVGElementsFromJson","svgroot","selectorManager","seNs","getEditorNS","curLine","startElem","endElem","started","connections","originalGroupSelectedElements","groupSelectedElements","removeFromSelection","document","querySelectorAll","_len","arguments","length","args","Array","_key","apply","originalMoveSelectedElements","moveSelectedElements","_len2","_key2","cmd","updateConnectors","getSelectedElements","getBBintersect","x","y","bb","offset","width","height","midX","midY","lenX","lenY","ratio","Math","abs","getOffset","side","line","hasMarker","getAttribute","size","showPanel","on","connRules","createElement","setAttribute","getElementsByTagName","appendChild","textContent","style","display","setPoint","elem","pos","setMid","pts","points","pt","createSVGPoint","numberOfItems","replaceItem","ptStart","getItem","ptEnd","findConnectors","elems","undefined","dataStorage","getDataStorage","connectors","connector","addThis","parts","i","entries","part","get","getElementById","attributes","value","split","put","id","getStrokedBBox","push","cElem","parents","getParents","parentNode","el","includes","is_start","start_x","start_y","remove","conn","isStart","startX","startY","pre","altPre","bb2","pt2","reset","getSvgContent","forEach","element","getAttributeNS","connData","sbb","ebb","t","callback","buttonTemplate","title","innerHTML","append","content","cloneNode","leftPanel","updateLeftPanel","setMode","mouseDown","opts","svgContent","event","e","mode","getMode","curConfig","initStroke","mouseTarget","target","fo","getClosest","attr","getNextId","stroke","color","stroke_width","fill","opacity","selectedElements","mouseMove","getZoom","mouse_x","mouse_y","mouseUp","isInSvgContent","keep","startId","endId","connStr","altStr","from","filter","setAttributeNS","addToSelection","moveToBottomSelectedElement","requestSelector","showGrips","selectedChanged","selElems","has","selectedElement","multiselected","elementChanged","tagName","markerStart","markerMid","markerEnd","Boolean","x1","x2","y1","y2","midPt","Number","pline","insertAdjacentElement","clearSelection","startsWith","start","IDsUpdated","input","map","oldID","changes","join","test","toolButtonStateUpdate","button","nostroke","pressed","clickSelect","disabled","langListTitle","langList","buttons"],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * @file ext-eyedropper.js
3
+ *
4
+ * @license MIT
5
+ *
6
+ * @copyright 2010 Jeff Schiller
7
+ * @copyright 2021 OptimistikSAS
8
+ *
9
+ */
10
+ const e="eyedropper",loadExtensionTranslation=async function(t){let c;const u=t.configObj.pref("lang");try{c=await function __variableDynamicImportRuntime0__(e){switch(e){case"./locale/en.js":return Promise.resolve().then((function(){return o}));case"./locale/fr.js":return Promise.resolve().then((function(){return n}));case"./locale/pl.js":return Promise.resolve().then((function(){return r}));case"./locale/sv.js":return Promise.resolve().then((function(){return i}));case"./locale/tr.js":return Promise.resolve().then((function(){return s}));case"./locale/uk.js":return Promise.resolve().then((function(){return l}));case"./locale/zh-CN.js":return Promise.resolve().then((function(){return a}));default:return new Promise((function(t,o){("function"==typeof queueMicrotask?queueMicrotask:setTimeout)(o.bind(null,new Error("Unknown variable dynamic import: "+e)))}))}}(`./locale/${u}.js`)}catch(t){console.warn(`Missing translation (${u}) for ${e} - using 'en'`),c=await Promise.resolve().then((function(){return o}))}t.i18next.addResourceBundle(u,e,c.default)};var t={name:e,async init(){const t=this,{svgCanvas:o}=t;await loadExtensionTranslation(t);const{ChangeElementCommand:n}=o.history,r={},{$id:i,$click:s}=o,l=document.createElement("div");l.style.width="14px",l.style.height="14px",l.style.position="absolute",t.workarea.appendChild(l);const styleHelper=()=>{if(o.getMode()===e){l.style.display="block";const e=Number(r.strokeWidth),t="none"!==r.strokeDashArray&&r.strokeDashArray?"dotted":"solid";l.style.background=r.fillPaint??"transparent",l.style.opacity=r.opacity??1,l.style.border=e>0&&r.strokePaint?`2px ${t} ${r.strokePaint}`:"none"}},resetCurrentStyle=()=>{Object.keys(r).forEach((e=>delete r[e]))},getStyle=e=>{let t=null;e.multiselected||!e.elems[0]||["svg","g","use"].includes(e.elems[0].nodeName)||(t=e.elems[0],r.fillPaint=t.getAttribute("fill")||"black",r.fillOpacity=t.getAttribute("fill-opacity")||1,r.strokePaint=t.getAttribute("stroke"),r.strokeOpacity=t.getAttribute("stroke-opacity")||1,r.strokeWidth=t.getAttribute("stroke-width"),r.strokeDashArray=t.getAttribute("stroke-dasharray"),r.strokeLinecap=t.getAttribute("stroke-linecap"),r.strokeLinejoin=t.getAttribute("stroke-linejoin"),r.opacity=t.getAttribute("opacity")||1)};return{name:t.i18next.t(`${e}:name`),callback(){const n=`\n <se-button id="tool_eyedropper" title="${`${e}:buttons.0.title`}" src="eye_dropper.svg" shortcut=ctrl+I></se-button>\n `;o.insertChildAtIndex(i("tools_left"),n,12),s(i("tool_eyedropper"),(()=>{this.leftPanel.updateLeftPanel("tool_eyedropper")&&o.setMode(e)})),document.addEventListener("modeChange",(t=>{o.getMode()===e?styleHelper():l.style.display="none",0===o.getSelectedElements().length&&resetCurrentStyle()})),t.workarea.addEventListener("mousemove",(t=>{const n=t.clientX,r=t.clientY;o.getMode()===e&&(l.style.top=r+"px",l.style.left=n+12+"px",styleHelper())})),t.workarea.addEventListener("mouseleave",(e=>{l.style.display="none"})),document.addEventListener("keydown",(n=>{"Escape"===n.key&&o.getMode()===e&&(Object.keys(r).length>0?(resetCurrentStyle(),styleHelper()):t.leftPanel.clickSelect())}))},selectedChanged:getStyle,mouseDown(t){if(o.getMode()===e){const e=t.event,{target:s}=e;if(!["svg","g","use"].includes(s.nodeName)){const e={};if(Object.keys(r).length>0){const change=function(t,o,n){e[o]=t.getAttribute(o),t.setAttribute(o,n)};r.fillPaint&&change(s,"fill",r.fillPaint),r.fillOpacity&&change(s,"fill-opacity",r.fillOpacity),r.strokePaint&&change(s,"stroke",r.strokePaint),r.strokeOpacity&&change(s,"stroke-opacity",r.strokeOpacity),r.strokeWidth&&change(s,"stroke-width",r.strokeWidth),r.opacity&&change(s,"opacity",r.opacity),r.strokeLinecap&&change(s,"stroke-linecap",r.strokeLinecap),r.strokeLinejoin&&change(s,"stroke-linejoin",r.strokeLinejoin),r.strokeDashArray?change(s,"stroke-dasharray",r.strokeDashArray):s.removeAttribute("stroke-dasharray"),i=new n(s,e),o.undoMgr.addCommandToHistory(i)}else getStyle({elems:[s]})}}var i}}}},o=Object.freeze({__proto__:null,default:{name:"eyedropper",buttons:[{title:"Eye Dropper Tool",key:"I"}]}}),n=Object.freeze({__proto__:null,default:{name:"pipette",buttons:[{title:"Outil pipette",key:"I"}]}}),r=Object.freeze({__proto__:null,default:{name:"pipeta",buttons:[{title:"Narzędzie pipeta",key:"I"}]}}),i=Object.freeze({__proto__:null,default:{name:"pipett",buttons:[{title:"pipettverktyg",key:"I"}]}}),s=Object.freeze({__proto__:null,default:{name:"renkseçici",buttons:[{title:"Renk Seçim Aracı",key:"I"}]}}),l=Object.freeze({__proto__:null,default:{name:"eyedropper",buttons:[{title:"Піпетка",key:"I"}]}}),a=Object.freeze({__proto__:null,default:{name:"滴管",buttons:[{title:"滴管工具",key:"I"}]}});export{t as default};
11
+ //# sourceMappingURL=ext-eyedropper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ext-eyedropper.js","sources":["../../../../src/editor/extensions/ext-eyedropper/ext-eyedropper.js","../../../../src/editor/extensions/ext-eyedropper/locale/en.js","../../../../src/editor/extensions/ext-eyedropper/locale/fr.js","../../../../src/editor/extensions/ext-eyedropper/locale/pl.js","../../../../src/editor/extensions/ext-eyedropper/locale/sv.js","../../../../src/editor/extensions/ext-eyedropper/locale/tr.js","../../../../src/editor/extensions/ext-eyedropper/locale/uk.js","../../../../src/editor/extensions/ext-eyedropper/locale/zh-CN.js"],"sourcesContent":["/**\n * @file ext-eyedropper.js\n *\n * @license MIT\n *\n * @copyright 2010 Jeff Schiller\n * @copyright 2021 OptimistikSAS\n *\n */\n\nconst name = 'eyedropper'\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 await loadExtensionTranslation(svgEditor)\n const { ChangeElementCommand } = svgCanvas.history\n // svgdoc = S.svgroot.parentNode.ownerDocument,\n const addToHistory = (cmd) => { svgCanvas.undoMgr.addCommandToHistory(cmd) }\n const currentStyle = {}\n const { $id, $click } = svgCanvas\n\n // Helper to show what style is currectly picked\n const helperCursor = document.createElement('div')\n helperCursor.style.width = '14px'\n helperCursor.style.height = '14px'\n helperCursor.style.position = 'absolute'\n svgEditor.workarea.appendChild(helperCursor)\n\n const styleHelper = () => {\n const mode = svgCanvas.getMode()\n\n if (mode === name) {\n helperCursor.style.display = 'block'\n\n const strokeWidthNum = Number(currentStyle.strokeWidth)\n const borderStyle = currentStyle.strokeDashArray === 'none' || !currentStyle.strokeDashArray ? 'solid' : 'dotted'\n\n helperCursor.style.background = currentStyle.fillPaint ?? 'transparent'\n helperCursor.style.opacity = currentStyle.opacity ?? 1\n helperCursor.style.border = (strokeWidthNum > 0 && currentStyle.strokePaint) ? `2px ${borderStyle} ${currentStyle.strokePaint}` : 'none'\n }\n }\n\n const resetCurrentStyle = () => {\n const keys = Object.keys(currentStyle)\n\n keys.forEach(key => delete currentStyle[key])\n }\n\n const cancelHandler = () => {\n if (Object.keys(currentStyle).length > 0) {\n resetCurrentStyle()\n styleHelper()\n } else {\n svgEditor.leftPanel.clickSelect()\n }\n }\n\n /**\n *\n * @param {module:svgcanvas.SvgCanvas#event:ext_selectedChanged|module:svgcanvas.SvgCanvas#event:ext_elementChanged} opts\n * @returns {void}\n */\n const getStyle = (opts) => {\n let elem = null\n if (!opts.multiselected && opts.elems[0] &&\n !['svg', 'g', 'use'].includes(opts.elems[0].nodeName)\n ) {\n elem = opts.elems[0]\n // grab the current style\n currentStyle.fillPaint = elem.getAttribute('fill') || 'black'\n currentStyle.fillOpacity = elem.getAttribute('fill-opacity') || 1.0\n currentStyle.strokePaint = elem.getAttribute('stroke')\n currentStyle.strokeOpacity = elem.getAttribute('stroke-opacity') || 1.0\n currentStyle.strokeWidth = elem.getAttribute('stroke-width')\n currentStyle.strokeDashArray = elem.getAttribute('stroke-dasharray')\n currentStyle.strokeLinecap = elem.getAttribute('stroke-linecap')\n currentStyle.strokeLinejoin = elem.getAttribute('stroke-linejoin')\n currentStyle.opacity = elem.getAttribute('opacity') || 1.0\n }\n }\n\n return {\n name: svgEditor.i18next.t(`${name}:name`),\n callback () {\n // Add the button and its handler(s)\n const title = `${name}:buttons.0.title`\n // const key = `${name}:buttons.0.key`\n const key = 'ctrl+I'\n const buttonTemplate = `\n <se-button id=\"tool_eyedropper\" title=\"${title}\" src=\"eye_dropper.svg\" shortcut=${key}></se-button>\n `\n svgCanvas.insertChildAtIndex($id('tools_left'), buttonTemplate, 12)\n $click($id('tool_eyedropper'), () => {\n if (this.leftPanel.updateLeftPanel('tool_eyedropper')) {\n svgCanvas.setMode(name)\n }\n })\n\n // enables helper, resets currently picked style if no element selected\n document.addEventListener('modeChange', e => {\n if (svgCanvas.getMode() === name) {\n styleHelper()\n } else {\n helperCursor.style.display = 'none'\n }\n if (svgCanvas.getSelectedElements().length === 0) {\n resetCurrentStyle()\n }\n })\n\n // Positions helper\n svgEditor.workarea.addEventListener('mousemove', (e) => {\n const x = e.clientX\n const y = e.clientY\n\n if (svgCanvas.getMode() === name) {\n helperCursor.style.top = y + 'px'\n helperCursor.style.left = x + 12 + 'px'\n styleHelper()\n }\n })\n\n svgEditor.workarea.addEventListener('mouseleave', e => {\n helperCursor.style.display = 'none'\n })\n\n // Listens to Esc to reset currently picked style / set Select mode\n document.addEventListener('keydown', e => {\n if (e.key === 'Escape' && svgCanvas.getMode() === name) {\n cancelHandler()\n }\n })\n },\n // if we have selected an element, grab its paint and enable the eye dropper button\n selectedChanged: getStyle,\n mouseDown (opts) {\n const mode = svgCanvas.getMode()\n if (mode === name) {\n const e = opts.event\n const { target } = e\n if (!['svg', 'g', 'use'].includes(target.nodeName)) {\n const changes = {}\n\n // If some style is picked - applies it to the target, if no style - picks it from the target\n if (Object.keys(currentStyle).length > 0) {\n const change = function (elem, attrname, newvalue) {\n changes[attrname] = elem.getAttribute(attrname)\n elem.setAttribute(attrname, newvalue)\n }\n\n if (currentStyle.fillPaint) { change(target, 'fill', currentStyle.fillPaint) }\n if (currentStyle.fillOpacity) { change(target, 'fill-opacity', currentStyle.fillOpacity) }\n if (currentStyle.strokePaint) { change(target, 'stroke', currentStyle.strokePaint) }\n if (currentStyle.strokeOpacity) { change(target, 'stroke-opacity', currentStyle.strokeOpacity) }\n if (currentStyle.strokeWidth) { change(target, 'stroke-width', currentStyle.strokeWidth) }\n if (currentStyle.opacity) { change(target, 'opacity', currentStyle.opacity) }\n if (currentStyle.strokeLinecap) { change(target, 'stroke-linecap', currentStyle.strokeLinecap) }\n if (currentStyle.strokeLinejoin) { change(target, 'stroke-linejoin', currentStyle.strokeLinejoin) }\n\n if (currentStyle.strokeDashArray) {\n change(target, 'stroke-dasharray', currentStyle.strokeDashArray)\n } else {\n target.removeAttribute('stroke-dasharray')\n }\n\n addToHistory(new ChangeElementCommand(target, changes))\n } else {\n getStyle({ elems: [target] })\n }\n }\n }\n }\n }\n }\n}\n","export default {\n name: 'eyedropper',\n buttons: [\n {\n title: 'Eye Dropper Tool',\n key: 'I'\n }\n ]\n}\n","export default {\n name: 'pipette',\n buttons: [\n {\n title: 'Outil pipette',\n key: 'I'\n }\n ]\n}\n","export default {\n name: 'pipeta',\n buttons: [\n {\n title: 'Narzędzie pipeta',\n key: 'I'\n }\n ]\n}","export default {\n name: 'pipett',\n buttons: [\n {\n title: 'pipettverktyg',\n key: 'I'\n }\n ]\n}\n","export default {\n name: 'renkseçici',\n buttons: [\n {\n title: 'Renk Seçim Aracı',\n key: 'I'\n }\n ]\n}\n","export default {\n name: 'eyedropper',\n buttons: [\n {\n title: 'Піпетка',\n key: 'I'\n }\n ]\n}\n","export default {\n name: '滴管',\n buttons: [\n {\n title: '滴管工具',\n key: 'I'\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","extEyedropper","init","this","svgCanvas","ChangeElementCommand","history","currentStyle","$id","$click","helperCursor","document","createElement","style","width","height","position","workarea","appendChild","styleHelper","getMode","display","strokeWidthNum","Number","strokeWidth","borderStyle","strokeDashArray","background","fillPaint","opacity","border","strokePaint","resetCurrentStyle","Object","keys","forEach","key","getStyle","opts","elem","multiselected","elems","includes","nodeName","getAttribute","fillOpacity","strokeOpacity","strokeLinecap","strokeLinejoin","t","callback","buttonTemplate","insertChildAtIndex","leftPanel","updateLeftPanel","setMode","addEventListener","e","getSelectedElements","length","x","clientX","y","clientY","top","left","clickSelect","selectedChanged","mouseDown","event","target","changes","change","attrname","newvalue","setAttribute","removeAttribute","cmd","undoMgr","addCommandToHistory","buttons","title"],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * @file ext-grid.js
3
+ *
4
+ * @license Apache-2.0
5
+ *
6
+ * @copyright 2010 Redou Mine, 2010 Alexis Deveria
7
+ *
8
+ */
9
+ const e="grid",loadExtensionTranslation=async function(t){let c;const u=t.configObj.pref("lang");try{c=await function __variableDynamicImportRuntime0__(e){switch(e){case"./locale/en.js":return Promise.resolve().then((function(){return n}));case"./locale/fr.js":return Promise.resolve().then((function(){return o}));case"./locale/pl.js":return Promise.resolve().then((function(){return r}));case"./locale/sv.js":return Promise.resolve().then((function(){return i}));case"./locale/tr.js":return Promise.resolve().then((function(){return a}));case"./locale/uk.js":return Promise.resolve().then((function(){return s}));case"./locale/zh-CN.js":return Promise.resolve().then((function(){return l}));default:return new Promise((function(t,n){("function"==typeof queueMicrotask?queueMicrotask:setTimeout)(n.bind(null,new Error("Unknown variable dynamic import: "+e)))}))}}(`./locale/${u}.js`)}catch(t){console.warn(`Missing translation (${u}) for ${e} - using 'en'`),c=await Promise.resolve().then((function(){return n}))}t.i18next.addResourceBundle(u,e,c.default)};var t={name:e,async init(){const t=this;await loadExtensionTranslation(t);const{svgCanvas:n}=t,{$id:o,$click:r,NS:i}=n,a=o("svgcanvas").ownerDocument,{assignAttributes:s}=n,l=document.createElement("canvas"),c=o("canvasBackground"),u=n.getTypeMap(),d=[.01,.1,1,10,100,1e3];let f=t.configObj.curConfig.showGrid||!1;l.style.display="none",t.$svgEditor.appendChild(l);const h=a.createElementNS(i.SVG,"svg");s(h,{id:"canvasGrid",width:"100%",height:"100%",x:0,y:0,overflow:"visible",display:"none"}),c.appendChild(h);const p=a.createElementNS(i.SVG,"defs"),g=a.createElementNS(i.SVG,"pattern");s(g,{id:"gridpattern",patternUnits:"userSpaceOnUse",x:0,y:0,width:100,height:100});const m=a.createElementNS(i.SVG,"image");s(m,{x:0,y:0,width:100,height:100}),g.append(m),p.append(g),o("canvasGrid").appendChild(p);const b=a.createElementNS(i.SVG,"rect");s(b,{width:"100%",height:"100%",x:0,y:0,"stroke-width":0,stroke:"none",fill:"url(#gridpattern)",style:"pointer-events: none; display:visible;"}),o("canvasGrid").appendChild(b);const updateGrid=e=>{const o=u[t.configObj.curConfig.baseUnit]*e,r=100/o;let i=1;d.some((e=>(i=e,r<=e)));const a=i*o;l.width=a,l.height=a;const s=l.getContext("2d"),c=.5,f=a/10;s.globalAlpha=.2,s.strokeStyle=t.configObj.curConfig.gridColor;for(let e=1;e<10;e++){const t=Math.round(f*e)+.5,n=0;s.moveTo(t,a),s.lineTo(t,n),s.moveTo(a,t),s.lineTo(n,t)}s.stroke(),s.beginPath(),s.globalAlpha=.5,s.moveTo(c,a),s.lineTo(c,0),s.moveTo(a,c),s.lineTo(0,c),s.stroke();const h=l.toDataURL("image/png");m.setAttribute("width",a),m.setAttribute("height",a),m.parentNode.setAttribute("width",a),m.parentNode.setAttribute("height",a),n.setHref(m,h)},gridUpdate=()=>{f&&updateGrid(n.getZoom()),o("canvasGrid").style.display=f?"block":"none",o("view_grid").pressed=f};return{name:t.i18next.t(`${e}:name`),zoomChanged(e){f&&updateGrid(e)},callback(){const n=document.createElement("template"),i=`${e}:buttons.0.title`;n.innerHTML=`\n <se-button id="view_grid" title="${i}" src="grid.svg"></se-button>\n `,o("editor_panel").append(n.content.cloneNode(!0)),r(o("view_grid"),(()=>{t.configObj.curConfig.showGrid=f=!f,gridUpdate()})),f&&gridUpdate()}}}},n=Object.freeze({__proto__:null,default:{name:"View Grid",buttons:[{title:"Show/Hide Grid"}]}}),o=Object.freeze({__proto__:null,default:{name:"Grille",buttons:[{title:"Afficher/Cacher Grille"}]}}),r=Object.freeze({__proto__:null,default:{name:"Widok siatki",buttons:[{title:"Pokaż/Ukryj siatkę"}]}}),i=Object.freeze({__proto__:null,default:{name:"Visa rutnät",buttons:[{title:"Visa/dölj rutnät"}]}}),a=Object.freeze({__proto__:null,default:{name:"Izgarayı Görüntüle",buttons:[{title:"Izgara Göster/Gizle"}]}}),s=Object.freeze({__proto__:null,default:{name:"Сітка",buttons:[{title:"Показати/Заковати Сітку"}]}}),l=Object.freeze({__proto__:null,default:{name:"网格视图",buttons:[{title:"显示/隐藏网格"}]}});export{t as default};
10
+ //# sourceMappingURL=ext-grid.js.map