@dwelle/excalidraw 0.5.0-3bc80da → 0.5.0-3f1f8dd
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser/dev/excalidraw-assets-dev/{blockDiagram-91b80b7a-AV5QRETN.js → blockDiagram-91b80b7a-ILS6OLW7.js} +6 -6
- package/dist/browser/dev/excalidraw-assets-dev/{c4Diagram-b2a90758-76KP7R2J.js → c4Diagram-b2a90758-ZOMIZS7C.js} +4 -4
- package/dist/browser/dev/excalidraw-assets-dev/{chunk-VC5KAH7K.js → chunk-2NKYQ7YO.js} +7 -7
- package/dist/browser/dev/excalidraw-assets-dev/{chunk-5A2HLTCS.js → chunk-6MVAKZD7.js} +3 -3
- package/dist/browser/dev/excalidraw-assets-dev/{chunk-ETW42MP7.js → chunk-A3JTYPH7.js} +3 -3
- package/dist/browser/dev/excalidraw-assets-dev/{chunk-72BUNPBM.js → chunk-BUWJGA2Q.js} +1814 -1411
- package/dist/browser/dev/excalidraw-assets-dev/chunk-BUWJGA2Q.js.map +7 -0
- package/dist/browser/dev/excalidraw-assets-dev/{chunk-LQ6UJQPH.js → chunk-F3FIDJD4.js} +38 -16
- package/dist/browser/dev/excalidraw-assets-dev/chunk-F3FIDJD4.js.map +7 -0
- package/dist/browser/dev/excalidraw-assets-dev/{chunk-EGR52Q6D.js → chunk-FPTNVFSO.js} +3 -3
- package/dist/browser/dev/excalidraw-assets-dev/{chunk-NZKR3TXM.js → chunk-HPTO4BUO.js} +28 -28
- package/dist/browser/dev/excalidraw-assets-dev/chunk-HPTO4BUO.js.map +7 -0
- package/dist/browser/dev/excalidraw-assets-dev/{chunk-RT5XHPGC.js → chunk-JAMLJD7O.js} +3 -3
- package/dist/browser/dev/excalidraw-assets-dev/{chunk-7V2SB4RU.js → chunk-LOACNU4P.js} +4 -4
- package/dist/browser/dev/excalidraw-assets-dev/{chunk-RC7ANJ5H.js → chunk-QGBZMLTJ.js} +3 -3
- package/dist/browser/dev/excalidraw-assets-dev/{chunk-BHIY32T7.js → chunk-RLV4E4WN.js} +3 -3
- package/dist/browser/dev/excalidraw-assets-dev/{chunk-ASZRDHCI.js → chunk-SHPKYTPS.js} +5 -5
- package/dist/browser/dev/excalidraw-assets-dev/{chunk-ADIHRQXG.js → chunk-WYUX2CK4.js} +4 -4
- package/dist/browser/dev/excalidraw-assets-dev/{chunk-LSPV6OUU.js → chunk-YAYXS7DC.js} +2 -2
- package/dist/browser/dev/excalidraw-assets-dev/{chunk-AKQDHN2W.js → chunk-YGAE3YWH.js} +5 -3
- package/dist/browser/dev/excalidraw-assets-dev/chunk-YGAE3YWH.js.map +7 -0
- package/dist/browser/dev/excalidraw-assets-dev/{classDiagram-30eddba6-KKFMJDII.js → classDiagram-30eddba6-YGYWOEDS.js} +6 -6
- package/dist/browser/dev/excalidraw-assets-dev/{classDiagram-v2-f2df5561-H6OLRXIM.js → classDiagram-v2-f2df5561-4ZZOSFAG.js} +9 -9
- package/dist/browser/dev/excalidraw-assets-dev/{directory-open-01563666-JDTB6SPR.js → directory-open-01563666-QTUC5QKS.js} +2 -2
- package/dist/browser/dev/excalidraw-assets-dev/{directory-open-4ed118d0-JL7GGNMJ.js → directory-open-4ed118d0-EAOFXSXO.js} +2 -2
- package/dist/browser/dev/excalidraw-assets-dev/dist-V4ZSY6BC.js +10 -0
- package/dist/browser/dev/excalidraw-assets-dev/{en-PSBMWL4S.js → en-RSUSLGPV.js} +2 -2
- package/dist/browser/dev/excalidraw-assets-dev/{erDiagram-47591fe2-N5L7DKGN.js → erDiagram-47591fe2-JIHVWX3W.js} +5 -5
- package/dist/browser/dev/excalidraw-assets-dev/{file-open-002ab408-YDSARWPZ.js → file-open-002ab408-UPAWPTEF.js} +2 -2
- package/dist/browser/dev/excalidraw-assets-dev/{file-open-7c801643-EROXTFSX.js → file-open-7c801643-N5N32MHQ.js} +2 -2
- package/dist/browser/dev/excalidraw-assets-dev/{file-save-3189631c-TL6V2OEY.js → file-save-3189631c-PRH4NPQ5.js} +2 -2
- package/dist/browser/dev/excalidraw-assets-dev/{file-save-745eba88-6WWZFABL.js → file-save-745eba88-5GM4HHWQ.js} +2 -2
- package/dist/browser/dev/excalidraw-assets-dev/{flowDiagram-5540d9b9-VRM36QCA.js → flowDiagram-5540d9b9-6CLLUMWF.js} +10 -10
- package/dist/browser/dev/excalidraw-assets-dev/{flowDiagram-v2-3b53844e-3CAUSA7W.js → flowDiagram-v2-3b53844e-NBMLQH3M.js} +10 -10
- package/dist/browser/dev/excalidraw-assets-dev/{flowchart-elk-definition-5fe447d6-ODK3QXSV.js → flowchart-elk-definition-5fe447d6-UEQSCXLT.js} +6 -6
- package/dist/browser/dev/excalidraw-assets-dev/{ganttDiagram-9a3bba1f-KKXGBNQI.js → ganttDiagram-9a3bba1f-WK2H7LFS.js} +3 -3
- package/dist/browser/dev/excalidraw-assets-dev/{gitGraphDiagram-96e6b4ee-TMH7E2V3.js → gitGraphDiagram-96e6b4ee-KDAA2U2K.js} +3 -3
- package/dist/browser/dev/excalidraw-assets-dev/{image-DTHOT6RB.js → image-IPNHMJTL.js} +6 -6
- package/dist/browser/dev/excalidraw-assets-dev/{image-FDQLNM24.css → image-JYKIJPJC.css} +11 -14
- package/dist/browser/dev/excalidraw-assets-dev/image-JYKIJPJC.css.map +7 -0
- package/dist/browser/dev/excalidraw-assets-dev/{image-blob-reduce.esm-COPHY4CW.js → image-blob-reduce.esm-LQUP674P.js} +2 -2
- package/dist/browser/dev/excalidraw-assets-dev/{infoDiagram-bcd20f53-VF34AT6C.js → infoDiagram-bcd20f53-JHVEGFM5.js} +3 -3
- package/dist/browser/dev/excalidraw-assets-dev/{journeyDiagram-4fe6b3dc-I4SJ2IBL.js → journeyDiagram-4fe6b3dc-LELHHHNL.js} +4 -4
- package/dist/browser/dev/excalidraw-assets-dev/{katex-SVKNABMQ.js → katex-24LMEI2S.js} +2 -2
- package/dist/browser/dev/excalidraw-assets-dev/{mindmap-definition-f354de21-PZW6XTRC.js → mindmap-definition-f354de21-EIYHHYCX.js} +4 -4
- package/dist/browser/dev/excalidraw-assets-dev/{pica-KKOK34SZ.js → pica-AEP6VYOH.js} +2 -2
- package/dist/browser/dev/excalidraw-assets-dev/{pieDiagram-79897490-JATUFGKC.js → pieDiagram-79897490-LKE2EHUL.js} +3 -3
- package/dist/browser/dev/excalidraw-assets-dev/{quadrantDiagram-62f64e94-V5FY6DEM.js → quadrantDiagram-62f64e94-HZHJFQUT.js} +3 -3
- package/dist/browser/dev/excalidraw-assets-dev/{requirementDiagram-05bf5f74-ZHT5V47S.js → requirementDiagram-05bf5f74-FXXIEN7J.js} +5 -5
- package/dist/browser/dev/excalidraw-assets-dev/{roundRect-ZX3RASBO.js → roundRect-5PHKZGUZ.js} +2 -2
- package/dist/browser/dev/excalidraw-assets-dev/{sankeyDiagram-97764748-ELYQDLSC.js → sankeyDiagram-97764748-KKTB5UYB.js} +3 -3
- package/dist/browser/dev/excalidraw-assets-dev/{sequenceDiagram-acc0e65c-GEO2ZAH2.js → sequenceDiagram-acc0e65c-KPIADG32.js} +4 -4
- package/dist/browser/dev/excalidraw-assets-dev/{stateDiagram-0ff1cf1a-BLHQKXOS.js → stateDiagram-0ff1cf1a-IQUWRAPJ.js} +6 -6
- package/dist/browser/dev/excalidraw-assets-dev/{stateDiagram-v2-9a9d610d-XFLTR7I5.js → stateDiagram-v2-9a9d610d-3OAKVFDX.js} +9 -9
- package/dist/browser/dev/excalidraw-assets-dev/{timeline-definition-fea2a41d-6DNHPFX5.js → timeline-definition-fea2a41d-TRDW4746.js} +3 -3
- package/dist/browser/dev/excalidraw-assets-dev/{xychartDiagram-ab372869-4S5CTHTW.js → xychartDiagram-ab372869-IMLIZWMU.js} +4 -4
- package/dist/browser/dev/index.css +10 -13
- package/dist/browser/dev/index.css.map +2 -2
- package/dist/browser/dev/index.js +5 -5
- package/dist/browser/prod/excalidraw-assets/{blockDiagram-91b80b7a-JEM7KGWA.js → blockDiagram-91b80b7a-U252OY5I.js} +1 -1
- package/dist/browser/prod/excalidraw-assets/{c4Diagram-b2a90758-MPCOLKKP.js → c4Diagram-b2a90758-PZHH3D6H.js} +1 -1
- package/dist/browser/prod/excalidraw-assets/{chunk-U2OTJT7X.js → chunk-2Q2CONEB.js} +1 -1
- package/dist/browser/prod/excalidraw-assets/{chunk-6AI4F5QL.js → chunk-673OVD3J.js} +1 -1
- package/dist/browser/prod/excalidraw-assets/{chunk-OVXHC22A.js → chunk-6WNOLTTI.js} +1 -1
- package/dist/browser/prod/excalidraw-assets/{chunk-HSQV5QPE.js → chunk-74OJXQQW.js} +1 -1
- package/dist/browser/prod/excalidraw-assets/{chunk-6EO6NUHK.js → chunk-AFIKGZ5K.js} +1 -1
- package/dist/browser/prod/excalidraw-assets/{chunk-722XS4R3.js → chunk-BEIT5EF6.js} +1 -1
- package/dist/browser/prod/excalidraw-assets/{chunk-7P65EP4L.js → chunk-BZSIRHFI.js} +1 -1
- package/dist/browser/prod/excalidraw-assets/chunk-DIQBR7TD.js +7 -0
- package/dist/browser/prod/excalidraw-assets/{chunk-VVPLNHF7.js → chunk-EHJPIGV7.js} +1 -1
- package/dist/browser/prod/excalidraw-assets/{chunk-JVAZGNHG.js → chunk-JP7OGUWY.js} +21 -21
- package/dist/browser/prod/excalidraw-assets/{chunk-Y5GBBDDT.js → chunk-LJU3KBAH.js} +1 -1
- package/dist/browser/prod/excalidraw-assets/chunk-MZQB665Y.js +335 -0
- package/dist/browser/prod/excalidraw-assets/{chunk-VMMEDW7P.js → chunk-NN5GPCYQ.js} +1 -1
- package/dist/browser/prod/excalidraw-assets/{chunk-ICDT7GZX.js → chunk-PLOZZA4H.js} +1 -1
- package/dist/browser/prod/excalidraw-assets/{chunk-BJTCWAK5.js → chunk-SCZE4QLN.js} +2 -2
- package/dist/browser/prod/excalidraw-assets/{chunk-Q6QP4TRB.js → chunk-VVOVJRKV.js} +2 -2
- package/dist/browser/prod/excalidraw-assets/{classDiagram-30eddba6-L5O4YQR4.js → classDiagram-30eddba6-F55Z2E53.js} +1 -1
- package/dist/browser/prod/excalidraw-assets/{classDiagram-v2-f2df5561-FEFNEE7Y.js → classDiagram-v2-f2df5561-BT5JNEDE.js} +1 -1
- package/dist/browser/prod/excalidraw-assets/{directory-open-01563666-AYWCK7BJ.js → directory-open-01563666-6YO3OQDX.js} +1 -1
- package/dist/browser/prod/excalidraw-assets/{directory-open-4ed118d0-QI47HV3G.js → directory-open-4ed118d0-4LV3RSSM.js} +1 -1
- package/dist/browser/prod/excalidraw-assets/dist-4LC2UFYB.js +1 -0
- package/dist/browser/prod/excalidraw-assets/{en-MPFDZHEH.js → en-GM5O55AO-LNPCBS7J.js} +1 -1
- package/dist/browser/prod/excalidraw-assets/{en-Q552WR7L-QAV42NF3.js → en-SOC7FEW5.js} +1 -1
- package/dist/browser/prod/excalidraw-assets/{erDiagram-47591fe2-BI5PYUZN.js → erDiagram-47591fe2-XG2ZEMCB.js} +1 -1
- package/dist/browser/prod/excalidraw-assets/{file-open-002ab408-55ZWRNMG.js → file-open-002ab408-A6LI262V.js} +1 -1
- package/dist/browser/prod/excalidraw-assets/{file-open-7c801643-HBAOEEFX.js → file-open-7c801643-BBGJO4PI.js} +1 -1
- package/dist/browser/prod/excalidraw-assets/{file-save-3189631c-FJ75SUZ7.js → file-save-3189631c-7RDEYICA.js} +1 -1
- package/dist/browser/prod/excalidraw-assets/{file-save-745eba88-RAVXYEAW.js → file-save-745eba88-4PPFVJWD.js} +1 -1
- package/dist/browser/prod/excalidraw-assets/{flowDiagram-5540d9b9-CYU56524.js → flowDiagram-5540d9b9-2SENIXRT.js} +1 -1
- package/dist/browser/prod/excalidraw-assets/flowDiagram-v2-3b53844e-KLBTW5WV.js +1 -0
- package/dist/browser/prod/excalidraw-assets/{flowchart-elk-definition-5fe447d6-PECNKVTE.js → flowchart-elk-definition-5fe447d6-TLXFCSNW.js} +1 -1
- package/dist/browser/prod/excalidraw-assets/{ganttDiagram-9a3bba1f-CED7COSZ.js → ganttDiagram-9a3bba1f-5JR6PUBI.js} +1 -1
- package/dist/browser/prod/excalidraw-assets/{gitGraphDiagram-96e6b4ee-JKIKIQ6K.js → gitGraphDiagram-96e6b4ee-6A6CZ3PI.js} +1 -1
- package/dist/browser/prod/excalidraw-assets/image-MFUVVFOH.js +1 -0
- package/dist/browser/prod/excalidraw-assets/{image-blob-reduce.esm-JZQK2EOW.js → image-blob-reduce.esm-MLHV7PI7.js} +1 -1
- package/dist/browser/prod/excalidraw-assets/{infoDiagram-bcd20f53-FN22PGWX.js → infoDiagram-bcd20f53-AV3OBV2N.js} +1 -1
- package/dist/browser/prod/excalidraw-assets/{journeyDiagram-4fe6b3dc-4YOSXQFH.js → journeyDiagram-4fe6b3dc-BLHDTOGZ.js} +1 -1
- package/dist/browser/prod/excalidraw-assets/{katex-VZTZSNIY.js → katex-WDF2YXSQ.js} +1 -1
- package/dist/browser/prod/excalidraw-assets/{mindmap-definition-f354de21-F3HVRHRH.js → mindmap-definition-f354de21-ZETPFZUU.js} +1 -1
- package/dist/browser/prod/excalidraw-assets/{pica-UIPUQYNH.js → pica-EKWSA7DQ.js} +1 -1
- package/dist/browser/prod/excalidraw-assets/{pieDiagram-79897490-2EPJDOIF.js → pieDiagram-79897490-YIGOGIGU.js} +1 -1
- package/dist/browser/prod/excalidraw-assets/{quadrantDiagram-62f64e94-DOUD6GJY.js → quadrantDiagram-62f64e94-PKU6OGXK.js} +1 -1
- package/dist/browser/prod/excalidraw-assets/{requirementDiagram-05bf5f74-6SN5DKRA.js → requirementDiagram-05bf5f74-ZS6DWQXC.js} +1 -1
- package/dist/browser/prod/excalidraw-assets/{roundRect-KPNU7DEE.js → roundRect-LMXTT73M.js} +1 -1
- package/dist/browser/prod/excalidraw-assets/{sankeyDiagram-97764748-UWC7MPXQ.js → sankeyDiagram-97764748-BAQTPNXW.js} +1 -1
- package/dist/browser/prod/excalidraw-assets/{sequenceDiagram-acc0e65c-F6IOZYAD.js → sequenceDiagram-acc0e65c-ZGG6MEZO.js} +1 -1
- package/dist/browser/prod/excalidraw-assets/{stateDiagram-0ff1cf1a-BFMFLWOS.js → stateDiagram-0ff1cf1a-FF7QI5F7.js} +1 -1
- package/dist/browser/prod/excalidraw-assets/{stateDiagram-v2-9a9d610d-5VQQPAQD.js → stateDiagram-v2-9a9d610d-K3KQFXGQ.js} +1 -1
- package/dist/browser/prod/excalidraw-assets/{timeline-definition-fea2a41d-7E3BGOKT.js → timeline-definition-fea2a41d-2A5Y4OLK.js} +1 -1
- package/dist/browser/prod/excalidraw-assets/{xychartDiagram-ab372869-THLWKJ2H.js → xychartDiagram-ab372869-RKDU5XOA.js} +1 -1
- package/dist/browser/prod/index.css +1 -1
- package/dist/browser/prod/index.js +15 -15
- package/dist/{prod/en-Q552WR7L.json → dev/en-GM5O55AO.json} +4 -2
- package/dist/dev/index.css +10 -13
- package/dist/dev/index.css.map +2 -2
- package/dist/dev/index.js +1606 -1192
- package/dist/dev/index.js.map +4 -4
- package/dist/excalidraw/actions/actionAddToLibrary.d.ts +3 -3
- package/dist/excalidraw/actions/actionAlign.d.ts +8 -8
- package/dist/excalidraw/actions/actionBoundText.d.ts +6 -6
- package/dist/excalidraw/actions/actionBoundText.js +3 -1
- package/dist/excalidraw/actions/actionCanvas.d.ts +16 -16
- package/dist/excalidraw/actions/actionClipboard.d.ts +12 -12
- package/dist/excalidraw/actions/actionDeleteSelected.d.ts +5 -5
- package/dist/excalidraw/actions/actionDistribute.d.ts +4 -4
- package/dist/excalidraw/actions/actionDuplicateSelection.d.ts +3 -3
- package/dist/excalidraw/actions/actionElementLock.d.ts +3 -3
- package/dist/excalidraw/actions/actionExport.d.ts +12 -12
- package/dist/excalidraw/actions/actionFinalize.d.ts +3 -3
- package/dist/excalidraw/actions/actionFlip.d.ts +4 -4
- package/dist/excalidraw/actions/actionFlip.js +6 -7
- package/dist/excalidraw/actions/actionFrame.d.ts +314 -6
- package/dist/excalidraw/actions/actionGroup.d.ts +314 -4
- package/dist/excalidraw/actions/actionHistory.d.ts +3 -3
- package/dist/excalidraw/actions/actionHistory.js +4 -4
- package/dist/excalidraw/actions/actionLinearEditor.d.ts +5 -3
- package/dist/excalidraw/actions/actionLinearEditor.js +19 -4
- package/dist/excalidraw/actions/actionLink.d.ts +1 -1
- package/dist/excalidraw/actions/actionMenu.d.ts +3 -3
- package/dist/excalidraw/actions/actionNavigate.d.ts +3 -3
- package/dist/excalidraw/actions/actionProperties.d.ts +15 -15
- package/dist/excalidraw/actions/actionProperties.js +1 -1
- package/dist/excalidraw/actions/actionSelectAll.d.ts +2 -2
- package/dist/excalidraw/actions/actionStyles.d.ts +5 -2
- package/dist/excalidraw/actions/actionTextAutoResize.d.ts +17 -0
- package/dist/excalidraw/actions/actionTextAutoResize.js +38 -0
- package/dist/excalidraw/actions/actionToggleGridMode.d.ts +2 -2
- package/dist/excalidraw/actions/actionToggleObjectsSnapMode.d.ts +1 -1
- package/dist/excalidraw/actions/actionToggleStats.d.ts +1 -1
- package/dist/excalidraw/actions/actionToggleViewMode.d.ts +1 -1
- package/dist/excalidraw/actions/actionToggleZenMode.d.ts +1 -1
- package/dist/excalidraw/actions/actionZindex.d.ts +8 -4
- package/dist/excalidraw/actions/actionZindex.js +4 -0
- package/dist/excalidraw/actions/manager.d.ts +3 -3
- package/dist/excalidraw/actions/register.d.ts +1 -1
- package/dist/excalidraw/actions/shortcuts.d.ts +2 -2
- package/dist/excalidraw/actions/types.d.ts +6 -6
- package/dist/excalidraw/align.d.ts +1 -1
- package/dist/excalidraw/animated-trail.d.ts +2 -2
- package/dist/excalidraw/appState.d.ts +1 -1
- package/dist/excalidraw/change.d.ts +4 -4
- package/dist/excalidraw/change.js +14 -7
- package/dist/excalidraw/charts.d.ts +1 -1
- package/dist/excalidraw/clients.d.ts +2 -2
- package/dist/excalidraw/clients.js +1 -1
- package/dist/excalidraw/clipboard.d.ts +3 -3
- package/dist/excalidraw/colors.d.ts +1 -1
- package/dist/excalidraw/components/Actions.d.ts +3 -3
- package/dist/excalidraw/components/Actions.js +9 -6
- package/dist/excalidraw/components/App.d.ts +10 -11
- package/dist/excalidraw/components/App.js +187 -95
- package/dist/excalidraw/components/ButtonIconSelect.js +1 -1
- package/dist/excalidraw/components/CheckboxItem.js +1 -1
- package/dist/excalidraw/components/ColorPicker/ColorInput.d.ts +1 -1
- package/dist/excalidraw/components/ColorPicker/ColorInput.js +1 -1
- package/dist/excalidraw/components/ColorPicker/ColorPicker.d.ts +4 -4
- package/dist/excalidraw/components/ColorPicker/ColorPicker.js +1 -1
- package/dist/excalidraw/components/ColorPicker/Picker.d.ts +3 -3
- package/dist/excalidraw/components/ColorPicker/PickerColorList.d.ts +1 -1
- package/dist/excalidraw/components/ColorPicker/PickerHeading.d.ts +1 -1
- package/dist/excalidraw/components/ColorPicker/ShadeList.d.ts +1 -1
- package/dist/excalidraw/components/ColorPicker/TopPicks.d.ts +1 -1
- package/dist/excalidraw/components/ColorPicker/colorPickerUtils.d.ts +2 -2
- package/dist/excalidraw/components/ColorPicker/colorPickerUtils.js +1 -1
- package/dist/excalidraw/components/ColorPicker/keyboardNavHandlers.d.ts +2 -2
- package/dist/excalidraw/components/ColorPicker/keyboardNavHandlers.js +1 -1
- package/dist/excalidraw/components/CommandPalette/CommandPalette.d.ts +1 -1
- package/dist/excalidraw/components/CommandPalette/CommandPalette.js +5 -5
- package/dist/excalidraw/components/CommandPalette/defaultCommandPaletteItems.d.ts +1 -1
- package/dist/excalidraw/components/CommandPalette/types.d.ts +3 -3
- package/dist/excalidraw/components/ConfirmDialog.d.ts +1 -1
- package/dist/excalidraw/components/ContextMenu.d.ts +2 -2
- package/dist/excalidraw/components/ContextMenu.js +2 -2
- package/dist/excalidraw/components/DarkModeToggle.d.ts +1 -1
- package/dist/excalidraw/components/DefaultSidebar.d.ts +2 -2
- package/dist/excalidraw/components/Dialog.js +1 -1
- package/dist/excalidraw/components/DialogActionButton.d.ts +1 -1
- package/dist/excalidraw/components/EyeDropper.d.ts +2 -2
- package/dist/excalidraw/components/FollowMode/FollowMode.d.ts +1 -1
- package/dist/excalidraw/components/FollowMode/FollowMode.js +1 -1
- package/dist/excalidraw/components/HintViewer.d.ts +1 -1
- package/dist/excalidraw/components/IconPicker.js +2 -2
- package/dist/excalidraw/components/ImageExportDialog.d.ts +1 -1
- package/dist/excalidraw/components/InitializeApp.d.ts +2 -2
- package/dist/excalidraw/components/JSONExportDialog.d.ts +3 -3
- package/dist/excalidraw/components/LayerUI.d.ts +4 -4
- package/dist/excalidraw/components/LayerUI.js +2 -2
- package/dist/excalidraw/components/LibraryMenu.d.ts +2 -2
- package/dist/excalidraw/components/LibraryMenuBrowseButton.d.ts +1 -1
- package/dist/excalidraw/components/LibraryMenuControlButtons.d.ts +1 -1
- package/dist/excalidraw/components/LibraryMenuHeaderContent.d.ts +2 -2
- package/dist/excalidraw/components/LibraryMenuItems.d.ts +1 -1
- package/dist/excalidraw/components/LibraryMenuSection.d.ts +5 -4
- package/dist/excalidraw/components/LibraryUnit.d.ts +2 -2
- package/dist/excalidraw/components/LoadingMessage.d.ts +1 -1
- package/dist/excalidraw/components/MagicSettings.js +2 -2
- package/dist/excalidraw/components/MobileMenu.d.ts +3 -3
- package/dist/excalidraw/components/MobileMenu.js +1 -1
- package/dist/excalidraw/components/Modal.d.ts +1 -1
- package/dist/excalidraw/components/OverwriteConfirm/OverwriteConfirmState.d.ts +1 -1
- package/dist/excalidraw/components/PasteChartDialog.d.ts +1 -1
- package/dist/excalidraw/components/PasteChartDialog.js +1 -1
- package/dist/excalidraw/components/PublishLibrary.d.ts +1 -1
- package/dist/excalidraw/components/SVGLayer.d.ts +1 -1
- package/dist/excalidraw/components/Sidebar/Sidebar.d.ts +2 -2
- package/dist/excalidraw/components/Sidebar/Sidebar.js +1 -1
- package/dist/excalidraw/components/Sidebar/SidebarTab.d.ts +1 -1
- package/dist/excalidraw/components/Sidebar/SidebarTabTrigger.d.ts +1 -1
- package/dist/excalidraw/components/Sidebar/SidebarTrigger.d.ts +1 -1
- package/dist/excalidraw/components/Sidebar/common.d.ts +1 -1
- package/dist/excalidraw/components/Stack.d.ts +2 -2
- package/dist/excalidraw/components/Stats.d.ts +2 -2
- package/dist/excalidraw/components/TTDDialog/MermaidToExcalidraw.d.ts +1 -1
- package/dist/excalidraw/components/TTDDialog/TTDDialog.js +2 -2
- package/dist/excalidraw/components/TTDDialog/TTDDialogInput.d.ts +1 -1
- package/dist/excalidraw/components/TTDDialog/TTDDialogPanel.d.ts +1 -1
- package/dist/excalidraw/components/TTDDialog/TTDDialogPanels.d.ts +1 -1
- package/dist/excalidraw/components/TTDDialog/TTDDialogTabs.d.ts +1 -1
- package/dist/excalidraw/components/TTDDialog/TTDDialogTrigger.d.ts +1 -1
- package/dist/excalidraw/components/TTDDialog/common.d.ts +4 -4
- package/dist/excalidraw/components/TextField.d.ts +1 -1
- package/dist/excalidraw/components/Toast.d.ts +1 -1
- package/dist/excalidraw/components/ToolButton.d.ts +3 -2
- package/dist/excalidraw/components/Trans.d.ts +1 -1
- package/dist/excalidraw/components/UserList.d.ts +1 -1
- package/dist/excalidraw/components/canvases/InteractiveCanvas.d.ts +5 -3
- package/dist/excalidraw/components/canvases/InteractiveCanvas.js +5 -2
- package/dist/excalidraw/components/canvases/StaticCanvas.d.ts +2 -2
- package/dist/excalidraw/components/canvases/StaticCanvas.js +2 -2
- package/dist/excalidraw/components/dropdownMenu/DropdownMenuItem.js +2 -2
- package/dist/excalidraw/components/footer/Footer.d.ts +2 -2
- package/dist/excalidraw/components/hyperlink/Hyperlink.d.ts +2 -2
- package/dist/excalidraw/components/hyperlink/helpers.d.ts +3 -3
- package/dist/excalidraw/components/icons.d.ts +3 -2
- package/dist/excalidraw/components/icons.js +19 -6
- package/dist/excalidraw/constants.d.ts +5 -2
- package/dist/excalidraw/constants.js +10 -0
- package/dist/excalidraw/context/ui-appState.d.ts +1 -1
- package/dist/excalidraw/cursor.d.ts +1 -1
- package/dist/excalidraw/data/EditorLocalStorage.d.ts +2 -2
- package/dist/excalidraw/data/blob.d.ts +5 -5
- package/dist/excalidraw/data/filesystem.d.ts +2 -1
- package/dist/excalidraw/data/index.d.ts +4 -4
- package/dist/excalidraw/data/json.d.ts +3 -3
- package/dist/excalidraw/data/library.d.ts +3 -3
- package/dist/excalidraw/data/magic.d.ts +3 -3
- package/dist/excalidraw/data/reconcile.d.ts +3 -3
- package/dist/excalidraw/data/resave.d.ts +2 -2
- package/dist/excalidraw/data/resave.js +1 -1
- package/dist/excalidraw/data/restore.d.ts +3 -3
- package/dist/excalidraw/data/restore.js +3 -0
- package/dist/excalidraw/data/transform.d.ts +3 -3
- package/dist/excalidraw/data/types.d.ts +3 -3
- package/dist/excalidraw/element/ElementCanvasButtons.d.ts +1 -1
- package/dist/excalidraw/element/binding.d.ts +5 -19
- package/dist/excalidraw/element/binding.js +109 -90
- package/dist/excalidraw/element/bounds.d.ts +3 -3
- package/dist/excalidraw/element/collision.d.ts +3 -3
- package/dist/excalidraw/element/collision.js +1 -1
- package/dist/excalidraw/element/containerCache.d.ts +1 -1
- package/dist/excalidraw/element/dragElements.d.ts +4 -4
- package/dist/excalidraw/element/dragElements.js +27 -3
- package/dist/excalidraw/element/embeddable.d.ts +4 -4
- package/dist/excalidraw/element/image.d.ts +2 -2
- package/dist/excalidraw/element/index.d.ts +2 -2
- package/dist/excalidraw/element/index.js +1 -1
- package/dist/excalidraw/element/linearElementEditor.d.ts +4 -4
- package/dist/excalidraw/element/mutateElement.d.ts +3 -3
- package/dist/excalidraw/element/mutateElement.js +5 -3
- package/dist/excalidraw/element/newElement.d.ts +5 -8
- package/dist/excalidraw/element/newElement.js +16 -14
- package/dist/excalidraw/element/resizeElements.d.ts +4 -4
- package/dist/excalidraw/element/resizeElements.js +172 -96
- package/dist/excalidraw/element/resizeTest.d.ts +7 -7
- package/dist/excalidraw/element/resizeTest.js +53 -8
- package/dist/excalidraw/element/showSelectedShapeActions.d.ts +2 -2
- package/dist/excalidraw/element/sizeHelpers.d.ts +2 -2
- package/dist/excalidraw/element/sortElements.d.ts +1 -1
- package/dist/excalidraw/element/textElement.d.ts +5 -4
- package/dist/excalidraw/element/textElement.js +11 -3
- package/dist/excalidraw/element/textWysiwyg.d.ts +12 -6
- package/dist/excalidraw/element/textWysiwyg.js +38 -17
- package/dist/excalidraw/element/transformHandles.d.ts +22 -4
- package/dist/excalidraw/element/transformHandles.js +22 -11
- package/dist/excalidraw/element/typeChecks.d.ts +3 -3
- package/dist/excalidraw/element/types.d.ts +11 -4
- package/dist/excalidraw/emitter.d.ts +1 -1
- package/dist/excalidraw/fractionalIndex.d.ts +1 -1
- package/dist/excalidraw/fractionalIndex.js +2 -4
- package/dist/excalidraw/frame.d.ts +3 -3
- package/dist/excalidraw/gatransforms.d.ts +1 -1
- package/dist/excalidraw/gesture.d.ts +1 -1
- package/dist/excalidraw/groups.d.ts +4 -3
- package/dist/excalidraw/groups.js +3 -0
- package/dist/excalidraw/history.d.ts +4 -4
- package/dist/excalidraw/hooks/useEmitter.d.ts +1 -1
- package/dist/excalidraw/hooks/useLibraryItemSvg.d.ts +1 -1
- package/dist/excalidraw/i18n.d.ts +1 -1
- package/dist/excalidraw/index.d.ts +1 -1
- package/dist/excalidraw/jotai.d.ts +1 -1
- package/dist/excalidraw/laser-trails.d.ts +3 -2
- package/dist/excalidraw/locales/en.json +4 -2
- package/dist/excalidraw/math.d.ts +2 -2
- package/dist/excalidraw/mermaid.d.ts +2 -0
- package/dist/excalidraw/mermaid.js +28 -0
- package/dist/excalidraw/points.d.ts +1 -1
- package/dist/excalidraw/queue.d.ts +1 -1
- package/dist/excalidraw/renderer/helpers.d.ts +2 -2
- package/dist/excalidraw/renderer/interactiveScene.d.ts +2 -2
- package/dist/excalidraw/renderer/interactiveScene.js +38 -11
- package/dist/excalidraw/renderer/renderElement.d.ts +4 -4
- package/dist/excalidraw/renderer/renderElement.js +4 -4
- package/dist/excalidraw/renderer/renderSnaps.d.ts +1 -1
- package/dist/excalidraw/renderer/staticScene.d.ts +1 -1
- package/dist/excalidraw/renderer/staticSvgScene.d.ts +4 -4
- package/dist/excalidraw/scene/Fonts.d.ts +2 -4
- package/dist/excalidraw/scene/Fonts.js +6 -12
- package/dist/excalidraw/scene/Renderer.d.ts +4 -4
- package/dist/excalidraw/scene/Renderer.js +2 -3
- package/dist/excalidraw/scene/Scene.d.ts +13 -7
- package/dist/excalidraw/scene/Scene.js +14 -8
- package/dist/excalidraw/scene/Shape.d.ts +1 -1
- package/dist/excalidraw/scene/ShapeCache.d.ts +5 -4
- package/dist/excalidraw/scene/comparisons.d.ts +2 -2
- package/dist/excalidraw/scene/export.d.ts +3 -3
- package/dist/excalidraw/scene/export.js +2 -2
- package/dist/excalidraw/scene/scroll.d.ts +2 -2
- package/dist/excalidraw/scene/scrollbars.d.ts +3 -3
- package/dist/excalidraw/scene/selection.d.ts +2 -2
- package/dist/excalidraw/scene/types.d.ts +7 -5
- package/dist/excalidraw/scene/zoom.d.ts +1 -1
- package/dist/excalidraw/snapping.d.ts +4 -4
- package/dist/excalidraw/snapping.js +2 -1
- package/dist/excalidraw/store.d.ts +34 -4
- package/dist/excalidraw/store.js +27 -0
- package/dist/excalidraw/types.d.ts +18 -17
- package/dist/excalidraw/utils.d.ts +4 -4
- package/dist/excalidraw/zindex.d.ts +2 -2
- package/dist/{dev/en-Q552WR7L.json → prod/en-GM5O55AO.json} +4 -2
- package/dist/prod/index.css +1 -1
- package/dist/prod/index.js +41 -41
- package/dist/utils/bbox.d.ts +2 -2
- package/dist/utils/collision.d.ts +1 -1
- package/dist/utils/export.d.ts +1 -1
- package/dist/utils/geometry/geometry.d.ts +1 -1
- package/dist/utils/geometry/shape.d.ts +1 -1
- package/dist/utils/withinBounds.d.ts +1 -1
- package/history.ts +4 -4
- package/package.json +2 -2
- package/dist/browser/dev/excalidraw-assets-dev/chunk-72BUNPBM.js.map +0 -7
- package/dist/browser/dev/excalidraw-assets-dev/chunk-AKQDHN2W.js.map +0 -7
- package/dist/browser/dev/excalidraw-assets-dev/chunk-LQ6UJQPH.js.map +0 -7
- package/dist/browser/dev/excalidraw-assets-dev/chunk-NZKR3TXM.js.map +0 -7
- package/dist/browser/dev/excalidraw-assets-dev/dist-QD4SCHJY.js +0 -10
- package/dist/browser/dev/excalidraw-assets-dev/image-FDQLNM24.css.map +0 -7
- package/dist/browser/prod/excalidraw-assets/chunk-MJ44PPVZ.js +0 -335
- package/dist/browser/prod/excalidraw-assets/chunk-W5Q65S7S.js +0 -6
- package/dist/browser/prod/excalidraw-assets/dist-5RJKYEVC.js +0 -1
- package/dist/browser/prod/excalidraw-assets/flowDiagram-v2-3b53844e-SDQRTWTZ.js +0 -1
- package/dist/browser/prod/excalidraw-assets/image-IBX4GOPW.js +0 -1
- /package/dist/browser/dev/excalidraw-assets-dev/{blockDiagram-91b80b7a-AV5QRETN.js.map → blockDiagram-91b80b7a-ILS6OLW7.js.map} +0 -0
- /package/dist/browser/dev/excalidraw-assets-dev/{c4Diagram-b2a90758-76KP7R2J.js.map → c4Diagram-b2a90758-ZOMIZS7C.js.map} +0 -0
- /package/dist/browser/dev/excalidraw-assets-dev/{chunk-VC5KAH7K.js.map → chunk-2NKYQ7YO.js.map} +0 -0
- /package/dist/browser/dev/excalidraw-assets-dev/{chunk-5A2HLTCS.js.map → chunk-6MVAKZD7.js.map} +0 -0
- /package/dist/browser/dev/excalidraw-assets-dev/{chunk-ETW42MP7.js.map → chunk-A3JTYPH7.js.map} +0 -0
- /package/dist/browser/dev/excalidraw-assets-dev/{chunk-EGR52Q6D.js.map → chunk-FPTNVFSO.js.map} +0 -0
- /package/dist/browser/dev/excalidraw-assets-dev/{chunk-RT5XHPGC.js.map → chunk-JAMLJD7O.js.map} +0 -0
- /package/dist/browser/dev/excalidraw-assets-dev/{chunk-7V2SB4RU.js.map → chunk-LOACNU4P.js.map} +0 -0
- /package/dist/browser/dev/excalidraw-assets-dev/{chunk-RC7ANJ5H.js.map → chunk-QGBZMLTJ.js.map} +0 -0
- /package/dist/browser/dev/excalidraw-assets-dev/{chunk-BHIY32T7.js.map → chunk-RLV4E4WN.js.map} +0 -0
- /package/dist/browser/dev/excalidraw-assets-dev/{chunk-ASZRDHCI.js.map → chunk-SHPKYTPS.js.map} +0 -0
- /package/dist/browser/dev/excalidraw-assets-dev/{chunk-ADIHRQXG.js.map → chunk-WYUX2CK4.js.map} +0 -0
- /package/dist/browser/dev/excalidraw-assets-dev/{chunk-LSPV6OUU.js.map → chunk-YAYXS7DC.js.map} +0 -0
- /package/dist/browser/dev/excalidraw-assets-dev/{classDiagram-30eddba6-KKFMJDII.js.map → classDiagram-30eddba6-YGYWOEDS.js.map} +0 -0
- /package/dist/browser/dev/excalidraw-assets-dev/{classDiagram-v2-f2df5561-H6OLRXIM.js.map → classDiagram-v2-f2df5561-4ZZOSFAG.js.map} +0 -0
- /package/dist/browser/dev/excalidraw-assets-dev/{directory-open-01563666-JDTB6SPR.js.map → directory-open-01563666-QTUC5QKS.js.map} +0 -0
- /package/dist/browser/dev/excalidraw-assets-dev/{directory-open-4ed118d0-JL7GGNMJ.js.map → directory-open-4ed118d0-EAOFXSXO.js.map} +0 -0
- /package/dist/browser/dev/excalidraw-assets-dev/{dist-QD4SCHJY.js.map → dist-V4ZSY6BC.js.map} +0 -0
- /package/dist/browser/dev/excalidraw-assets-dev/{en-PSBMWL4S.js.map → en-RSUSLGPV.js.map} +0 -0
- /package/dist/browser/dev/excalidraw-assets-dev/{erDiagram-47591fe2-N5L7DKGN.js.map → erDiagram-47591fe2-JIHVWX3W.js.map} +0 -0
- /package/dist/browser/dev/excalidraw-assets-dev/{file-open-002ab408-YDSARWPZ.js.map → file-open-002ab408-UPAWPTEF.js.map} +0 -0
- /package/dist/browser/dev/excalidraw-assets-dev/{file-open-7c801643-EROXTFSX.js.map → file-open-7c801643-N5N32MHQ.js.map} +0 -0
- /package/dist/browser/dev/excalidraw-assets-dev/{file-save-3189631c-TL6V2OEY.js.map → file-save-3189631c-PRH4NPQ5.js.map} +0 -0
- /package/dist/browser/dev/excalidraw-assets-dev/{file-save-745eba88-6WWZFABL.js.map → file-save-745eba88-5GM4HHWQ.js.map} +0 -0
- /package/dist/browser/dev/excalidraw-assets-dev/{flowDiagram-5540d9b9-VRM36QCA.js.map → flowDiagram-5540d9b9-6CLLUMWF.js.map} +0 -0
- /package/dist/browser/dev/excalidraw-assets-dev/{flowDiagram-v2-3b53844e-3CAUSA7W.js.map → flowDiagram-v2-3b53844e-NBMLQH3M.js.map} +0 -0
- /package/dist/browser/dev/excalidraw-assets-dev/{flowchart-elk-definition-5fe447d6-ODK3QXSV.js.map → flowchart-elk-definition-5fe447d6-UEQSCXLT.js.map} +0 -0
- /package/dist/browser/dev/excalidraw-assets-dev/{ganttDiagram-9a3bba1f-KKXGBNQI.js.map → ganttDiagram-9a3bba1f-WK2H7LFS.js.map} +0 -0
- /package/dist/browser/dev/excalidraw-assets-dev/{gitGraphDiagram-96e6b4ee-TMH7E2V3.js.map → gitGraphDiagram-96e6b4ee-KDAA2U2K.js.map} +0 -0
- /package/dist/browser/dev/excalidraw-assets-dev/{image-DTHOT6RB.js.map → image-IPNHMJTL.js.map} +0 -0
- /package/dist/browser/dev/excalidraw-assets-dev/{image-blob-reduce.esm-COPHY4CW.js.map → image-blob-reduce.esm-LQUP674P.js.map} +0 -0
- /package/dist/browser/dev/excalidraw-assets-dev/{infoDiagram-bcd20f53-VF34AT6C.js.map → infoDiagram-bcd20f53-JHVEGFM5.js.map} +0 -0
- /package/dist/browser/dev/excalidraw-assets-dev/{journeyDiagram-4fe6b3dc-I4SJ2IBL.js.map → journeyDiagram-4fe6b3dc-LELHHHNL.js.map} +0 -0
- /package/dist/browser/dev/excalidraw-assets-dev/{katex-SVKNABMQ.js.map → katex-24LMEI2S.js.map} +0 -0
- /package/dist/browser/dev/excalidraw-assets-dev/{mindmap-definition-f354de21-PZW6XTRC.js.map → mindmap-definition-f354de21-EIYHHYCX.js.map} +0 -0
- /package/dist/browser/dev/excalidraw-assets-dev/{pica-KKOK34SZ.js.map → pica-AEP6VYOH.js.map} +0 -0
- /package/dist/browser/dev/excalidraw-assets-dev/{pieDiagram-79897490-JATUFGKC.js.map → pieDiagram-79897490-LKE2EHUL.js.map} +0 -0
- /package/dist/browser/dev/excalidraw-assets-dev/{quadrantDiagram-62f64e94-V5FY6DEM.js.map → quadrantDiagram-62f64e94-HZHJFQUT.js.map} +0 -0
- /package/dist/browser/dev/excalidraw-assets-dev/{requirementDiagram-05bf5f74-ZHT5V47S.js.map → requirementDiagram-05bf5f74-FXXIEN7J.js.map} +0 -0
- /package/dist/browser/dev/excalidraw-assets-dev/{roundRect-ZX3RASBO.js.map → roundRect-5PHKZGUZ.js.map} +0 -0
- /package/dist/browser/dev/excalidraw-assets-dev/{sankeyDiagram-97764748-ELYQDLSC.js.map → sankeyDiagram-97764748-KKTB5UYB.js.map} +0 -0
- /package/dist/browser/dev/excalidraw-assets-dev/{sequenceDiagram-acc0e65c-GEO2ZAH2.js.map → sequenceDiagram-acc0e65c-KPIADG32.js.map} +0 -0
- /package/dist/browser/dev/excalidraw-assets-dev/{stateDiagram-0ff1cf1a-BLHQKXOS.js.map → stateDiagram-0ff1cf1a-IQUWRAPJ.js.map} +0 -0
- /package/dist/browser/dev/excalidraw-assets-dev/{stateDiagram-v2-9a9d610d-XFLTR7I5.js.map → stateDiagram-v2-9a9d610d-3OAKVFDX.js.map} +0 -0
- /package/dist/browser/dev/excalidraw-assets-dev/{timeline-definition-fea2a41d-6DNHPFX5.js.map → timeline-definition-fea2a41d-TRDW4746.js.map} +0 -0
- /package/dist/browser/dev/excalidraw-assets-dev/{xychartDiagram-ab372869-4S5CTHTW.js.map → xychartDiagram-ab372869-IMLIZWMU.js.map} +0 -0
|
@@ -10,13 +10,14 @@ import { ActionManager } from "../actions/manager";
|
|
|
10
10
|
import { actions } from "../actions/register";
|
|
11
11
|
import { trackEvent } from "../analytics";
|
|
12
12
|
import { getDefaultAppState, isEraserActive, isHandToolActive, } from "../appState";
|
|
13
|
-
import { copyTextToSystemClipboard, parseClipboard
|
|
14
|
-
import {
|
|
13
|
+
import { copyTextToSystemClipboard, parseClipboard } from "../clipboard";
|
|
14
|
+
import { DEFAULT_FONT_SIZE } from "../constants";
|
|
15
|
+
import { APP_NAME, CURSOR_TYPE, DEFAULT_MAX_IMAGE_WIDTH_OR_HEIGHT, DEFAULT_VERTICAL_ALIGN, DRAGGING_THRESHOLD, ELEMENT_SHIFT_TRANSLATE_AMOUNT, ELEMENT_TRANSLATE_AMOUNT, ENV, EVENT, FRAME_STYLE, GRID_SIZE, IMAGE_MIME_TYPES, IMAGE_RENDER_TIMEOUT, isBrave, LINE_CONFIRM_THRESHOLD, MAX_ALLOWED_FILE_BYTES, MIME_TYPES, MQ_MAX_HEIGHT_LANDSCAPE, MQ_MAX_WIDTH_LANDSCAPE, MQ_MAX_WIDTH_PORTRAIT, MQ_RIGHT_SIDEBAR_MIN_WIDTH, POINTER_BUTTON, ROUNDNESS, SCROLL_TIMEOUT, TAP_TWICE_TIMEOUT, TEXT_TO_CENTER_SNAP_THRESHOLD, THEME, THEME_FILTER, TOUCH_CTX_MENU_TIMEOUT, VERTICAL_ALIGN, YOUTUBE_STATES, ZOOM_STEP, POINTER_EVENTS, TOOL_TYPE, EDITOR_LS_KEYS, isIOS, supportsResizeObserver, DEFAULT_COLLISION_THRESHOLD, DEFAULT_TEXT_ALIGN, } from "../constants";
|
|
15
16
|
import { exportAsImage, loadFromBlob } from "../data";
|
|
16
17
|
import Library, { distributeLibraryItemsOnSquareGrid } from "../data/library";
|
|
17
18
|
import { restore, restoreElements } from "../data/restore";
|
|
18
|
-
import { dragNewElement, dragSelectedElements, duplicateElement, getCommonBounds, getCursorForResizingElement, getDragOffsetXY, getElementWithTransformHandleType, getNormalizedDimensions, getResizeArrowDirection, getResizeOffsetXY, getLockedLinearCursorAlignSize, getTransformHandleTypeFromCoords, isInvisiblySmallElement, isNonDeletedElement, isTextElement, newElement, newLinearElement, newTextElement, newImageElement, transformElements,
|
|
19
|
-
import { bindOrUnbindLinearElement,
|
|
19
|
+
import { dragNewElement, dragSelectedElements, duplicateElement, getCommonBounds, getCursorForResizingElement, getDragOffsetXY, getElementWithTransformHandleType, getNormalizedDimensions, getResizeArrowDirection, getResizeOffsetXY, getLockedLinearCursorAlignSize, getTransformHandleTypeFromCoords, isInvisiblySmallElement, isNonDeletedElement, isTextElement, newElement, newLinearElement, newTextElement, newImageElement, transformElements, refreshTextDimensions, redrawTextBoundingBox, getElementAbsoluteCoords, } from "../element";
|
|
20
|
+
import { bindOrUnbindLinearElement, bindOrUnbindLinearElements, fixBindingsAfterDeletion, fixBindingsAfterDuplication, getHoveredElementForBinding, isBindingEnabled, isLinearElementSimpleAndAlreadyBound, maybeBindLinearElement, shouldEnableBindingForPointerEvent, updateBoundElements, getSuggestedBindingsForArrows, } from "../element/binding";
|
|
20
21
|
import { LinearElementEditor } from "../element/linearElementEditor";
|
|
21
22
|
import { mutateElement, newElementWith } from "../element/mutateElement";
|
|
22
23
|
import { deepCopyElement, duplicateElements, newFrameElement, newFreeDrawElement, newEmbeddableElement, newMagicFrameElement, newIframeElement, } from "../element/newElement";
|
|
@@ -37,7 +38,7 @@ import { getClosedCurveShape, getCurveShape, getEllipseShape, getFreedrawShape,
|
|
|
37
38
|
import { isPointInShape } from "../../utils/collision";
|
|
38
39
|
import { debounce, distance, getFontString, getNearestScrollableContainer, isInputLike, isToolIcon, isWritableElement, sceneCoordsToViewportCoords, tupleToCoors, viewportCoordsToSceneCoords, wrapEvent, updateObject, updateActiveTool, getShortcutKey, isTransparent, easeToValuesRAF, muteFSAbortError, isTestEnv, easeOut, updateStable, addEventListener, normalizeEOL, getDateTime, isShallowEqual, arrayToMap, } from "../utils";
|
|
39
40
|
import { createSrcDoc, embeddableURLValidator, maybeParseEmbedSrc, getEmbedLink, } from "../element/embeddable";
|
|
40
|
-
import { ContextMenu, CONTEXT_MENU_SEPARATOR
|
|
41
|
+
import { ContextMenu, CONTEXT_MENU_SEPARATOR } from "./ContextMenu";
|
|
41
42
|
import LayerUI from "./LayerUI";
|
|
42
43
|
import { Toast } from "./Toast";
|
|
43
44
|
import { actionToggleViewMode } from "../actions/actionToggleViewMode";
|
|
@@ -45,7 +46,7 @@ import { dataURLToFile, generateIdFromFile, getDataURL, getFileFromEvent, ImageU
|
|
|
45
46
|
import { getInitializedImageElements, loadHTMLImageElement, normalizeSVG, updateImageCache as _updateImageCache, } from "../element/image";
|
|
46
47
|
import throttle from "lodash.throttle";
|
|
47
48
|
import { fileOpen } from "../data/filesystem";
|
|
48
|
-
import { bindTextToShapeAfterDuplication, getApproxMinLineHeight, getApproxMinLineWidth, getBoundTextElement, getContainerCenter, getContainerElement, getDefaultLineHeight, getLineHeightInPx, isMeasureTextSupported, isValidTextContainer, } from "../element/textElement";
|
|
49
|
+
import { bindTextToShapeAfterDuplication, getApproxMinLineHeight, getApproxMinLineWidth, getBoundTextElement, getContainerCenter, getContainerElement, getDefaultLineHeight, getLineHeightInPx, getMinTextElementWidth, isMeasureTextSupported, isValidTextContainer, measureText, wrapText, } from "../element/textElement";
|
|
49
50
|
import { showHyperlinkTooltip, hideHyperlinkToolip, Hyperlink, } from "../components/hyperlink/Hyperlink";
|
|
50
51
|
import { isLocalLink, normalizeLink, toValidURL } from "../data/url";
|
|
51
52
|
import { shouldShowBoundingBox } from "../element/transformHandles";
|
|
@@ -63,7 +64,7 @@ import { getSnapLinesAtPointer, snapDraggedElements, isActiveToolNonLinearSnappa
|
|
|
63
64
|
import { actionWrapTextInContainer } from "../actions/actionBoundText";
|
|
64
65
|
import BraveMeasureTextError from "./BraveMeasureTextError";
|
|
65
66
|
import { activeEyeDropperAtom } from "./EyeDropper";
|
|
66
|
-
import { convertToExcalidrawElements
|
|
67
|
+
import { convertToExcalidrawElements } from "../data/transform";
|
|
67
68
|
import { isSidebarDockedAtom } from "./Sidebar/Sidebar";
|
|
68
69
|
import { StaticCanvas, InteractiveCanvas } from "./canvases";
|
|
69
70
|
import { Renderer } from "../scene/Renderer";
|
|
@@ -91,6 +92,9 @@ import { isOverScrollBars } from "../scene/scrollbars";
|
|
|
91
92
|
import { syncInvalidIndices, syncMovedIndices } from "../fractionalIndex";
|
|
92
93
|
import { isPointHittingLink, isPointHittingLinkIcon, } from "./hyperlink/helpers";
|
|
93
94
|
import { getShortcutFromShortcutName } from "../actions/shortcuts";
|
|
95
|
+
import { actionTextAutoResize } from "../actions/actionTextAutoResize";
|
|
96
|
+
import { getVisibleSceneBounds } from "../element/bounds";
|
|
97
|
+
import { isMaybeMermaidDefinition } from "../mermaid";
|
|
94
98
|
const AppContext = React.createContext(null);
|
|
95
99
|
const AppPropsContext = React.createContext(null);
|
|
96
100
|
const deviceContextInitialValue = {
|
|
@@ -288,10 +292,7 @@ class App extends React.Component {
|
|
|
288
292
|
container: this.excalidrawContainerRef.current,
|
|
289
293
|
id: this.id,
|
|
290
294
|
};
|
|
291
|
-
this.fonts = new Fonts({
|
|
292
|
-
scene: this.scene,
|
|
293
|
-
onSceneUpdated: this.onSceneUpdated,
|
|
294
|
-
});
|
|
295
|
+
this.fonts = new Fonts({ scene: this.scene });
|
|
295
296
|
this.history = new History();
|
|
296
297
|
this.actionManager.registerAll(actions);
|
|
297
298
|
this.actionManager.registerAction(createUndoAction(this.history, this.store));
|
|
@@ -446,7 +447,7 @@ class App extends React.Component {
|
|
|
446
447
|
return false;
|
|
447
448
|
});
|
|
448
449
|
if (updated) {
|
|
449
|
-
this.scene.
|
|
450
|
+
this.scene.triggerUpdate();
|
|
450
451
|
}
|
|
451
452
|
// GC
|
|
452
453
|
this.iFrameRefs.forEach((ref, id) => {
|
|
@@ -805,9 +806,9 @@ class App extends React.Component {
|
|
|
805
806
|
render() {
|
|
806
807
|
const selectedElements = this.scene.getSelectedElements(this.state);
|
|
807
808
|
const { renderTopRightUI, renderCustomStats } = this.props;
|
|
808
|
-
const
|
|
809
|
+
const sceneNonce = this.scene.getSceneNonce();
|
|
809
810
|
const { elementsMap, visibleElements } = this.renderer.getRenderableElements({
|
|
810
|
-
|
|
811
|
+
sceneNonce,
|
|
811
812
|
zoom: this.state.zoom,
|
|
812
813
|
offsetLeft: this.state.offsetLeft,
|
|
813
814
|
offsetTop: this.state.offsetTop,
|
|
@@ -879,14 +880,14 @@ class App extends React.Component {
|
|
|
879
880
|
this.focusContainer();
|
|
880
881
|
callback?.();
|
|
881
882
|
});
|
|
882
|
-
} })), _jsx(StaticCanvas, { canvas: this.canvas, rc: this.rc, elementsMap: elementsMap, allElementsMap: allElementsMap, visibleElements: visibleElements,
|
|
883
|
+
} })), _jsx(StaticCanvas, { canvas: this.canvas, rc: this.rc, elementsMap: elementsMap, allElementsMap: allElementsMap, visibleElements: visibleElements, sceneNonce: sceneNonce, selectionNonce: this.state.selectionElement?.versionNonce, scale: window.devicePixelRatio, appState: this.state, renderConfig: {
|
|
883
884
|
imageCache: this.imageCache,
|
|
884
885
|
isExporting: false,
|
|
885
886
|
renderGrid: true,
|
|
886
887
|
canvasBackgroundColor: this.state.viewBackgroundColor,
|
|
887
888
|
embedsValidationStatus: this.embedsValidationStatus,
|
|
888
889
|
elementsPendingErasure: this.elementsPendingErasure,
|
|
889
|
-
} }), _jsx(InteractiveCanvas, { containerRef: this.excalidrawContainerRef, canvas: this.interactiveCanvas, elementsMap: elementsMap, visibleElements: visibleElements, selectedElements: selectedElements,
|
|
890
|
+
} }), _jsx(InteractiveCanvas, { containerRef: this.excalidrawContainerRef, canvas: this.interactiveCanvas, elementsMap: elementsMap, visibleElements: visibleElements, allElementsMap: allElementsMap, selectedElements: selectedElements, sceneNonce: sceneNonce, selectionNonce: this.state.selectionElement?.versionNonce, scale: window.devicePixelRatio, appState: this.state, device: this.device, renderInteractiveSceneCallback: this.renderInteractiveSceneCallback, handleCanvasRef: this.handleInteractiveCanvasRef, onContextMenu: this.handleCanvasContextMenu, onPointerMove: this.handleCanvasPointerMove, onPointerUp: this.handleCanvasPointerUp, onPointerCancel: this.removePointer, onTouchMove: this.handleTouchMove, onPointerDown: this.handleCanvasPointerDown, onDoubleClick: this.handleCanvasDoubleClick }), this.state.userToFollow && (_jsx(FollowMode, { width: this.state.width, height: this.state.height, userToFollow: this.state.userToFollow, onDisconnect: this.maybeUnfollowRemoteUser })), this.renderFrameNames()] }), this.renderEmbeddables()] }) }) }) }) }) }) }) }));
|
|
890
891
|
}
|
|
891
892
|
focusContainer = () => {
|
|
892
893
|
this.excalidrawContainerRef.current?.focus();
|
|
@@ -944,7 +945,7 @@ class App extends React.Component {
|
|
|
944
945
|
mutateElement(frameElement, { customData: { generationData: data } }, false);
|
|
945
946
|
}
|
|
946
947
|
this.magicGenerations.set(frameElement.id, data);
|
|
947
|
-
this.
|
|
948
|
+
this.triggerRender();
|
|
948
949
|
};
|
|
949
950
|
getTextFromElements(elements) {
|
|
950
951
|
const text = elements
|
|
@@ -1464,7 +1465,7 @@ class App extends React.Component {
|
|
|
1464
1465
|
this.store.onStoreIncrementEmitter.on((increment) => {
|
|
1465
1466
|
this.history.record(increment.elementsChange, increment.appStateChange);
|
|
1466
1467
|
});
|
|
1467
|
-
this.scene.
|
|
1468
|
+
this.scene.onUpdate(this.triggerRender);
|
|
1468
1469
|
this.addEventListeners();
|
|
1469
1470
|
if (this.props.autoFocus && this.excalidrawContainerRef.current) {
|
|
1470
1471
|
this.focusContainer();
|
|
@@ -1502,6 +1503,7 @@ class App extends React.Component {
|
|
|
1502
1503
|
componentWillUnmount() {
|
|
1503
1504
|
this.renderer.destroy();
|
|
1504
1505
|
this.scene = new Scene();
|
|
1506
|
+
this.fonts = new Fonts({ scene: this.scene });
|
|
1505
1507
|
this.renderer = new Renderer(this.scene);
|
|
1506
1508
|
this.files = {};
|
|
1507
1509
|
this.imageCache.clear();
|
|
@@ -1573,7 +1575,7 @@ class App extends React.Component {
|
|
|
1573
1575
|
this.onRemoveEventListenersEmitter.once(addEventListener(document, EVENT.KEYDOWN, this.onKeyDown, false));
|
|
1574
1576
|
}
|
|
1575
1577
|
this.onRemoveEventListenersEmitter.once(addEventListener(this.excalidrawContainerRef.current, EVENT.WHEEL, this.onWheel, { passive: false }), addEventListener(window, EVENT.MESSAGE, this.onWindowMessage, false), addEventListener(document, EVENT.POINTER_UP, this.removePointer), // #3553
|
|
1576
|
-
addEventListener(document, EVENT.COPY, this.onCopy), addEventListener(document, EVENT.KEYUP, this.onKeyUp, { passive: true }), addEventListener(document, EVENT.
|
|
1578
|
+
addEventListener(document, EVENT.COPY, this.onCopy), addEventListener(document, EVENT.KEYUP, this.onKeyUp, { passive: true }), addEventListener(document, EVENT.POINTER_MOVE, this.updateCurrentCursorPosition),
|
|
1577
1579
|
// rerender text elements on font load to fix #637 && #1553
|
|
1578
1580
|
addEventListener(document.fonts, "loadingdone", (event) => {
|
|
1579
1581
|
const loadedFontFaces = event.fontfaces;
|
|
@@ -1582,6 +1584,9 @@ class App extends React.Component {
|
|
|
1582
1584
|
// Safari-only desktop pinch zoom
|
|
1583
1585
|
addEventListener(document, EVENT.GESTURE_START, this.onGestureStart, false), addEventListener(document, EVENT.GESTURE_CHANGE, this.onGestureChange, false), addEventListener(document, EVENT.GESTURE_END, this.onGestureEnd, false), addEventListener(window, EVENT.FOCUS, () => {
|
|
1584
1586
|
this.maybeCleanupAfterMissingPointerUp(null);
|
|
1587
|
+
// browsers (chrome?) tend to free up memory a lot, which results
|
|
1588
|
+
// in canvas context being cleared. Thus re-render on focus.
|
|
1589
|
+
this.triggerRender(true);
|
|
1585
1590
|
}));
|
|
1586
1591
|
if (this.state.viewModeEnabled) {
|
|
1587
1592
|
return;
|
|
@@ -1907,6 +1912,26 @@ class App extends React.Component {
|
|
|
1907
1912
|
});
|
|
1908
1913
|
}
|
|
1909
1914
|
else if (data.text) {
|
|
1915
|
+
if (data.text && isMaybeMermaidDefinition(data.text)) {
|
|
1916
|
+
const api = await import("@excalidraw/mermaid-to-excalidraw");
|
|
1917
|
+
try {
|
|
1918
|
+
const { elements: skeletonElements, files } = await api.parseMermaidToExcalidraw(data.text, {
|
|
1919
|
+
fontSize: DEFAULT_FONT_SIZE,
|
|
1920
|
+
});
|
|
1921
|
+
const elements = convertToExcalidrawElements(skeletonElements, {
|
|
1922
|
+
regenerateIds: true,
|
|
1923
|
+
});
|
|
1924
|
+
this.addElementsFromPasteOrLibrary({
|
|
1925
|
+
elements,
|
|
1926
|
+
files,
|
|
1927
|
+
position: "cursor",
|
|
1928
|
+
});
|
|
1929
|
+
return;
|
|
1930
|
+
}
|
|
1931
|
+
catch (err) {
|
|
1932
|
+
console.warn(`parsing pasted text as mermaid definition failed: ${err.message}`);
|
|
1933
|
+
}
|
|
1934
|
+
}
|
|
1910
1935
|
const nonEmptyLines = normalizeEOL(data.text)
|
|
1911
1936
|
.split(/\n+/)
|
|
1912
1937
|
.map((s) => s.trim())
|
|
@@ -2111,27 +2136,46 @@ class App extends React.Component {
|
|
|
2111
2136
|
text,
|
|
2112
2137
|
fontSize: this.state.currentItemFontSize,
|
|
2113
2138
|
fontFamily: this.state.currentItemFontFamily,
|
|
2114
|
-
textAlign:
|
|
2139
|
+
textAlign: DEFAULT_TEXT_ALIGN,
|
|
2115
2140
|
verticalAlign: DEFAULT_VERTICAL_ALIGN,
|
|
2116
2141
|
locked: false,
|
|
2117
2142
|
};
|
|
2143
|
+
const fontString = getFontString({
|
|
2144
|
+
fontSize: textElementProps.fontSize,
|
|
2145
|
+
fontFamily: textElementProps.fontFamily,
|
|
2146
|
+
});
|
|
2147
|
+
const lineHeight = getDefaultLineHeight(textElementProps.fontFamily);
|
|
2148
|
+
const [x1, , x2] = getVisibleSceneBounds(this.state);
|
|
2149
|
+
// long texts should not go beyond 800 pixels in width nor should it go below 200 px
|
|
2150
|
+
const maxTextWidth = Math.max(Math.min((x2 - x1) * 0.5, 800), 200);
|
|
2118
2151
|
const LINE_GAP = 10;
|
|
2119
2152
|
let currentY = y;
|
|
2120
2153
|
const lines = isPlainPaste ? [text] : text.split("\n");
|
|
2121
2154
|
const textElements = lines.reduce((acc, line, idx) => {
|
|
2122
|
-
const
|
|
2123
|
-
|
|
2124
|
-
if (text.length) {
|
|
2155
|
+
const originalText = line.trim();
|
|
2156
|
+
if (originalText.length) {
|
|
2125
2157
|
const topLayerFrame = this.getTopLayerFrameAtSceneCoords({
|
|
2126
2158
|
x,
|
|
2127
2159
|
y: currentY,
|
|
2128
2160
|
});
|
|
2161
|
+
let metrics = measureText(originalText, fontString, lineHeight);
|
|
2162
|
+
const isTextWrapped = metrics.width > maxTextWidth;
|
|
2163
|
+
const text = isTextWrapped
|
|
2164
|
+
? wrapText(originalText, fontString, maxTextWidth)
|
|
2165
|
+
: originalText;
|
|
2166
|
+
metrics = isTextWrapped
|
|
2167
|
+
? measureText(text, fontString, lineHeight)
|
|
2168
|
+
: metrics;
|
|
2169
|
+
const startX = x - metrics.width / 2;
|
|
2170
|
+
const startY = currentY - metrics.height / 2;
|
|
2129
2171
|
const element = newTextElement({
|
|
2130
2172
|
...textElementProps,
|
|
2131
|
-
x,
|
|
2132
|
-
y:
|
|
2173
|
+
x: startX,
|
|
2174
|
+
y: startY,
|
|
2133
2175
|
text,
|
|
2176
|
+
originalText,
|
|
2134
2177
|
lineHeight,
|
|
2178
|
+
autoResize: !isTextWrapped,
|
|
2135
2179
|
frameId: topLayerFrame ? topLayerFrame.id : null,
|
|
2136
2180
|
});
|
|
2137
2181
|
acc.push(element);
|
|
@@ -2350,7 +2394,7 @@ class App extends React.Component {
|
|
|
2350
2394
|
ShapeCache.delete(element);
|
|
2351
2395
|
}
|
|
2352
2396
|
});
|
|
2353
|
-
this.scene.
|
|
2397
|
+
this.scene.triggerUpdate();
|
|
2354
2398
|
this.addNewImagesToImageCache();
|
|
2355
2399
|
});
|
|
2356
2400
|
updateScene = withBatchedUpdates((sceneData) => {
|
|
@@ -2384,8 +2428,15 @@ class App extends React.Component {
|
|
|
2384
2428
|
this.setState({ collaborators: sceneData.collaborators });
|
|
2385
2429
|
}
|
|
2386
2430
|
});
|
|
2387
|
-
|
|
2388
|
-
|
|
2431
|
+
triggerRender = (
|
|
2432
|
+
/** force always re-renders canvas even if no change */
|
|
2433
|
+
force) => {
|
|
2434
|
+
if (force === true) {
|
|
2435
|
+
this.scene.triggerUpdate();
|
|
2436
|
+
}
|
|
2437
|
+
else {
|
|
2438
|
+
this.setState({});
|
|
2439
|
+
}
|
|
2389
2440
|
};
|
|
2390
2441
|
/**
|
|
2391
2442
|
* @returns whether the menu was toggled on or off
|
|
@@ -2552,7 +2603,9 @@ class App extends React.Component {
|
|
|
2552
2603
|
simultaneouslyUpdated: selectedElements,
|
|
2553
2604
|
});
|
|
2554
2605
|
});
|
|
2555
|
-
this.
|
|
2606
|
+
this.setState({
|
|
2607
|
+
suggestedBindings: getSuggestedBindingsForArrows(selectedElements, this),
|
|
2608
|
+
});
|
|
2556
2609
|
event.preventDefault();
|
|
2557
2610
|
}
|
|
2558
2611
|
else if (event.key === KEYS.ENTER) {
|
|
@@ -2690,11 +2743,7 @@ class App extends React.Component {
|
|
|
2690
2743
|
this.setState({ isBindingEnabled: true });
|
|
2691
2744
|
}
|
|
2692
2745
|
if (isArrowKey(event.key)) {
|
|
2693
|
-
|
|
2694
|
-
const elementsMap = this.scene.getNonDeletedElementsMap();
|
|
2695
|
-
isBindingEnabled(this.state)
|
|
2696
|
-
? bindOrUnbindSelectedElements(selectedElements, this)
|
|
2697
|
-
: unbindLinearElements(selectedElements, elementsMap);
|
|
2746
|
+
bindOrUnbindLinearElements(this.scene.getSelectedElements(this.state).filter(isLinearElement), this, isBindingEnabled(this.state), this.state.selectedLinearElement?.selectedPointsIndices ?? []);
|
|
2698
2747
|
this.setState({ suggestedBindings: [] });
|
|
2699
2748
|
}
|
|
2700
2749
|
});
|
|
@@ -2726,6 +2775,9 @@ class App extends React.Component {
|
|
|
2726
2775
|
originSnapOffset: null,
|
|
2727
2776
|
activeEmbeddable: null,
|
|
2728
2777
|
};
|
|
2778
|
+
if (nextActiveTool.type === "freedraw") {
|
|
2779
|
+
this.store.shouldCaptureIncrement();
|
|
2780
|
+
}
|
|
2729
2781
|
let nextState;
|
|
2730
2782
|
if (nextActiveTool.type !== "selection") {
|
|
2731
2783
|
nextState = {
|
|
@@ -2842,15 +2894,16 @@ class App extends React.Component {
|
|
|
2842
2894
|
});
|
|
2843
2895
|
handleTextWysiwyg(element, { isExistingElement = false, }) {
|
|
2844
2896
|
const elementsMap = this.scene.getElementsMapIncludingDeleted();
|
|
2845
|
-
const updateElement = (
|
|
2897
|
+
const updateElement = (nextOriginalText, isDeleted) => {
|
|
2846
2898
|
this.scene.replaceAllElements([
|
|
2847
2899
|
// Not sure why we include deleted elements as well hence using deleted elements map
|
|
2848
2900
|
...this.scene.getElementsIncludingDeleted().map((_element) => {
|
|
2849
2901
|
if (_element.id === element.id && isTextElement(_element)) {
|
|
2850
|
-
return
|
|
2851
|
-
|
|
2852
|
-
isDeleted,
|
|
2853
|
-
|
|
2902
|
+
return newElementWith(_element, {
|
|
2903
|
+
originalText: nextOriginalText,
|
|
2904
|
+
isDeleted: isDeleted ?? _element.isDeleted,
|
|
2905
|
+
// returns (wrapped) text and new dimensions
|
|
2906
|
+
...refreshTextDimensions(_element, getContainerElement(_element, elementsMap), elementsMap, nextOriginalText),
|
|
2854
2907
|
});
|
|
2855
2908
|
}
|
|
2856
2909
|
return _element;
|
|
@@ -2870,15 +2923,15 @@ class App extends React.Component {
|
|
|
2870
2923
|
viewportY - this.state.offsetTop,
|
|
2871
2924
|
];
|
|
2872
2925
|
},
|
|
2873
|
-
onChange: withBatchedUpdates((
|
|
2874
|
-
updateElement(
|
|
2926
|
+
onChange: withBatchedUpdates((nextOriginalText) => {
|
|
2927
|
+
updateElement(nextOriginalText, false);
|
|
2875
2928
|
if (isNonDeletedElement(element)) {
|
|
2876
2929
|
updateBoundElements(element, elementsMap);
|
|
2877
2930
|
}
|
|
2878
2931
|
}),
|
|
2879
|
-
onSubmit: withBatchedUpdates(({
|
|
2880
|
-
const isDeleted = !
|
|
2881
|
-
updateElement(
|
|
2932
|
+
onSubmit: withBatchedUpdates(({ viaKeyboard, nextOriginalText }) => {
|
|
2933
|
+
const isDeleted = !nextOriginalText.trim();
|
|
2934
|
+
updateElement(nextOriginalText, isDeleted);
|
|
2882
2935
|
// select the created text element only if submitting via keyboard
|
|
2883
2936
|
// (when submitting via click it should act as signal to deselect)
|
|
2884
2937
|
if (!isDeleted && viaKeyboard) {
|
|
@@ -2912,12 +2965,17 @@ class App extends React.Component {
|
|
|
2912
2965
|
element,
|
|
2913
2966
|
excalidrawContainer: this.excalidrawContainerRef.current,
|
|
2914
2967
|
app: this,
|
|
2968
|
+
// when text is selected, it's hard (at least on iOS) to re-position the
|
|
2969
|
+
// caret (i.e. deselect). There's not much use for always selecting
|
|
2970
|
+
// the text on edit anyway (and users can select-all from contextmenu
|
|
2971
|
+
// if needed)
|
|
2972
|
+
autoSelect: !this.device.isTouchScreen,
|
|
2915
2973
|
});
|
|
2916
2974
|
// deselect all other elements when inserting text
|
|
2917
2975
|
this.deselectElements();
|
|
2918
2976
|
// do an initial update to re-initialize element position since we were
|
|
2919
2977
|
// modifying element's x/y for sake of editor (case: syncing to remote)
|
|
2920
|
-
updateElement(element.
|
|
2978
|
+
updateElement(element.originalText, false);
|
|
2921
2979
|
}
|
|
2922
2980
|
deselectElements() {
|
|
2923
2981
|
this.setState({
|
|
@@ -3007,7 +3065,7 @@ class App extends React.Component {
|
|
|
3007
3065
|
shape: this.getElementShape(elementWithHighestZIndex),
|
|
3008
3066
|
// when overlapping, we would like to be more precise
|
|
3009
3067
|
// this also avoids the need to update past tests
|
|
3010
|
-
threshold: this.
|
|
3068
|
+
threshold: this.getElementHitThreshold() / 2,
|
|
3011
3069
|
frameNameBound: isFrameLikeElement(elementWithHighestZIndex)
|
|
3012
3070
|
? this.frameNameBoundsCache.get(elementWithHighestZIndex)
|
|
3013
3071
|
: null,
|
|
@@ -3054,15 +3112,15 @@ class App extends React.Component {
|
|
|
3054
3112
|
.concat(iframeLikes);
|
|
3055
3113
|
return elements;
|
|
3056
3114
|
}
|
|
3057
|
-
|
|
3058
|
-
return
|
|
3115
|
+
getElementHitThreshold() {
|
|
3116
|
+
return DEFAULT_COLLISION_THRESHOLD / this.state.zoom.value;
|
|
3059
3117
|
}
|
|
3060
3118
|
hitElement(x, y, element, considerBoundingBox = true) {
|
|
3061
3119
|
// if the element is selected, then hit test is done against its bounding box
|
|
3062
3120
|
if (considerBoundingBox &&
|
|
3063
3121
|
this.state.selectedElementIds[element.id] &&
|
|
3064
3122
|
shouldShowBoundingBox([element], this.state)) {
|
|
3065
|
-
const selectionShape = getSelectionBoxShape(element, this.scene.getNonDeletedElementsMap(), this.
|
|
3123
|
+
const selectionShape = getSelectionBoxShape(element, this.scene.getNonDeletedElementsMap(), this.getElementHitThreshold());
|
|
3066
3124
|
return isPointInShape([x, y], selectionShape);
|
|
3067
3125
|
}
|
|
3068
3126
|
// take bound text element into consideration for hit collision as well
|
|
@@ -3075,7 +3133,7 @@ class App extends React.Component {
|
|
|
3075
3133
|
y,
|
|
3076
3134
|
element,
|
|
3077
3135
|
shape: this.getElementShape(element),
|
|
3078
|
-
threshold: this.
|
|
3136
|
+
threshold: this.getElementHitThreshold(),
|
|
3079
3137
|
frameNameBound: isFrameLikeElement(element)
|
|
3080
3138
|
? this.frameNameBoundsCache.get(element)
|
|
3081
3139
|
: null,
|
|
@@ -3102,7 +3160,7 @@ class App extends React.Component {
|
|
|
3102
3160
|
y,
|
|
3103
3161
|
element: elements[index],
|
|
3104
3162
|
shape: this.getElementShape(elements[index]),
|
|
3105
|
-
threshold: this.
|
|
3163
|
+
threshold: this.getElementHitThreshold(),
|
|
3106
3164
|
})) {
|
|
3107
3165
|
hitElement = elements[index];
|
|
3108
3166
|
break;
|
|
@@ -3114,7 +3172,7 @@ class App extends React.Component {
|
|
|
3114
3172
|
}
|
|
3115
3173
|
return isTextBindableContainer(hitElement, false) ? hitElement : null;
|
|
3116
3174
|
}
|
|
3117
|
-
startTextEditing = ({ sceneX, sceneY, insertAtParentCenter = true, container, }) => {
|
|
3175
|
+
startTextEditing = ({ sceneX, sceneY, insertAtParentCenter = true, container, autoEdit = true, }) => {
|
|
3118
3176
|
let shouldBindToContainer = false;
|
|
3119
3177
|
let parentCenterPosition = insertAtParentCenter &&
|
|
3120
3178
|
this.getTextWysiwygSnappedToCenterPosition(sceneX, sceneY, this.state, container);
|
|
@@ -3215,12 +3273,17 @@ class App extends React.Component {
|
|
|
3215
3273
|
this.scene.insertElement(element);
|
|
3216
3274
|
}
|
|
3217
3275
|
}
|
|
3218
|
-
|
|
3219
|
-
|
|
3220
|
-
|
|
3221
|
-
|
|
3222
|
-
|
|
3223
|
-
|
|
3276
|
+
if (autoEdit || existingTextElement || container) {
|
|
3277
|
+
this.handleTextWysiwyg(element, {
|
|
3278
|
+
isExistingElement: !!existingTextElement,
|
|
3279
|
+
});
|
|
3280
|
+
}
|
|
3281
|
+
else {
|
|
3282
|
+
this.setState({
|
|
3283
|
+
draggingElement: element,
|
|
3284
|
+
multiElement: null,
|
|
3285
|
+
});
|
|
3286
|
+
}
|
|
3224
3287
|
};
|
|
3225
3288
|
handleCanvasDoubleClick = (event) => {
|
|
3226
3289
|
// case: double-clicking with arrow/line tool selected would both create
|
|
@@ -3281,7 +3344,7 @@ class App extends React.Component {
|
|
|
3281
3344
|
y: sceneY,
|
|
3282
3345
|
element: container,
|
|
3283
3346
|
shape: this.getElementShape(container),
|
|
3284
|
-
threshold: this.
|
|
3347
|
+
threshold: this.getElementHitThreshold(),
|
|
3285
3348
|
})) {
|
|
3286
3349
|
const midPoint = getContainerCenter(container, this.state, this.scene.getNonDeletedElementsMap());
|
|
3287
3350
|
sceneX = midPoint.x;
|
|
@@ -3390,8 +3453,11 @@ class App extends React.Component {
|
|
|
3390
3453
|
}, state);
|
|
3391
3454
|
this.translateCanvas({
|
|
3392
3455
|
zoom: zoomState.zoom,
|
|
3393
|
-
|
|
3394
|
-
|
|
3456
|
+
// 2x multiplier is just a magic number that makes this work correctly
|
|
3457
|
+
// on touchscreen devices (note: if we get report that panning is slower/faster
|
|
3458
|
+
// than actual movement, consider swapping with devicePixelRatio)
|
|
3459
|
+
scrollX: zoomState.scrollX + 2 * (deltaX / nextZoom),
|
|
3460
|
+
scrollY: zoomState.scrollY + 2 * (deltaY / nextZoom),
|
|
3395
3461
|
shouldCacheIgnoreZoom: true,
|
|
3396
3462
|
});
|
|
3397
3463
|
});
|
|
@@ -3556,15 +3622,23 @@ class App extends React.Component {
|
|
|
3556
3622
|
if (selectedElements.length === 1 &&
|
|
3557
3623
|
!isOverScrollBar &&
|
|
3558
3624
|
!this.state.editingLinearElement) {
|
|
3559
|
-
|
|
3560
|
-
|
|
3561
|
-
|
|
3562
|
-
|
|
3563
|
-
|
|
3625
|
+
// for linear elements, we'd like to prioritize point dragging over edge resizing
|
|
3626
|
+
// therefore, we update and check hovered point index first
|
|
3627
|
+
if (this.state.selectedLinearElement) {
|
|
3628
|
+
this.handleHoverSelectedLinearElement(this.state.selectedLinearElement, scenePointerX, scenePointerY);
|
|
3629
|
+
}
|
|
3630
|
+
if (!this.state.selectedLinearElement ||
|
|
3631
|
+
this.state.selectedLinearElement.hoverPointIndex === -1) {
|
|
3632
|
+
const elementWithTransformHandleType = getElementWithTransformHandleType(elements, this.state, scenePointerX, scenePointerY, this.state.zoom, event.pointerType, this.scene.getNonDeletedElementsMap(), this.device);
|
|
3633
|
+
if (elementWithTransformHandleType &&
|
|
3634
|
+
elementWithTransformHandleType.transformHandleType) {
|
|
3635
|
+
setCursor(this.interactiveCanvas, getCursorForResizingElement(elementWithTransformHandleType));
|
|
3636
|
+
return;
|
|
3637
|
+
}
|
|
3564
3638
|
}
|
|
3565
3639
|
}
|
|
3566
3640
|
else if (selectedElements.length > 1 && !isOverScrollBar) {
|
|
3567
|
-
const transformHandleType = getTransformHandleTypeFromCoords(getCommonBounds(selectedElements), scenePointerX, scenePointerY, this.state.zoom, event.pointerType);
|
|
3641
|
+
const transformHandleType = getTransformHandleTypeFromCoords(getCommonBounds(selectedElements), scenePointerX, scenePointerY, this.state.zoom, event.pointerType, this.device);
|
|
3568
3642
|
if (transformHandleType) {
|
|
3569
3643
|
setCursor(this.interactiveCanvas, getCursorForResizingElement({
|
|
3570
3644
|
transformHandleType,
|
|
@@ -3668,7 +3742,7 @@ class App extends React.Component {
|
|
|
3668
3742
|
}
|
|
3669
3743
|
};
|
|
3670
3744
|
const distance = distance2d(pointerDownState.lastCoords.x, pointerDownState.lastCoords.y, scenePointer.x, scenePointer.y);
|
|
3671
|
-
const threshold = this.
|
|
3745
|
+
const threshold = this.getElementHitThreshold();
|
|
3672
3746
|
const point = { ...pointerDownState.lastCoords };
|
|
3673
3747
|
let samplingInterval = 0;
|
|
3674
3748
|
while (samplingInterval <= distance) {
|
|
@@ -3704,7 +3778,7 @@ class App extends React.Component {
|
|
|
3704
3778
|
}
|
|
3705
3779
|
}
|
|
3706
3780
|
this.elementsPendingErasure = new Set(this.elementsPendingErasure);
|
|
3707
|
-
this.
|
|
3781
|
+
this.triggerRender();
|
|
3708
3782
|
}
|
|
3709
3783
|
};
|
|
3710
3784
|
// set touch moving for mobile context menu
|
|
@@ -3732,7 +3806,7 @@ class App extends React.Component {
|
|
|
3732
3806
|
if (hoverPointIndex >= 0 || segmentMidPointHoveredCoords) {
|
|
3733
3807
|
setCursor(this.interactiveCanvas, CURSOR_TYPE.POINTER);
|
|
3734
3808
|
}
|
|
3735
|
-
else {
|
|
3809
|
+
else if (this.hitElement(scenePointerX, scenePointerY, element)) {
|
|
3736
3810
|
setCursor(this.interactiveCanvas, CURSOR_TYPE.MOVE);
|
|
3737
3811
|
}
|
|
3738
3812
|
}
|
|
@@ -3918,7 +3992,6 @@ class App extends React.Component {
|
|
|
3918
3992
|
}
|
|
3919
3993
|
if (this.state.activeTool.type === "text") {
|
|
3920
3994
|
this.handleTextOnPointerDown(event, pointerDownState);
|
|
3921
|
-
return;
|
|
3922
3995
|
}
|
|
3923
3996
|
else if (this.state.activeTool.type === "arrow" ||
|
|
3924
3997
|
this.state.activeTool.type === "line") {
|
|
@@ -4246,8 +4319,11 @@ class App extends React.Component {
|
|
|
4246
4319
|
const elements = this.scene.getNonDeletedElements();
|
|
4247
4320
|
const elementsMap = this.scene.getNonDeletedElementsMap();
|
|
4248
4321
|
const selectedElements = this.scene.getSelectedElements(this.state);
|
|
4249
|
-
if (selectedElements.length === 1 &&
|
|
4250
|
-
|
|
4322
|
+
if (selectedElements.length === 1 &&
|
|
4323
|
+
!this.state.editingLinearElement &&
|
|
4324
|
+
!(this.state.selectedLinearElement &&
|
|
4325
|
+
this.state.selectedLinearElement.hoverPointIndex !== -1)) {
|
|
4326
|
+
const elementWithTransformHandleType = getElementWithTransformHandleType(elements, this.state, pointerDownState.origin.x, pointerDownState.origin.y, this.state.zoom, event.pointerType, this.scene.getNonDeletedElementsMap(), this.device);
|
|
4251
4327
|
if (elementWithTransformHandleType != null) {
|
|
4252
4328
|
this.setState({
|
|
4253
4329
|
resizingElement: elementWithTransformHandleType.element,
|
|
@@ -4257,7 +4333,7 @@ class App extends React.Component {
|
|
|
4257
4333
|
}
|
|
4258
4334
|
}
|
|
4259
4335
|
else if (selectedElements.length > 1) {
|
|
4260
|
-
pointerDownState.resize.handleType = getTransformHandleTypeFromCoords(getCommonBounds(selectedElements), pointerDownState.origin.x, pointerDownState.origin.y, this.state.zoom, event.pointerType);
|
|
4336
|
+
pointerDownState.resize.handleType = getTransformHandleTypeFromCoords(getCommonBounds(selectedElements), pointerDownState.origin.x, pointerDownState.origin.y, this.state.zoom, event.pointerType, this.device);
|
|
4261
4337
|
}
|
|
4262
4338
|
if (pointerDownState.resize.handleType) {
|
|
4263
4339
|
pointerDownState.resize.isResizing = true;
|
|
@@ -4432,7 +4508,7 @@ class App extends React.Component {
|
|
|
4432
4508
|
return false;
|
|
4433
4509
|
}
|
|
4434
4510
|
// How many pixels off the shape boundary we still consider a hit
|
|
4435
|
-
const threshold = this.
|
|
4511
|
+
const threshold = this.getElementHitThreshold();
|
|
4436
4512
|
const [x1, y1, x2, y2] = getCommonBounds(selectedElements);
|
|
4437
4513
|
return (point.x > x1 - threshold &&
|
|
4438
4514
|
point.x < x2 + threshold &&
|
|
@@ -4463,6 +4539,7 @@ class App extends React.Component {
|
|
|
4463
4539
|
sceneY,
|
|
4464
4540
|
insertAtParentCenter: !event.altKey,
|
|
4465
4541
|
container,
|
|
4542
|
+
autoEdit: false,
|
|
4466
4543
|
});
|
|
4467
4544
|
resetCursor(this.interactiveCanvas);
|
|
4468
4545
|
if (!this.state.activeTool.locked) {
|
|
@@ -4979,7 +5056,9 @@ class App extends React.Component {
|
|
|
4979
5056
|
// able to select and interact with the text input
|
|
4980
5057
|
!this.state.editingFrame &&
|
|
4981
5058
|
dragSelectedElements(pointerDownState, selectedElements, dragOffset, this.state, this.scene, snapOffset, event[KEYS.CTRL_OR_CMD] ? null : this.state.gridSize);
|
|
4982
|
-
this.
|
|
5059
|
+
this.setState({
|
|
5060
|
+
suggestedBindings: getSuggestedBindingsForArrows(selectedElements, this),
|
|
5061
|
+
});
|
|
4983
5062
|
// We duplicate the selected element if alt is pressed on pointer move
|
|
4984
5063
|
if (event.altKey && !pointerDownState.hit.hasBeenDuplicated) {
|
|
4985
5064
|
// Move the currently selected elements to the top of the z index stack, and
|
|
@@ -5352,6 +5431,21 @@ class App extends React.Component {
|
|
|
5352
5431
|
}
|
|
5353
5432
|
return;
|
|
5354
5433
|
}
|
|
5434
|
+
if (isTextElement(draggingElement)) {
|
|
5435
|
+
const minWidth = getMinTextElementWidth(getFontString({
|
|
5436
|
+
fontSize: draggingElement.fontSize,
|
|
5437
|
+
fontFamily: draggingElement.fontFamily,
|
|
5438
|
+
}), draggingElement.lineHeight);
|
|
5439
|
+
if (draggingElement.width < minWidth) {
|
|
5440
|
+
mutateElement(draggingElement, {
|
|
5441
|
+
autoResize: true,
|
|
5442
|
+
});
|
|
5443
|
+
}
|
|
5444
|
+
this.resetCursor();
|
|
5445
|
+
this.handleTextWysiwyg(draggingElement, {
|
|
5446
|
+
isExistingElement: true,
|
|
5447
|
+
});
|
|
5448
|
+
}
|
|
5355
5449
|
if (activeTool.type !== "selection" &&
|
|
5356
5450
|
draggingElement &&
|
|
5357
5451
|
isInvisiblySmallElement(draggingElement)) {
|
|
@@ -5387,7 +5481,7 @@ class App extends React.Component {
|
|
|
5387
5481
|
groupIds: [],
|
|
5388
5482
|
});
|
|
5389
5483
|
removeElementsFromFrame([linearElement], this.scene.getNonDeletedElementsMap());
|
|
5390
|
-
this.scene.
|
|
5484
|
+
this.scene.triggerUpdate();
|
|
5391
5485
|
}
|
|
5392
5486
|
}
|
|
5393
5487
|
}
|
|
@@ -5621,7 +5715,7 @@ class App extends React.Component {
|
|
|
5621
5715
|
y: pointerDownState.origin.y,
|
|
5622
5716
|
element: hitElement,
|
|
5623
5717
|
shape: this.getElementShape(hitElement),
|
|
5624
|
-
threshold: this.
|
|
5718
|
+
threshold: this.getElementHitThreshold(),
|
|
5625
5719
|
frameNameBound: isFrameLikeElement(hitElement)
|
|
5626
5720
|
? this.frameNameBoundsCache.get(hitElement)
|
|
5627
5721
|
: null,
|
|
@@ -5664,9 +5758,12 @@ class App extends React.Component {
|
|
|
5664
5758
|
this.store.shouldCaptureIncrement();
|
|
5665
5759
|
}
|
|
5666
5760
|
if (pointerDownState.drag.hasOccurred || isResizing || isRotating) {
|
|
5667
|
-
|
|
5668
|
-
|
|
5669
|
-
|
|
5761
|
+
// We only allow binding via linear elements, specifically via dragging
|
|
5762
|
+
// the endpoints ("start" or "end").
|
|
5763
|
+
const linearElements = this.scene
|
|
5764
|
+
.getSelectedElements(this.state)
|
|
5765
|
+
.filter(isLinearElement);
|
|
5766
|
+
bindOrUnbindLinearElements(linearElements, this, isBindingEnabled(this.state), this.state.selectedLinearElement?.selectedPointsIndices ?? []);
|
|
5670
5767
|
}
|
|
5671
5768
|
if (activeTool.type === "laser") {
|
|
5672
5769
|
this.laserTrails.endPath();
|
|
@@ -5701,7 +5798,7 @@ class App extends React.Component {
|
|
|
5701
5798
|
}
|
|
5702
5799
|
restoreReadyToEraseElements = () => {
|
|
5703
5800
|
this.elementsPendingErasure = new Set();
|
|
5704
|
-
this.
|
|
5801
|
+
this.triggerRender();
|
|
5705
5802
|
};
|
|
5706
5803
|
eraseElements = () => {
|
|
5707
5804
|
let didChange = false;
|
|
@@ -5993,7 +6090,7 @@ class App extends React.Component {
|
|
|
5993
6090
|
if (uncachedImageElements.length) {
|
|
5994
6091
|
const { updatedFiles } = await this.updateImageCache(uncachedImageElements, files);
|
|
5995
6092
|
if (updatedFiles.size) {
|
|
5996
|
-
this.scene.
|
|
6093
|
+
this.scene.triggerUpdate();
|
|
5997
6094
|
}
|
|
5998
6095
|
}
|
|
5999
6096
|
};
|
|
@@ -6033,13 +6130,6 @@ class App extends React.Component {
|
|
|
6033
6130
|
}, []);
|
|
6034
6131
|
this.setState({ suggestedBindings });
|
|
6035
6132
|
};
|
|
6036
|
-
maybeSuggestBindingForAll(selectedElements) {
|
|
6037
|
-
if (selectedElements.length > 50) {
|
|
6038
|
-
return;
|
|
6039
|
-
}
|
|
6040
|
-
const suggestedBindings = getEligibleElementsForBinding(selectedElements, this);
|
|
6041
|
-
this.setState({ suggestedBindings });
|
|
6042
|
-
}
|
|
6043
6133
|
clearSelection(hitElement) {
|
|
6044
6134
|
this.setState((prevState) => ({
|
|
6045
6135
|
selectedElementIds: makeNextSelectedElementIds({}, prevState),
|
|
@@ -6282,7 +6372,7 @@ class App extends React.Component {
|
|
|
6282
6372
|
}
|
|
6283
6373
|
if (draggingElement.type === "selection" &&
|
|
6284
6374
|
this.state.activeTool.type !== "eraser") {
|
|
6285
|
-
dragNewElement(draggingElement, this.state.activeTool.type, pointerDownState.origin.x, pointerDownState.origin.y, pointerCoords.x, pointerCoords.y, distance(pointerDownState.origin.x, pointerCoords.x), distance(pointerDownState.origin.y, pointerCoords.y), shouldMaintainAspectRatio(event), shouldResizeFromCenter(event));
|
|
6375
|
+
dragNewElement(draggingElement, this.state.activeTool.type, pointerDownState.origin.x, pointerDownState.origin.y, pointerCoords.x, pointerCoords.y, distance(pointerDownState.origin.x, pointerCoords.x), distance(pointerDownState.origin.y, pointerCoords.y), shouldMaintainAspectRatio(event), shouldResizeFromCenter(event), this.state.zoom.value);
|
|
6286
6376
|
}
|
|
6287
6377
|
else {
|
|
6288
6378
|
let [gridX, gridY] = getGridPoint(pointerCoords.x, pointerCoords.y, event[KEYS.CTRL_OR_CMD] ? null : this.state.gridSize);
|
|
@@ -6308,8 +6398,7 @@ class App extends React.Component {
|
|
|
6308
6398
|
});
|
|
6309
6399
|
dragNewElement(draggingElement, this.state.activeTool.type, pointerDownState.originInGrid.x, pointerDownState.originInGrid.y, gridX, gridY, distance(pointerDownState.originInGrid.x, gridX), distance(pointerDownState.originInGrid.y, gridY), isImageElement(draggingElement)
|
|
6310
6400
|
? !shouldMaintainAspectRatio(event)
|
|
6311
|
-
: shouldMaintainAspectRatio(event), shouldResizeFromCenter(event), aspectRatio, this.state.originSnapOffset);
|
|
6312
|
-
this.maybeSuggestBindingForAll([draggingElement]);
|
|
6401
|
+
: shouldMaintainAspectRatio(event), shouldResizeFromCenter(event), this.state.zoom.value, aspectRatio, this.state.originSnapOffset);
|
|
6313
6402
|
// highlight elements that are to be added to frames on frames creation
|
|
6314
6403
|
if (this.state.activeTool.type === TOOL_TYPE.frame ||
|
|
6315
6404
|
this.state.activeTool.type === TOOL_TYPE.magicframe) {
|
|
@@ -6363,16 +6452,17 @@ class App extends React.Component {
|
|
|
6363
6452
|
snapLines,
|
|
6364
6453
|
});
|
|
6365
6454
|
}
|
|
6366
|
-
if (transformElements(pointerDownState.originalElements, transformHandleType, selectedElements, this.scene.getElementsMapIncludingDeleted(), shouldRotateWithDiscreteAngle(event), shouldResizeFromCenter(event), selectedElements.
|
|
6455
|
+
if (transformElements(pointerDownState.originalElements, transformHandleType, selectedElements, this.scene.getElementsMapIncludingDeleted(), shouldRotateWithDiscreteAngle(event), shouldResizeFromCenter(event), selectedElements.some((element) => isImageElement(element))
|
|
6367
6456
|
? !shouldMaintainAspectRatio(event)
|
|
6368
6457
|
: shouldMaintainAspectRatio(event), resizeX, resizeY, pointerDownState.resize.center.x, pointerDownState.resize.center.y)) {
|
|
6369
|
-
|
|
6458
|
+
const suggestedBindings = getSuggestedBindingsForArrows(selectedElements, this);
|
|
6370
6459
|
const elementsToHighlight = new Set();
|
|
6371
6460
|
selectedFrames.forEach((frame) => {
|
|
6372
6461
|
getElementsInResizingFrame(this.scene.getNonDeletedElements(), frame, this.state, this.scene.getNonDeletedElementsMap()).forEach((element) => elementsToHighlight.add(element));
|
|
6373
6462
|
});
|
|
6374
6463
|
this.setState({
|
|
6375
6464
|
elementsToHighlight: [...elementsToHighlight],
|
|
6465
|
+
suggestedBindings,
|
|
6376
6466
|
});
|
|
6377
6467
|
return true;
|
|
6378
6468
|
}
|
|
@@ -6417,6 +6507,7 @@ class App extends React.Component {
|
|
|
6417
6507
|
return [actionCopy, ...options];
|
|
6418
6508
|
}
|
|
6419
6509
|
return [
|
|
6510
|
+
CONTEXT_MENU_SEPARATOR,
|
|
6420
6511
|
actionCut,
|
|
6421
6512
|
actionCopy,
|
|
6422
6513
|
actionPaste,
|
|
@@ -6429,6 +6520,7 @@ class App extends React.Component {
|
|
|
6429
6520
|
actionPasteStyles,
|
|
6430
6521
|
CONTEXT_MENU_SEPARATOR,
|
|
6431
6522
|
actionGroup,
|
|
6523
|
+
actionTextAutoResize,
|
|
6432
6524
|
actionUnbindText,
|
|
6433
6525
|
actionBindText,
|
|
6434
6526
|
actionWrapTextInContainer,
|