@wildmio/excalidraw-common 0.18.0-custom.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +19 -0
- package/dist/dev/index.js +2695 -0
- package/dist/dev/index.js.map +7 -0
- package/dist/prod/index.js +4 -0
- package/dist/types/common/src/binary-heap.d.ts +12 -0
- package/dist/types/common/src/bounds.d.ts +10 -0
- package/dist/types/common/src/colors.d.ts +62 -0
- package/dist/types/common/src/constants.d.ts +352 -0
- package/dist/types/common/src/editorInterface.d.ts +34 -0
- package/dist/types/common/src/emitter.d.ts +16 -0
- package/dist/types/common/src/font-metadata.d.ts +46 -0
- package/dist/types/common/src/index.d.ts +15 -0
- package/dist/types/common/src/keys.d.ts +189 -0
- package/dist/types/common/src/points.d.ts +9 -0
- package/dist/types/common/src/promise-pool.d.ts +6 -0
- package/dist/types/common/src/queue.d.ts +9 -0
- package/dist/types/common/src/random.d.ts +3 -0
- package/dist/types/common/src/url.d.ts +7 -0
- package/dist/types/common/src/utility-types.d.ts +37 -0
- package/dist/types/common/src/utils.d.ts +279 -0
- package/dist/types/common/src/visualdebug.d.ts +41 -0
- package/dist/types/element/src/Scene.d.ts +80 -0
- package/dist/types/element/src/align.d.ts +8 -0
- package/dist/types/element/src/binding.d.ts +124 -0
- package/dist/types/element/src/bounds.d.ts +81 -0
- package/dist/types/element/src/collision.d.ts +36 -0
- package/dist/types/element/src/comparisons.d.ts +8 -0
- package/dist/types/element/src/containerCache.d.ts +11 -0
- package/dist/types/element/src/cropElement.d.ts +19 -0
- package/dist/types/element/src/delta.d.ts +228 -0
- package/dist/types/element/src/distance.d.ts +3 -0
- package/dist/types/element/src/distribute.d.ts +7 -0
- package/dist/types/element/src/dragElements.d.ts +33 -0
- package/dist/types/element/src/duplicate.d.ts +63 -0
- package/dist/types/element/src/elbowArrow.d.ts +17 -0
- package/dist/types/element/src/elementLink.d.ts +13 -0
- package/dist/types/element/src/embeddable.d.ts +10 -0
- package/dist/types/element/src/flowchart.d.ts +26 -0
- package/dist/types/element/src/fractionalIndex.d.ts +57 -0
- package/dist/types/element/src/frame.d.ts +74 -0
- package/dist/types/element/src/groups.d.ts +34 -0
- package/dist/types/element/src/heading.d.ts +16 -0
- package/dist/types/element/src/image.d.ts +22 -0
- package/dist/types/element/src/index.d.ts +56 -0
- package/dist/types/element/src/linearElementEditor.d.ts +113 -0
- package/dist/types/element/src/mutateElement.d.ts +23 -0
- package/dist/types/element/src/newElement.d.ts +62 -0
- package/dist/types/element/src/positionElementsOnGrid.d.ts +2 -0
- package/dist/types/element/src/renderElement.d.ts +31 -0
- package/dist/types/element/src/resizeElements.d.ts +32 -0
- package/dist/types/element/src/resizeTest.d.ts +16 -0
- package/dist/types/element/src/selection.d.ts +34 -0
- package/dist/types/element/src/shape.d.ts +42 -0
- package/dist/types/element/src/showSelectedShapeActions.d.ts +3 -0
- package/dist/types/element/src/sizeHelpers.d.ts +35 -0
- package/dist/types/element/src/sortElements.d.ts +2 -0
- package/dist/types/element/src/store.d.ts +237 -0
- package/dist/types/element/src/textElement.d.ts +40 -0
- package/dist/types/element/src/textMeasurements.d.ts +39 -0
- package/dist/types/element/src/textWrapping.d.ts +13 -0
- package/dist/types/element/src/transform.d.ts +81 -0
- package/dist/types/element/src/transformHandles.d.ts +36 -0
- package/dist/types/element/src/typeChecks.d.ts +54 -0
- package/dist/types/element/src/types.d.ts +291 -0
- package/dist/types/element/src/utils.d.ts +34 -0
- package/dist/types/element/src/zindex.d.ts +13 -0
- package/dist/types/excalidraw/actions/actionAddToLibrary.d.ts +485 -0
- package/dist/types/excalidraw/actions/actionAlign.d.ts +109 -0
- package/dist/types/excalidraw/actions/actionBoundText.d.ts +360 -0
- package/dist/types/excalidraw/actions/actionCanvas.d.ts +2059 -0
- package/dist/types/excalidraw/actions/actionClipboard.d.ts +399 -0
- package/dist/types/excalidraw/actions/actionCropEditor.d.ts +174 -0
- package/dist/types/excalidraw/actions/actionDeleteSelected.d.ts +519 -0
- package/dist/types/excalidraw/actions/actionDistribute.d.ts +34 -0
- package/dist/types/excalidraw/actions/actionDuplicateSelection.d.ts +17 -0
- package/dist/types/excalidraw/actions/actionElementLink.d.ts +194 -0
- package/dist/types/excalidraw/actions/actionElementLock.d.ts +346 -0
- package/dist/types/excalidraw/actions/actionEmbeddable.d.ts +171 -0
- package/dist/types/excalidraw/actions/actionExport.d.ts +683 -0
- package/dist/types/excalidraw/actions/actionFinalize.d.ts +13 -0
- package/dist/types/excalidraw/actions/actionFlip.d.ts +34 -0
- package/dist/types/excalidraw/actions/actionFrame.d.ts +1150 -0
- package/dist/types/excalidraw/actions/actionGroup.d.ts +350 -0
- package/dist/types/excalidraw/actions/actionHistory.d.ts +6 -0
- package/dist/types/excalidraw/actions/actionLinearEditor.d.ts +659 -0
- package/dist/types/excalidraw/actions/actionLink.d.ts +175 -0
- package/dist/types/excalidraw/actions/actionMenu.d.ts +163 -0
- package/dist/types/excalidraw/actions/actionNavigate.d.ts +20 -0
- package/dist/types/excalidraw/actions/actionProperties.d.ts +402 -0
- package/dist/types/excalidraw/actions/actionSelectAll.d.ts +170 -0
- package/dist/types/excalidraw/actions/actionStyles.d.ts +188 -0
- package/dist/types/excalidraw/actions/actionTextAutoResize.d.ts +17 -0
- package/dist/types/excalidraw/actions/actionToggleGridMode.d.ts +177 -0
- package/dist/types/excalidraw/actions/actionToggleObjectsSnapMode.d.ts +175 -0
- package/dist/types/excalidraw/actions/actionToggleSearchMenu.d.ts +166 -0
- package/dist/types/excalidraw/actions/actionToggleShapeSwitch.d.ts +19 -0
- package/dist/types/excalidraw/actions/actionToggleStats.d.ts +174 -0
- package/dist/types/excalidraw/actions/actionToggleViewMode.d.ts +175 -0
- package/dist/types/excalidraw/actions/actionToggleZenMode.d.ts +175 -0
- package/dist/types/excalidraw/actions/actionZindex.d.ts +74 -0
- package/dist/types/excalidraw/actions/index.d.ts +28 -0
- package/dist/types/excalidraw/actions/manager.d.ts +21 -0
- package/dist/types/excalidraw/actions/register.d.ts +5 -0
- package/dist/types/excalidraw/actions/shortcuts.d.ts +4 -0
- package/dist/types/excalidraw/actions/types.d.ts +47 -0
- package/dist/types/excalidraw/analytics.d.ts +1 -0
- package/dist/types/excalidraw/animated-trail.d.ts +39 -0
- package/dist/types/excalidraw/animation-frame-handler.d.ts +16 -0
- package/dist/types/excalidraw/appState.d.ts +102 -0
- package/dist/types/excalidraw/charts.d.ts +27 -0
- package/dist/types/excalidraw/clients.d.ts +14 -0
- package/dist/types/excalidraw/clipboard.d.ts +105 -0
- package/dist/types/excalidraw/components/Actions.d.ts +47 -0
- package/dist/types/excalidraw/components/ActiveConfirmDialog.d.ts +4 -0
- package/dist/types/excalidraw/components/App.d.ts +563 -0
- package/dist/types/excalidraw/components/Avatar.d.ts +11 -0
- package/dist/types/excalidraw/components/BraveMeasureTextError.d.ts +2 -0
- package/dist/types/excalidraw/components/Button.d.ts +17 -0
- package/dist/types/excalidraw/components/ButtonIcon.d.ts +16 -0
- package/dist/types/excalidraw/components/ButtonSeparator.d.ts +1 -0
- package/dist/types/excalidraw/components/Card.d.ts +6 -0
- package/dist/types/excalidraw/components/CheckboxItem.d.ts +8 -0
- package/dist/types/excalidraw/components/ColorPicker/ColorInput.d.ts +10 -0
- package/dist/types/excalidraw/components/ColorPicker/ColorPicker.d.ts +23 -0
- package/dist/types/excalidraw/components/ColorPicker/CustomColorList.d.ts +8 -0
- package/dist/types/excalidraw/components/ColorPicker/HotkeyLabel.d.ts +7 -0
- package/dist/types/excalidraw/components/ColorPicker/Picker.d.ts +19 -0
- package/dist/types/excalidraw/components/ColorPicker/PickerColorList.d.ts +10 -0
- package/dist/types/excalidraw/components/ColorPicker/PickerHeading.d.ts +5 -0
- package/dist/types/excalidraw/components/ColorPicker/ShadeList.d.ts +9 -0
- package/dist/types/excalidraw/components/ColorPicker/TopPicks.d.ts +9 -0
- package/dist/types/excalidraw/components/ColorPicker/colorPickerUtils.d.ts +21 -0
- package/dist/types/excalidraw/components/ColorPicker/keyboardNavHandlers.d.ts +20 -0
- package/dist/types/excalidraw/components/CommandPalette/CommandPalette.d.ts +19 -0
- package/dist/types/excalidraw/components/CommandPalette/defaultCommandPaletteItems.d.ts +2 -0
- package/dist/types/excalidraw/components/CommandPalette/types.d.ts +24 -0
- package/dist/types/excalidraw/components/ConfirmDialog.d.ts +10 -0
- package/dist/types/excalidraw/components/ContextMenu.d.ts +16 -0
- package/dist/types/excalidraw/components/ConvertElementTypePopup.d.ts +23 -0
- package/dist/types/excalidraw/components/DarkModeToggle.d.ts +7 -0
- package/dist/types/excalidraw/components/DefaultSidebar.d.ts +27 -0
- package/dist/types/excalidraw/components/DiagramToCodePlugin/DiagramToCodePlugin.d.ts +4 -0
- package/dist/types/excalidraw/components/Dialog.d.ts +13 -0
- package/dist/types/excalidraw/components/DialogActionButton.d.ts +10 -0
- package/dist/types/excalidraw/components/ElementCanvasButtons.d.ts +7 -0
- package/dist/types/excalidraw/components/ElementLinkDialog.d.ts +12 -0
- package/dist/types/excalidraw/components/Ellipsify.d.ts +3 -0
- package/dist/types/excalidraw/components/ErrorDialog.d.ts +5 -0
- package/dist/types/excalidraw/components/ExcalidrawLogo.d.ts +15 -0
- package/dist/types/excalidraw/components/EyeButton.d.ts +8 -0
- package/dist/types/excalidraw/components/EyeDropper.d.ts +27 -0
- package/dist/types/excalidraw/components/FilledButton.d.ts +18 -0
- package/dist/types/excalidraw/components/FixedSideContainer.d.ts +9 -0
- package/dist/types/excalidraw/components/FollowMode/FollowMode.d.ts +10 -0
- package/dist/types/excalidraw/components/FontPicker/FontPicker.d.ts +22 -0
- package/dist/types/excalidraw/components/FontPicker/FontPickerList.d.ts +26 -0
- package/dist/types/excalidraw/components/FontPicker/FontPickerTrigger.d.ts +8 -0
- package/dist/types/excalidraw/components/FontPicker/keyboardNavHandlers.d.ts +13 -0
- package/dist/types/excalidraw/components/HandButton.d.ts +10 -0
- package/dist/types/excalidraw/components/HelpButton.d.ts +7 -0
- package/dist/types/excalidraw/components/HelpDialog.d.ts +4 -0
- package/dist/types/excalidraw/components/HintViewer.d.ts +11 -0
- package/dist/types/excalidraw/components/IconPicker.d.ts +15 -0
- package/dist/types/excalidraw/components/ImageExportDialog.d.ts +14 -0
- package/dist/types/excalidraw/components/InitializeApp.d.ts +10 -0
- package/dist/types/excalidraw/components/InlineIcon.d.ts +5 -0
- package/dist/types/excalidraw/components/Island.d.ts +10 -0
- package/dist/types/excalidraw/components/JSONExportDialog.d.ts +15 -0
- package/dist/types/excalidraw/components/LaserPointerButton.d.ts +10 -0
- package/dist/types/excalidraw/components/LayerUI.d.ts +32 -0
- package/dist/types/excalidraw/components/LibraryMenu.d.ts +10 -0
- package/dist/types/excalidraw/components/LibraryMenuBrowseButton.d.ts +7 -0
- package/dist/types/excalidraw/components/LibraryMenuControlButtons.d.ts +9 -0
- package/dist/types/excalidraw/components/LibraryMenuHeaderContent.d.ts +17 -0
- package/dist/types/excalidraw/components/LibraryMenuItems.d.ts +14 -0
- package/dist/types/excalidraw/components/LibraryMenuSection.d.ts +23 -0
- package/dist/types/excalidraw/components/LibraryUnit.d.ts +14 -0
- package/dist/types/excalidraw/components/LoadingMessage.d.ts +5 -0
- package/dist/types/excalidraw/components/LockButton.d.ts +10 -0
- package/dist/types/excalidraw/components/MagicButton.d.ts +10 -0
- package/dist/types/excalidraw/components/MobileMenu.d.ts +24 -0
- package/dist/types/excalidraw/components/MobileToolBar.d.ts +10 -0
- package/dist/types/excalidraw/components/Modal.d.ts +11 -0
- package/dist/types/excalidraw/components/OverwriteConfirm/OverwriteConfirm.d.ts +17 -0
- package/dist/types/excalidraw/components/OverwriteConfirm/OverwriteConfirmActions.d.ts +17 -0
- package/dist/types/excalidraw/components/OverwriteConfirm/OverwriteConfirmState.d.ts +22 -0
- package/dist/types/excalidraw/components/PasteChartDialog.d.ts +8 -0
- package/dist/types/excalidraw/components/PenModeButton.d.ts +12 -0
- package/dist/types/excalidraw/components/Popover.d.ts +16 -0
- package/dist/types/excalidraw/components/ProjectName.d.ts +10 -0
- package/dist/types/excalidraw/components/PropertiesPopover.d.ts +16 -0
- package/dist/types/excalidraw/components/PublishLibrary.d.ts +16 -0
- package/dist/types/excalidraw/components/QuickSearch.d.ts +9 -0
- package/dist/types/excalidraw/components/RadioGroup.d.ts +13 -0
- package/dist/types/excalidraw/components/RadioSelection.d.ts +20 -0
- package/dist/types/excalidraw/components/Range.d.ts +8 -0
- package/dist/types/excalidraw/components/SVGLayer.d.ts +7 -0
- package/dist/types/excalidraw/components/ScrollableList.d.ts +8 -0
- package/dist/types/excalidraw/components/SearchMenu.d.ts +5 -0
- package/dist/types/excalidraw/components/Section.d.ts +6 -0
- package/dist/types/excalidraw/components/Sidebar/Sidebar.d.ts +70 -0
- package/dist/types/excalidraw/components/Sidebar/SidebarHeader.d.ts +7 -0
- package/dist/types/excalidraw/components/Sidebar/SidebarTab.d.ts +8 -0
- package/dist/types/excalidraw/components/Sidebar/SidebarTabTrigger.d.ts +9 -0
- package/dist/types/excalidraw/components/Sidebar/SidebarTabTriggers.d.ts +6 -0
- package/dist/types/excalidraw/components/Sidebar/SidebarTabs.d.ts +6 -0
- package/dist/types/excalidraw/components/Sidebar/SidebarTrigger.d.ts +6 -0
- package/dist/types/excalidraw/components/Sidebar/common.d.ts +34 -0
- package/dist/types/excalidraw/components/Spinner.d.ts +8 -0
- package/dist/types/excalidraw/components/Stack.d.ts +15 -0
- package/dist/types/excalidraw/components/Stats/Angle.d.ts +11 -0
- package/dist/types/excalidraw/components/Stats/CanvasGrid.d.ts +10 -0
- package/dist/types/excalidraw/components/Stats/Collapsible.d.ts +10 -0
- package/dist/types/excalidraw/components/Stats/Dimension.d.ts +11 -0
- package/dist/types/excalidraw/components/Stats/DragInput.d.ts +44 -0
- package/dist/types/excalidraw/components/Stats/FontSize.d.ts +11 -0
- package/dist/types/excalidraw/components/Stats/MultiAngle.d.ts +11 -0
- package/dist/types/excalidraw/components/Stats/MultiDimension.d.ts +14 -0
- package/dist/types/excalidraw/components/Stats/MultiFontSize.d.ts +12 -0
- package/dist/types/excalidraw/components/Stats/MultiPosition.d.ts +14 -0
- package/dist/types/excalidraw/components/Stats/Position.d.ts +12 -0
- package/dist/types/excalidraw/components/Stats/index.d.ts +35 -0
- package/dist/types/excalidraw/components/Stats/utils.d.ts +19 -0
- package/dist/types/excalidraw/components/Switch.d.ts +9 -0
- package/dist/types/excalidraw/components/TTDDialog/MermaidToExcalidraw.d.ts +6 -0
- package/dist/types/excalidraw/components/TTDDialog/TTDDialog.d.ts +29 -0
- package/dist/types/excalidraw/components/TTDDialog/TTDDialogInput.d.ts +9 -0
- package/dist/types/excalidraw/components/TTDDialog/TTDDialogOutput.d.ts +7 -0
- package/dist/types/excalidraw/components/TTDDialog/TTDDialogPanel.d.ts +17 -0
- package/dist/types/excalidraw/components/TTDDialog/TTDDialogPanels.d.ts +4 -0
- package/dist/types/excalidraw/components/TTDDialog/TTDDialogSubmitShortcut.d.ts +1 -0
- package/dist/types/excalidraw/components/TTDDialog/TTDDialogTab.d.ts +7 -0
- package/dist/types/excalidraw/components/TTDDialog/TTDDialogTabTrigger.d.ts +8 -0
- package/dist/types/excalidraw/components/TTDDialog/TTDDialogTabTriggers.d.ts +6 -0
- package/dist/types/excalidraw/components/TTDDialog/TTDDialogTabs.d.ts +11 -0
- package/dist/types/excalidraw/components/TTDDialog/TTDDialogTrigger.d.ts +8 -0
- package/dist/types/excalidraw/components/TTDDialog/common.d.ts +32 -0
- package/dist/types/excalidraw/components/TextField.d.ts +22 -0
- package/dist/types/excalidraw/components/Toast.d.ts +9 -0
- package/dist/types/excalidraw/components/ToolButton.d.ts +49 -0
- package/dist/types/excalidraw/components/ToolPopover.d.ts +25 -0
- package/dist/types/excalidraw/components/Tooltip.d.ts +18 -0
- package/dist/types/excalidraw/components/Trans.d.ts +9 -0
- package/dist/types/excalidraw/components/UnlockPopup.d.ts +8 -0
- package/dist/types/excalidraw/components/UserList.d.ts +18 -0
- package/dist/types/excalidraw/components/canvases/InteractiveCanvas.d.ts +33 -0
- package/dist/types/excalidraw/components/canvases/NewElementCanvas.d.ts +14 -0
- package/dist/types/excalidraw/components/canvases/StaticCanvas.d.ts +19 -0
- package/dist/types/excalidraw/components/canvases/index.d.ts +3 -0
- package/dist/types/excalidraw/components/dropdownMenu/DropdownMenu.d.ts +84 -0
- package/dist/types/excalidraw/components/dropdownMenu/DropdownMenuContent.d.ts +16 -0
- package/dist/types/excalidraw/components/dropdownMenu/DropdownMenuGroup.d.ts +11 -0
- package/dist/types/excalidraw/components/dropdownMenu/DropdownMenuItem.d.ts +38 -0
- package/dist/types/excalidraw/components/dropdownMenu/DropdownMenuItemContent.d.ts +8 -0
- package/dist/types/excalidraw/components/dropdownMenu/DropdownMenuItemContentRadio.d.ts +17 -0
- package/dist/types/excalidraw/components/dropdownMenu/DropdownMenuItemCustom.d.ts +7 -0
- package/dist/types/excalidraw/components/dropdownMenu/DropdownMenuItemLink.d.ts +16 -0
- package/dist/types/excalidraw/components/dropdownMenu/DropdownMenuSeparator.d.ts +5 -0
- package/dist/types/excalidraw/components/dropdownMenu/DropdownMenuTrigger.d.ts +10 -0
- package/dist/types/excalidraw/components/dropdownMenu/common.d.ts +6 -0
- package/dist/types/excalidraw/components/dropdownMenu/dropdownMenuUtils.d.ts +3 -0
- package/dist/types/excalidraw/components/footer/Footer.d.ts +17 -0
- package/dist/types/excalidraw/components/footer/FooterCenter.d.ts +8 -0
- package/dist/types/excalidraw/components/hoc/withInternalFallback.d.ts +4 -0
- package/dist/types/excalidraw/components/hyperlink/Hyperlink.d.ts +19 -0
- package/dist/types/excalidraw/components/hyperlink/helpers.d.ts +10 -0
- package/dist/types/excalidraw/components/icons.d.ts +237 -0
- package/dist/types/excalidraw/components/live-collaboration/LiveCollaborationTrigger.d.ts +11 -0
- package/dist/types/excalidraw/components/main-menu/DefaultItems.d.ts +64 -0
- package/dist/types/excalidraw/components/main-menu/MainMenu.d.ts +76 -0
- package/dist/types/excalidraw/components/shapes.d.ts +190 -0
- package/dist/types/excalidraw/components/welcome-screen/WelcomeScreen.Center.d.ts +58 -0
- package/dist/types/excalidraw/components/welcome-screen/WelcomeScreen.Hints.d.ts +19 -0
- package/dist/types/excalidraw/components/welcome-screen/WelcomeScreen.d.ts +84 -0
- package/dist/types/excalidraw/context/tunnels.d.ts +21 -0
- package/dist/types/excalidraw/context/ui-appState.d.ts +4 -0
- package/dist/types/excalidraw/cursor.d.ts +5 -0
- package/dist/types/excalidraw/data/EditorLocalStorage.d.ts +8 -0
- package/dist/types/excalidraw/data/blob.d.ts +57 -0
- package/dist/types/excalidraw/data/encode.d.ts +55 -0
- package/dist/types/excalidraw/data/encryption.d.ts +9 -0
- package/dist/types/excalidraw/data/filesystem.d.ts +21 -0
- package/dist/types/excalidraw/data/image.d.ts +9 -0
- package/dist/types/excalidraw/data/index.d.ts +22 -0
- package/dist/types/excalidraw/data/json.d.ts +18 -0
- package/dist/types/excalidraw/data/library.d.ts +127 -0
- package/dist/types/excalidraw/data/reconcile.d.ts +7 -0
- package/dist/types/excalidraw/data/resave.d.ts +5 -0
- package/dist/types/excalidraw/data/restore.d.ts +35 -0
- package/dist/types/excalidraw/data/types.d.ts +48 -0
- package/dist/types/excalidraw/deburr.d.ts +1 -0
- package/dist/types/excalidraw/editor-jotai.d.ts +56 -0
- package/dist/types/excalidraw/eraser/index.d.ts +12 -0
- package/dist/types/excalidraw/errors.d.ts +29 -0
- package/dist/types/excalidraw/fonts/Cascadia/index.d.ts +2 -0
- package/dist/types/excalidraw/fonts/ComicShanns/index.d.ts +2 -0
- package/dist/types/excalidraw/fonts/Emoji/index.d.ts +2 -0
- package/dist/types/excalidraw/fonts/ExcalidrawFontFace.d.ts +25 -0
- package/dist/types/excalidraw/fonts/Excalifont/index.d.ts +2 -0
- package/dist/types/excalidraw/fonts/Fonts.d.ts +79 -0
- package/dist/types/excalidraw/fonts/Helvetica/index.d.ts +2 -0
- package/dist/types/excalidraw/fonts/Liberation/index.d.ts +2 -0
- package/dist/types/excalidraw/fonts/Lilita/index.d.ts +2 -0
- package/dist/types/excalidraw/fonts/Nunito/index.d.ts +2 -0
- package/dist/types/excalidraw/fonts/Virgil/index.d.ts +2 -0
- package/dist/types/excalidraw/fonts/Xiaolai/index.d.ts +8 -0
- package/dist/types/excalidraw/fonts/index.d.ts +1 -0
- package/dist/types/excalidraw/gesture.d.ts +6 -0
- package/dist/types/excalidraw/history.d.ts +48 -0
- package/dist/types/excalidraw/hooks/useCallbackRefState.d.ts +1 -0
- package/dist/types/excalidraw/hooks/useCopiedIndicator.d.ts +5 -0
- package/dist/types/excalidraw/hooks/useCreatePortalContainer.d.ts +4 -0
- package/dist/types/excalidraw/hooks/useEmitter.d.ts +2 -0
- package/dist/types/excalidraw/hooks/useLibraryItemSvg.d.ts +11 -0
- package/dist/types/excalidraw/hooks/useOutsideClick.d.ts +21 -0
- package/dist/types/excalidraw/hooks/useScrollPosition.d.ts +1 -0
- package/dist/types/excalidraw/hooks/useStable.d.ts +1 -0
- package/dist/types/excalidraw/hooks/useStableCallback.d.ts +4 -0
- package/dist/types/excalidraw/hooks/useTextEditorFocus.d.ts +14 -0
- package/dist/types/excalidraw/hooks/useTransition.d.ts +2 -0
- package/dist/types/excalidraw/i18n.d.ts +24 -0
- package/dist/types/excalidraw/index.d.ts +45 -0
- package/dist/types/excalidraw/laser-trails.d.ts +20 -0
- package/dist/types/excalidraw/lasso/index.d.ts +16 -0
- package/dist/types/excalidraw/lasso/utils.d.ts +13 -0
- package/dist/types/excalidraw/mermaid.d.ts +2 -0
- package/dist/types/excalidraw/polyfill.d.ts +2 -0
- package/dist/types/excalidraw/reactUtils.d.ts +14 -0
- package/dist/types/excalidraw/renderer/animation.d.ts +12 -0
- package/dist/types/excalidraw/renderer/helpers.d.ts +16 -0
- package/dist/types/excalidraw/renderer/interactiveScene.d.ts +14 -0
- package/dist/types/excalidraw/renderer/renderNewElementScene.d.ts +7 -0
- package/dist/types/excalidraw/renderer/renderSnaps.d.ts +2 -0
- package/dist/types/excalidraw/renderer/roundRect.d.ts +11 -0
- package/dist/types/excalidraw/renderer/staticScene.d.ts +14 -0
- package/dist/types/excalidraw/renderer/staticSvgScene.d.ts +5 -0
- package/dist/types/excalidraw/scene/Renderer.d.ts +30 -0
- package/dist/types/excalidraw/scene/export.d.ts +36 -0
- package/dist/types/excalidraw/scene/index.d.ts +4 -0
- package/dist/types/excalidraw/scene/normalize.d.ts +4 -0
- package/dist/types/excalidraw/scene/scroll.d.ts +18 -0
- package/dist/types/excalidraw/scene/scrollbars.d.ts +11 -0
- package/dist/types/excalidraw/scene/types.d.ts +132 -0
- package/dist/types/excalidraw/scene/zoom.d.ts +12 -0
- package/dist/types/excalidraw/shortcut.d.ts +1 -0
- package/dist/types/excalidraw/snapping.d.ts +111 -0
- package/dist/types/excalidraw/subset/harfbuzz/harfbuzz-bindings.d.ts +45 -0
- package/dist/types/excalidraw/subset/harfbuzz/harfbuzz-loader.d.ts +13 -0
- package/dist/types/excalidraw/subset/harfbuzz/harfbuzz-wasm.d.ts +2 -0
- package/dist/types/excalidraw/subset/subset-main.d.ts +12 -0
- package/dist/types/excalidraw/subset/subset-shared.chunk.d.ts +32 -0
- package/dist/types/excalidraw/subset/subset-worker.chunk.d.ts +15 -0
- package/dist/types/excalidraw/subset/woff2/woff2-bindings.d.ts +31 -0
- package/dist/types/excalidraw/subset/woff2/woff2-loader.d.ts +14 -0
- package/dist/types/excalidraw/subset/woff2/woff2-wasm.d.ts +2 -0
- package/dist/types/excalidraw/types.d.ts +744 -0
- package/dist/types/excalidraw/workers.d.ts +36 -0
- package/dist/types/excalidraw/wysiwyg/textWysiwyg.d.ts +24 -0
- package/dist/types/math/src/angle.d.ts +19 -0
- package/dist/types/math/src/constants.d.ts +3 -0
- package/dist/types/math/src/curve.d.ts +74 -0
- package/dist/types/math/src/ellipse.d.ts +44 -0
- package/dist/types/math/src/index.d.ts +13 -0
- package/dist/types/math/src/line.d.ts +17 -0
- package/dist/types/math/src/point.d.ts +122 -0
- package/dist/types/math/src/polygon.d.ts +6 -0
- package/dist/types/math/src/range.d.ts +44 -0
- package/dist/types/math/src/rectangle.d.ts +5 -0
- package/dist/types/math/src/segment.d.ts +40 -0
- package/dist/types/math/src/triangle.d.ts +11 -0
- package/dist/types/math/src/types.d.ts +106 -0
- package/dist/types/math/src/utils.d.ts +7 -0
- package/dist/types/math/src/vector.d.ts +94 -0
- package/dist/types/utils/src/bbox.d.ts +9 -0
- package/dist/types/utils/src/export.d.ts +35 -0
- package/dist/types/utils/src/index.d.ts +4 -0
- package/dist/types/utils/src/shape.d.ts +58 -0
- package/dist/types/utils/src/withinBounds.d.ts +19 -0
- package/package.json +59 -0
|
@@ -0,0 +1,2695 @@
|
|
|
1
|
+
var __create = Object.create;
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __esm = (fn, res) => function __init() {
|
|
8
|
+
return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
|
|
9
|
+
};
|
|
10
|
+
var __commonJS = (cb, mod) => function __require() {
|
|
11
|
+
return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
|
|
12
|
+
};
|
|
13
|
+
var __copyProps = (to, from, except, desc) => {
|
|
14
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
15
|
+
for (let key of __getOwnPropNames(from))
|
|
16
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
17
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
18
|
+
}
|
|
19
|
+
return to;
|
|
20
|
+
};
|
|
21
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
22
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
23
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
24
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
25
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
26
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
27
|
+
mod
|
|
28
|
+
));
|
|
29
|
+
|
|
30
|
+
// <define:import.meta.env>
|
|
31
|
+
var define_import_meta_env_default;
|
|
32
|
+
var init_define_import_meta_env = __esm({
|
|
33
|
+
"<define:import.meta.env>"() {
|
|
34
|
+
define_import_meta_env_default = { DEV: true };
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
// ../../node_modules/es6-promise-pool/es6-promise-pool.js
|
|
39
|
+
var require_es6_promise_pool = __commonJS({
|
|
40
|
+
"../../node_modules/es6-promise-pool/es6-promise-pool.js"(exports, module) {
|
|
41
|
+
init_define_import_meta_env();
|
|
42
|
+
(function(root, factory) {
|
|
43
|
+
if (typeof define === "function" && define.amd) {
|
|
44
|
+
define([], factory);
|
|
45
|
+
} else if (typeof exports === "object") {
|
|
46
|
+
module.exports = factory();
|
|
47
|
+
} else {
|
|
48
|
+
root.PromisePool = factory();
|
|
49
|
+
root.promisePool = root.PromisePool;
|
|
50
|
+
}
|
|
51
|
+
})(exports, function() {
|
|
52
|
+
"use strict";
|
|
53
|
+
var EventTarget = function() {
|
|
54
|
+
this._listeners = {};
|
|
55
|
+
};
|
|
56
|
+
EventTarget.prototype.addEventListener = function(type, listener) {
|
|
57
|
+
this._listeners[type] = this._listeners[type] || [];
|
|
58
|
+
if (this._listeners[type].indexOf(listener) < 0) {
|
|
59
|
+
this._listeners[type].push(listener);
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
EventTarget.prototype.removeEventListener = function(type, listener) {
|
|
63
|
+
if (this._listeners[type]) {
|
|
64
|
+
var p = this._listeners[type].indexOf(listener);
|
|
65
|
+
if (p >= 0) {
|
|
66
|
+
this._listeners[type].splice(p, 1);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
};
|
|
70
|
+
EventTarget.prototype.dispatchEvent = function(evt) {
|
|
71
|
+
if (this._listeners[evt.type] && this._listeners[evt.type].length) {
|
|
72
|
+
var listeners = this._listeners[evt.type].slice();
|
|
73
|
+
for (var i = 0, l = listeners.length; i < l; ++i) {
|
|
74
|
+
listeners[i].call(this, evt);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
var isGenerator = function(func) {
|
|
79
|
+
return typeof func.constructor === "function" && func.constructor.name === "GeneratorFunction";
|
|
80
|
+
};
|
|
81
|
+
var functionToIterator = function(func) {
|
|
82
|
+
return {
|
|
83
|
+
next: function() {
|
|
84
|
+
var promise = func();
|
|
85
|
+
return promise ? { value: promise } : { done: true };
|
|
86
|
+
}
|
|
87
|
+
};
|
|
88
|
+
};
|
|
89
|
+
var promiseToIterator = function(promise) {
|
|
90
|
+
var called = false;
|
|
91
|
+
return {
|
|
92
|
+
next: function() {
|
|
93
|
+
if (called) {
|
|
94
|
+
return { done: true };
|
|
95
|
+
}
|
|
96
|
+
called = true;
|
|
97
|
+
return { value: promise };
|
|
98
|
+
}
|
|
99
|
+
};
|
|
100
|
+
};
|
|
101
|
+
var toIterator = function(obj, Promise2) {
|
|
102
|
+
var type = typeof obj;
|
|
103
|
+
if (type === "object") {
|
|
104
|
+
if (typeof obj.next === "function") {
|
|
105
|
+
return obj;
|
|
106
|
+
}
|
|
107
|
+
if (typeof obj.then === "function") {
|
|
108
|
+
return promiseToIterator(obj);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
if (type === "function") {
|
|
112
|
+
return isGenerator(obj) ? obj() : functionToIterator(obj);
|
|
113
|
+
}
|
|
114
|
+
return promiseToIterator(Promise2.resolve(obj));
|
|
115
|
+
};
|
|
116
|
+
var PromisePoolEvent = function(target, type, data) {
|
|
117
|
+
this.target = target;
|
|
118
|
+
this.type = type;
|
|
119
|
+
this.data = data;
|
|
120
|
+
};
|
|
121
|
+
var PromisePool2 = function(source, concurrency, options) {
|
|
122
|
+
EventTarget.call(this);
|
|
123
|
+
if (typeof concurrency !== "number" || Math.floor(concurrency) !== concurrency || concurrency < 1) {
|
|
124
|
+
throw new Error("Invalid concurrency");
|
|
125
|
+
}
|
|
126
|
+
this._concurrency = concurrency;
|
|
127
|
+
this._options = options || {};
|
|
128
|
+
this._options.promise = this._options.promise || Promise;
|
|
129
|
+
this._iterator = toIterator(source, this._options.promise);
|
|
130
|
+
this._done = false;
|
|
131
|
+
this._size = 0;
|
|
132
|
+
this._promise = null;
|
|
133
|
+
this._callbacks = null;
|
|
134
|
+
};
|
|
135
|
+
PromisePool2.prototype = new EventTarget();
|
|
136
|
+
PromisePool2.prototype.constructor = PromisePool2;
|
|
137
|
+
PromisePool2.prototype.concurrency = function(value) {
|
|
138
|
+
if (typeof value !== "undefined") {
|
|
139
|
+
this._concurrency = value;
|
|
140
|
+
if (this.active()) {
|
|
141
|
+
this._proceed();
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
return this._concurrency;
|
|
145
|
+
};
|
|
146
|
+
PromisePool2.prototype.size = function() {
|
|
147
|
+
return this._size;
|
|
148
|
+
};
|
|
149
|
+
PromisePool2.prototype.active = function() {
|
|
150
|
+
return !!this._promise;
|
|
151
|
+
};
|
|
152
|
+
PromisePool2.prototype.promise = function() {
|
|
153
|
+
return this._promise;
|
|
154
|
+
};
|
|
155
|
+
PromisePool2.prototype.start = function() {
|
|
156
|
+
var that = this;
|
|
157
|
+
var Promise2 = this._options.promise;
|
|
158
|
+
this._promise = new Promise2(function(resolve, reject) {
|
|
159
|
+
that._callbacks = {
|
|
160
|
+
reject,
|
|
161
|
+
resolve
|
|
162
|
+
};
|
|
163
|
+
that._proceed();
|
|
164
|
+
});
|
|
165
|
+
return this._promise;
|
|
166
|
+
};
|
|
167
|
+
PromisePool2.prototype._fireEvent = function(type, data) {
|
|
168
|
+
this.dispatchEvent(new PromisePoolEvent(this, type, data));
|
|
169
|
+
};
|
|
170
|
+
PromisePool2.prototype._settle = function(error) {
|
|
171
|
+
if (error) {
|
|
172
|
+
this._callbacks.reject(error);
|
|
173
|
+
} else {
|
|
174
|
+
this._callbacks.resolve();
|
|
175
|
+
}
|
|
176
|
+
this._promise = null;
|
|
177
|
+
this._callbacks = null;
|
|
178
|
+
};
|
|
179
|
+
PromisePool2.prototype._onPooledPromiseFulfilled = function(promise, result) {
|
|
180
|
+
this._size--;
|
|
181
|
+
if (this.active()) {
|
|
182
|
+
this._fireEvent("fulfilled", {
|
|
183
|
+
promise,
|
|
184
|
+
result
|
|
185
|
+
});
|
|
186
|
+
this._proceed();
|
|
187
|
+
}
|
|
188
|
+
};
|
|
189
|
+
PromisePool2.prototype._onPooledPromiseRejected = function(promise, error) {
|
|
190
|
+
this._size--;
|
|
191
|
+
if (this.active()) {
|
|
192
|
+
this._fireEvent("rejected", {
|
|
193
|
+
promise,
|
|
194
|
+
error
|
|
195
|
+
});
|
|
196
|
+
this._settle(error || new Error("Unknown error"));
|
|
197
|
+
}
|
|
198
|
+
};
|
|
199
|
+
PromisePool2.prototype._trackPromise = function(promise) {
|
|
200
|
+
var that = this;
|
|
201
|
+
promise.then(function(result) {
|
|
202
|
+
that._onPooledPromiseFulfilled(promise, result);
|
|
203
|
+
}, function(error) {
|
|
204
|
+
that._onPooledPromiseRejected(promise, error);
|
|
205
|
+
})["catch"](function(err) {
|
|
206
|
+
that._settle(new Error("Promise processing failed: " + err));
|
|
207
|
+
});
|
|
208
|
+
};
|
|
209
|
+
PromisePool2.prototype._proceed = function() {
|
|
210
|
+
if (!this._done) {
|
|
211
|
+
var result = { done: false };
|
|
212
|
+
while (this._size < this._concurrency && !(result = this._iterator.next()).done) {
|
|
213
|
+
this._size++;
|
|
214
|
+
this._trackPromise(result.value);
|
|
215
|
+
}
|
|
216
|
+
this._done = result === null || !!result.done;
|
|
217
|
+
}
|
|
218
|
+
if (this._done && this._size === 0) {
|
|
219
|
+
this._settle();
|
|
220
|
+
}
|
|
221
|
+
};
|
|
222
|
+
PromisePool2.PromisePoolEvent = PromisePoolEvent;
|
|
223
|
+
PromisePool2.PromisePool = PromisePool2;
|
|
224
|
+
return PromisePool2;
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
});
|
|
228
|
+
|
|
229
|
+
// ../../node_modules/@braintree/sanitize-url/dist/index.js
|
|
230
|
+
var require_dist = __commonJS({
|
|
231
|
+
"../../node_modules/@braintree/sanitize-url/dist/index.js"(exports) {
|
|
232
|
+
"use strict";
|
|
233
|
+
init_define_import_meta_env();
|
|
234
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
235
|
+
exports.sanitizeUrl = void 0;
|
|
236
|
+
var invalidProtocolRegex = /^([^\w]*)(javascript|data|vbscript)/im;
|
|
237
|
+
var htmlEntitiesRegex = /&#(\w+)(^\w|;)?/g;
|
|
238
|
+
var htmlCtrlEntityRegex = /&(newline|tab);/gi;
|
|
239
|
+
var ctrlCharactersRegex = /[\u0000-\u001F\u007F-\u009F\u2000-\u200D\uFEFF]/gim;
|
|
240
|
+
var urlSchemeRegex = /^.+(:|:)/gim;
|
|
241
|
+
var relativeFirstCharacters = [".", "/"];
|
|
242
|
+
function isRelativeUrlWithoutProtocol(url) {
|
|
243
|
+
return relativeFirstCharacters.indexOf(url[0]) > -1;
|
|
244
|
+
}
|
|
245
|
+
function decodeHtmlCharacters(str) {
|
|
246
|
+
return str.replace(htmlEntitiesRegex, function(match, dec) {
|
|
247
|
+
return String.fromCharCode(dec);
|
|
248
|
+
});
|
|
249
|
+
}
|
|
250
|
+
function sanitizeUrl2(url) {
|
|
251
|
+
var sanitizedUrl = decodeHtmlCharacters(url || "").replace(htmlCtrlEntityRegex, "").replace(ctrlCharactersRegex, "").trim();
|
|
252
|
+
if (!sanitizedUrl) {
|
|
253
|
+
return "about:blank";
|
|
254
|
+
}
|
|
255
|
+
if (isRelativeUrlWithoutProtocol(sanitizedUrl)) {
|
|
256
|
+
return sanitizedUrl;
|
|
257
|
+
}
|
|
258
|
+
var urlSchemeParseResults = sanitizedUrl.match(urlSchemeRegex);
|
|
259
|
+
if (!urlSchemeParseResults) {
|
|
260
|
+
return sanitizedUrl;
|
|
261
|
+
}
|
|
262
|
+
var urlScheme = urlSchemeParseResults[0];
|
|
263
|
+
if (invalidProtocolRegex.test(urlScheme)) {
|
|
264
|
+
return "about:blank";
|
|
265
|
+
}
|
|
266
|
+
return sanitizedUrl;
|
|
267
|
+
}
|
|
268
|
+
exports.sanitizeUrl = sanitizeUrl2;
|
|
269
|
+
}
|
|
270
|
+
});
|
|
271
|
+
|
|
272
|
+
// src/index.ts
|
|
273
|
+
init_define_import_meta_env();
|
|
274
|
+
|
|
275
|
+
// src/binary-heap.ts
|
|
276
|
+
init_define_import_meta_env();
|
|
277
|
+
var BinaryHeap = class {
|
|
278
|
+
constructor(scoreFunction) {
|
|
279
|
+
this.scoreFunction = scoreFunction;
|
|
280
|
+
}
|
|
281
|
+
content = [];
|
|
282
|
+
sinkDown(idx) {
|
|
283
|
+
const node = this.content[idx];
|
|
284
|
+
const nodeScore = this.scoreFunction(node);
|
|
285
|
+
while (idx > 0) {
|
|
286
|
+
const parentN = (idx + 1 >> 1) - 1;
|
|
287
|
+
const parent = this.content[parentN];
|
|
288
|
+
if (nodeScore < this.scoreFunction(parent)) {
|
|
289
|
+
this.content[idx] = parent;
|
|
290
|
+
idx = parentN;
|
|
291
|
+
} else {
|
|
292
|
+
break;
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
this.content[idx] = node;
|
|
296
|
+
}
|
|
297
|
+
bubbleUp(idx) {
|
|
298
|
+
const length = this.content.length;
|
|
299
|
+
const node = this.content[idx];
|
|
300
|
+
const score = this.scoreFunction(node);
|
|
301
|
+
while (true) {
|
|
302
|
+
const child1N = (idx + 1 << 1) - 1;
|
|
303
|
+
const child2N = child1N + 1;
|
|
304
|
+
let smallestIdx = idx;
|
|
305
|
+
let smallestScore = score;
|
|
306
|
+
if (child1N < length) {
|
|
307
|
+
const child1Score = this.scoreFunction(this.content[child1N]);
|
|
308
|
+
if (child1Score < smallestScore) {
|
|
309
|
+
smallestIdx = child1N;
|
|
310
|
+
smallestScore = child1Score;
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
if (child2N < length) {
|
|
314
|
+
const child2Score = this.scoreFunction(this.content[child2N]);
|
|
315
|
+
if (child2Score < smallestScore) {
|
|
316
|
+
smallestIdx = child2N;
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
if (smallestIdx === idx) {
|
|
320
|
+
break;
|
|
321
|
+
}
|
|
322
|
+
this.content[idx] = this.content[smallestIdx];
|
|
323
|
+
idx = smallestIdx;
|
|
324
|
+
}
|
|
325
|
+
this.content[idx] = node;
|
|
326
|
+
}
|
|
327
|
+
push(node) {
|
|
328
|
+
this.content.push(node);
|
|
329
|
+
this.sinkDown(this.content.length - 1);
|
|
330
|
+
}
|
|
331
|
+
pop() {
|
|
332
|
+
if (this.content.length === 0) {
|
|
333
|
+
return null;
|
|
334
|
+
}
|
|
335
|
+
const result = this.content[0];
|
|
336
|
+
const end = this.content.pop();
|
|
337
|
+
if (this.content.length > 0) {
|
|
338
|
+
this.content[0] = end;
|
|
339
|
+
this.bubbleUp(0);
|
|
340
|
+
}
|
|
341
|
+
return result;
|
|
342
|
+
}
|
|
343
|
+
remove(node) {
|
|
344
|
+
if (this.content.length === 0) {
|
|
345
|
+
return;
|
|
346
|
+
}
|
|
347
|
+
const i = this.content.indexOf(node);
|
|
348
|
+
const end = this.content.pop();
|
|
349
|
+
if (i < this.content.length) {
|
|
350
|
+
this.content[i] = end;
|
|
351
|
+
if (this.scoreFunction(end) < this.scoreFunction(node)) {
|
|
352
|
+
this.sinkDown(i);
|
|
353
|
+
} else {
|
|
354
|
+
this.bubbleUp(i);
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
size() {
|
|
359
|
+
return this.content.length;
|
|
360
|
+
}
|
|
361
|
+
rescoreElement(node) {
|
|
362
|
+
this.sinkDown(this.content.indexOf(node));
|
|
363
|
+
}
|
|
364
|
+
};
|
|
365
|
+
|
|
366
|
+
// src/bounds.ts
|
|
367
|
+
init_define_import_meta_env();
|
|
368
|
+
var isBounds = (box) => Array.isArray(box) && box.length === 4 && typeof box[0] === "number" && typeof box[1] === "number" && typeof box[2] === "number" && typeof box[3] === "number";
|
|
369
|
+
|
|
370
|
+
// src/colors.ts
|
|
371
|
+
init_define_import_meta_env();
|
|
372
|
+
|
|
373
|
+
// ../../node_modules/open-color/open-color.json
|
|
374
|
+
var open_color_default = {
|
|
375
|
+
white: "#ffffff",
|
|
376
|
+
black: "#000000",
|
|
377
|
+
gray: [
|
|
378
|
+
"#f8f9fa",
|
|
379
|
+
"#f1f3f5",
|
|
380
|
+
"#e9ecef",
|
|
381
|
+
"#dee2e6",
|
|
382
|
+
"#ced4da",
|
|
383
|
+
"#adb5bd",
|
|
384
|
+
"#868e96",
|
|
385
|
+
"#495057",
|
|
386
|
+
"#343a40",
|
|
387
|
+
"#212529"
|
|
388
|
+
],
|
|
389
|
+
red: [
|
|
390
|
+
"#fff5f5",
|
|
391
|
+
"#ffe3e3",
|
|
392
|
+
"#ffc9c9",
|
|
393
|
+
"#ffa8a8",
|
|
394
|
+
"#ff8787",
|
|
395
|
+
"#ff6b6b",
|
|
396
|
+
"#fa5252",
|
|
397
|
+
"#f03e3e",
|
|
398
|
+
"#e03131",
|
|
399
|
+
"#c92a2a"
|
|
400
|
+
],
|
|
401
|
+
pink: [
|
|
402
|
+
"#fff0f6",
|
|
403
|
+
"#ffdeeb",
|
|
404
|
+
"#fcc2d7",
|
|
405
|
+
"#faa2c1",
|
|
406
|
+
"#f783ac",
|
|
407
|
+
"#f06595",
|
|
408
|
+
"#e64980",
|
|
409
|
+
"#d6336c",
|
|
410
|
+
"#c2255c",
|
|
411
|
+
"#a61e4d"
|
|
412
|
+
],
|
|
413
|
+
grape: [
|
|
414
|
+
"#f8f0fc",
|
|
415
|
+
"#f3d9fa",
|
|
416
|
+
"#eebefa",
|
|
417
|
+
"#e599f7",
|
|
418
|
+
"#da77f2",
|
|
419
|
+
"#cc5de8",
|
|
420
|
+
"#be4bdb",
|
|
421
|
+
"#ae3ec9",
|
|
422
|
+
"#9c36b5",
|
|
423
|
+
"#862e9c"
|
|
424
|
+
],
|
|
425
|
+
violet: [
|
|
426
|
+
"#f3f0ff",
|
|
427
|
+
"#e5dbff",
|
|
428
|
+
"#d0bfff",
|
|
429
|
+
"#b197fc",
|
|
430
|
+
"#9775fa",
|
|
431
|
+
"#845ef7",
|
|
432
|
+
"#7950f2",
|
|
433
|
+
"#7048e8",
|
|
434
|
+
"#6741d9",
|
|
435
|
+
"#5f3dc4"
|
|
436
|
+
],
|
|
437
|
+
indigo: [
|
|
438
|
+
"#edf2ff",
|
|
439
|
+
"#dbe4ff",
|
|
440
|
+
"#bac8ff",
|
|
441
|
+
"#91a7ff",
|
|
442
|
+
"#748ffc",
|
|
443
|
+
"#5c7cfa",
|
|
444
|
+
"#4c6ef5",
|
|
445
|
+
"#4263eb",
|
|
446
|
+
"#3b5bdb",
|
|
447
|
+
"#364fc7"
|
|
448
|
+
],
|
|
449
|
+
blue: [
|
|
450
|
+
"#e7f5ff",
|
|
451
|
+
"#d0ebff",
|
|
452
|
+
"#a5d8ff",
|
|
453
|
+
"#74c0fc",
|
|
454
|
+
"#4dabf7",
|
|
455
|
+
"#339af0",
|
|
456
|
+
"#228be6",
|
|
457
|
+
"#1c7ed6",
|
|
458
|
+
"#1971c2",
|
|
459
|
+
"#1864ab"
|
|
460
|
+
],
|
|
461
|
+
cyan: [
|
|
462
|
+
"#e3fafc",
|
|
463
|
+
"#c5f6fa",
|
|
464
|
+
"#99e9f2",
|
|
465
|
+
"#66d9e8",
|
|
466
|
+
"#3bc9db",
|
|
467
|
+
"#22b8cf",
|
|
468
|
+
"#15aabf",
|
|
469
|
+
"#1098ad",
|
|
470
|
+
"#0c8599",
|
|
471
|
+
"#0b7285"
|
|
472
|
+
],
|
|
473
|
+
teal: [
|
|
474
|
+
"#e6fcf5",
|
|
475
|
+
"#c3fae8",
|
|
476
|
+
"#96f2d7",
|
|
477
|
+
"#63e6be",
|
|
478
|
+
"#38d9a9",
|
|
479
|
+
"#20c997",
|
|
480
|
+
"#12b886",
|
|
481
|
+
"#0ca678",
|
|
482
|
+
"#099268",
|
|
483
|
+
"#087f5b"
|
|
484
|
+
],
|
|
485
|
+
green: [
|
|
486
|
+
"#ebfbee",
|
|
487
|
+
"#d3f9d8",
|
|
488
|
+
"#b2f2bb",
|
|
489
|
+
"#8ce99a",
|
|
490
|
+
"#69db7c",
|
|
491
|
+
"#51cf66",
|
|
492
|
+
"#40c057",
|
|
493
|
+
"#37b24d",
|
|
494
|
+
"#2f9e44",
|
|
495
|
+
"#2b8a3e"
|
|
496
|
+
],
|
|
497
|
+
lime: [
|
|
498
|
+
"#f4fce3",
|
|
499
|
+
"#e9fac8",
|
|
500
|
+
"#d8f5a2",
|
|
501
|
+
"#c0eb75",
|
|
502
|
+
"#a9e34b",
|
|
503
|
+
"#94d82d",
|
|
504
|
+
"#82c91e",
|
|
505
|
+
"#74b816",
|
|
506
|
+
"#66a80f",
|
|
507
|
+
"#5c940d"
|
|
508
|
+
],
|
|
509
|
+
yellow: [
|
|
510
|
+
"#fff9db",
|
|
511
|
+
"#fff3bf",
|
|
512
|
+
"#ffec99",
|
|
513
|
+
"#ffe066",
|
|
514
|
+
"#ffd43b",
|
|
515
|
+
"#fcc419",
|
|
516
|
+
"#fab005",
|
|
517
|
+
"#f59f00",
|
|
518
|
+
"#f08c00",
|
|
519
|
+
"#e67700"
|
|
520
|
+
],
|
|
521
|
+
orange: [
|
|
522
|
+
"#fff4e6",
|
|
523
|
+
"#ffe8cc",
|
|
524
|
+
"#ffd8a8",
|
|
525
|
+
"#ffc078",
|
|
526
|
+
"#ffa94d",
|
|
527
|
+
"#ff922b",
|
|
528
|
+
"#fd7e14",
|
|
529
|
+
"#f76707",
|
|
530
|
+
"#e8590c",
|
|
531
|
+
"#d9480f"
|
|
532
|
+
]
|
|
533
|
+
};
|
|
534
|
+
|
|
535
|
+
// src/colors.ts
|
|
536
|
+
var COLOR_OUTLINE_CONTRAST_THRESHOLD = 240;
|
|
537
|
+
var pick = (source, keys) => {
|
|
538
|
+
return keys.reduce((acc, key) => {
|
|
539
|
+
if (key in source) {
|
|
540
|
+
acc[key] = source[key];
|
|
541
|
+
}
|
|
542
|
+
return acc;
|
|
543
|
+
}, {});
|
|
544
|
+
};
|
|
545
|
+
var MAX_CUSTOM_COLORS_USED_IN_CANVAS = 5;
|
|
546
|
+
var COLORS_PER_ROW = 5;
|
|
547
|
+
var DEFAULT_CHART_COLOR_INDEX = 4;
|
|
548
|
+
var DEFAULT_ELEMENT_STROKE_COLOR_INDEX = 4;
|
|
549
|
+
var DEFAULT_ELEMENT_BACKGROUND_COLOR_INDEX = 1;
|
|
550
|
+
var ELEMENTS_PALETTE_SHADE_INDEXES = [0, 2, 4, 6, 8];
|
|
551
|
+
var CANVAS_PALETTE_SHADE_INDEXES = [0, 1, 2, 3, 4];
|
|
552
|
+
var getSpecificColorShades = (color, indexArr) => {
|
|
553
|
+
return indexArr.map((index) => open_color_default[color][index]);
|
|
554
|
+
};
|
|
555
|
+
var COLOR_PALETTE = {
|
|
556
|
+
transparent: "transparent",
|
|
557
|
+
black: "#1e1e1e",
|
|
558
|
+
white: "#ffffff",
|
|
559
|
+
// open-colors
|
|
560
|
+
gray: getSpecificColorShades("gray", ELEMENTS_PALETTE_SHADE_INDEXES),
|
|
561
|
+
red: getSpecificColorShades("red", ELEMENTS_PALETTE_SHADE_INDEXES),
|
|
562
|
+
pink: getSpecificColorShades("pink", ELEMENTS_PALETTE_SHADE_INDEXES),
|
|
563
|
+
grape: getSpecificColorShades("grape", ELEMENTS_PALETTE_SHADE_INDEXES),
|
|
564
|
+
violet: getSpecificColorShades("violet", ELEMENTS_PALETTE_SHADE_INDEXES),
|
|
565
|
+
blue: getSpecificColorShades("blue", ELEMENTS_PALETTE_SHADE_INDEXES),
|
|
566
|
+
cyan: getSpecificColorShades("cyan", ELEMENTS_PALETTE_SHADE_INDEXES),
|
|
567
|
+
teal: getSpecificColorShades("teal", ELEMENTS_PALETTE_SHADE_INDEXES),
|
|
568
|
+
green: getSpecificColorShades("green", ELEMENTS_PALETTE_SHADE_INDEXES),
|
|
569
|
+
yellow: getSpecificColorShades("yellow", ELEMENTS_PALETTE_SHADE_INDEXES),
|
|
570
|
+
orange: getSpecificColorShades("orange", ELEMENTS_PALETTE_SHADE_INDEXES),
|
|
571
|
+
// radix bronze shades 3,5,7,9,11
|
|
572
|
+
bronze: ["#f8f1ee", "#eaddd7", "#d2bab0", "#a18072", "#846358"]
|
|
573
|
+
};
|
|
574
|
+
var COMMON_ELEMENT_SHADES = pick(COLOR_PALETTE, [
|
|
575
|
+
"cyan",
|
|
576
|
+
"blue",
|
|
577
|
+
"violet",
|
|
578
|
+
"grape",
|
|
579
|
+
"pink",
|
|
580
|
+
"green",
|
|
581
|
+
"teal",
|
|
582
|
+
"yellow",
|
|
583
|
+
"orange",
|
|
584
|
+
"red"
|
|
585
|
+
]);
|
|
586
|
+
var DEFAULT_ELEMENT_STROKE_PICKS = [
|
|
587
|
+
COLOR_PALETTE.black,
|
|
588
|
+
COLOR_PALETTE.red[DEFAULT_ELEMENT_STROKE_COLOR_INDEX],
|
|
589
|
+
COLOR_PALETTE.green[DEFAULT_ELEMENT_STROKE_COLOR_INDEX],
|
|
590
|
+
COLOR_PALETTE.blue[DEFAULT_ELEMENT_STROKE_COLOR_INDEX],
|
|
591
|
+
COLOR_PALETTE.yellow[DEFAULT_ELEMENT_STROKE_COLOR_INDEX]
|
|
592
|
+
];
|
|
593
|
+
var DEFAULT_ELEMENT_BACKGROUND_PICKS = [
|
|
594
|
+
COLOR_PALETTE.transparent,
|
|
595
|
+
COLOR_PALETTE.red[DEFAULT_ELEMENT_BACKGROUND_COLOR_INDEX],
|
|
596
|
+
COLOR_PALETTE.green[DEFAULT_ELEMENT_BACKGROUND_COLOR_INDEX],
|
|
597
|
+
COLOR_PALETTE.blue[DEFAULT_ELEMENT_BACKGROUND_COLOR_INDEX],
|
|
598
|
+
COLOR_PALETTE.yellow[DEFAULT_ELEMENT_BACKGROUND_COLOR_INDEX]
|
|
599
|
+
];
|
|
600
|
+
var DEFAULT_CANVAS_BACKGROUND_PICKS = [
|
|
601
|
+
COLOR_PALETTE.white,
|
|
602
|
+
// radix slate2
|
|
603
|
+
"#f8f9fa",
|
|
604
|
+
// radix blue2
|
|
605
|
+
"#f5faff",
|
|
606
|
+
// radix yellow2
|
|
607
|
+
"#fffce8",
|
|
608
|
+
// radix bronze2
|
|
609
|
+
"#fdf8f6"
|
|
610
|
+
];
|
|
611
|
+
var DEFAULT_ELEMENT_STROKE_COLOR_PALETTE = {
|
|
612
|
+
// 1st row
|
|
613
|
+
transparent: COLOR_PALETTE.transparent,
|
|
614
|
+
white: COLOR_PALETTE.white,
|
|
615
|
+
gray: COLOR_PALETTE.gray,
|
|
616
|
+
black: COLOR_PALETTE.black,
|
|
617
|
+
bronze: COLOR_PALETTE.bronze,
|
|
618
|
+
// rest
|
|
619
|
+
...COMMON_ELEMENT_SHADES
|
|
620
|
+
};
|
|
621
|
+
var DEFAULT_ELEMENT_BACKGROUND_COLOR_PALETTE = {
|
|
622
|
+
transparent: COLOR_PALETTE.transparent,
|
|
623
|
+
white: COLOR_PALETTE.white,
|
|
624
|
+
gray: COLOR_PALETTE.gray,
|
|
625
|
+
black: COLOR_PALETTE.black,
|
|
626
|
+
bronze: COLOR_PALETTE.bronze,
|
|
627
|
+
...COMMON_ELEMENT_SHADES
|
|
628
|
+
};
|
|
629
|
+
var getAllColorsSpecificShade = (index) => [
|
|
630
|
+
// 2nd row
|
|
631
|
+
COLOR_PALETTE.cyan[index],
|
|
632
|
+
COLOR_PALETTE.blue[index],
|
|
633
|
+
COLOR_PALETTE.violet[index],
|
|
634
|
+
COLOR_PALETTE.grape[index],
|
|
635
|
+
COLOR_PALETTE.pink[index],
|
|
636
|
+
// 3rd row
|
|
637
|
+
COLOR_PALETTE.green[index],
|
|
638
|
+
COLOR_PALETTE.teal[index],
|
|
639
|
+
COLOR_PALETTE.yellow[index],
|
|
640
|
+
COLOR_PALETTE.orange[index],
|
|
641
|
+
COLOR_PALETTE.red[index]
|
|
642
|
+
];
|
|
643
|
+
var rgbToHex = (r, g, b) => `#${((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1)}`;
|
|
644
|
+
|
|
645
|
+
// src/constants.ts
|
|
646
|
+
init_define_import_meta_env();
|
|
647
|
+
var supportsResizeObserver = typeof window !== "undefined" && "ResizeObserver" in window;
|
|
648
|
+
var APP_NAME = "Excalidraw";
|
|
649
|
+
var TEXT_AUTOWRAP_THRESHOLD = 36;
|
|
650
|
+
var DRAGGING_THRESHOLD = 10;
|
|
651
|
+
var MINIMUM_ARROW_SIZE = 20;
|
|
652
|
+
var LINE_CONFIRM_THRESHOLD = 8;
|
|
653
|
+
var ELEMENT_SHIFT_TRANSLATE_AMOUNT = 5;
|
|
654
|
+
var ELEMENT_TRANSLATE_AMOUNT = 1;
|
|
655
|
+
var TEXT_TO_CENTER_SNAP_THRESHOLD = 30;
|
|
656
|
+
var SHIFT_LOCKING_ANGLE = Math.PI / 12;
|
|
657
|
+
var DEFAULT_LASER_COLOR = "red";
|
|
658
|
+
var CURSOR_TYPE = {
|
|
659
|
+
TEXT: "text",
|
|
660
|
+
CROSSHAIR: "crosshair",
|
|
661
|
+
GRABBING: "grabbing",
|
|
662
|
+
GRAB: "grab",
|
|
663
|
+
POINTER: "pointer",
|
|
664
|
+
MOVE: "move",
|
|
665
|
+
AUTO: ""
|
|
666
|
+
};
|
|
667
|
+
var POINTER_BUTTON = {
|
|
668
|
+
MAIN: 0,
|
|
669
|
+
WHEEL: 1,
|
|
670
|
+
SECONDARY: 2,
|
|
671
|
+
TOUCH: -1,
|
|
672
|
+
ERASER: 5
|
|
673
|
+
};
|
|
674
|
+
var POINTER_EVENTS = {
|
|
675
|
+
enabled: "all",
|
|
676
|
+
disabled: "none",
|
|
677
|
+
// asserted as any so it can be freely assigned to React Element
|
|
678
|
+
// "pointerEnvets" CSS prop
|
|
679
|
+
inheritFromUI: "var(--ui-pointerEvents)"
|
|
680
|
+
};
|
|
681
|
+
var EVENT = /* @__PURE__ */ ((EVENT2) => {
|
|
682
|
+
EVENT2["COPY"] = "copy";
|
|
683
|
+
EVENT2["PASTE"] = "paste";
|
|
684
|
+
EVENT2["CUT"] = "cut";
|
|
685
|
+
EVENT2["KEYDOWN"] = "keydown";
|
|
686
|
+
EVENT2["KEYUP"] = "keyup";
|
|
687
|
+
EVENT2["MOUSE_MOVE"] = "mousemove";
|
|
688
|
+
EVENT2["RESIZE"] = "resize";
|
|
689
|
+
EVENT2["UNLOAD"] = "unload";
|
|
690
|
+
EVENT2["FOCUS"] = "focus";
|
|
691
|
+
EVENT2["BLUR"] = "blur";
|
|
692
|
+
EVENT2["DRAG_OVER"] = "dragover";
|
|
693
|
+
EVENT2["DROP"] = "drop";
|
|
694
|
+
EVENT2["GESTURE_END"] = "gestureend";
|
|
695
|
+
EVENT2["BEFORE_UNLOAD"] = "beforeunload";
|
|
696
|
+
EVENT2["GESTURE_START"] = "gesturestart";
|
|
697
|
+
EVENT2["GESTURE_CHANGE"] = "gesturechange";
|
|
698
|
+
EVENT2["POINTER_MOVE"] = "pointermove";
|
|
699
|
+
EVENT2["POINTER_DOWN"] = "pointerdown";
|
|
700
|
+
EVENT2["POINTER_UP"] = "pointerup";
|
|
701
|
+
EVENT2["STATE_CHANGE"] = "statechange";
|
|
702
|
+
EVENT2["WHEEL"] = "wheel";
|
|
703
|
+
EVENT2["TOUCH_START"] = "touchstart";
|
|
704
|
+
EVENT2["TOUCH_END"] = "touchend";
|
|
705
|
+
EVENT2["HASHCHANGE"] = "hashchange";
|
|
706
|
+
EVENT2["VISIBILITY_CHANGE"] = "visibilitychange";
|
|
707
|
+
EVENT2["SCROLL"] = "scroll";
|
|
708
|
+
EVENT2["EXCALIDRAW_LINK"] = "excalidraw-link";
|
|
709
|
+
EVENT2["MENU_ITEM_SELECT"] = "menu.itemSelect";
|
|
710
|
+
EVENT2["MESSAGE"] = "message";
|
|
711
|
+
EVENT2["FULLSCREENCHANGE"] = "fullscreenchange";
|
|
712
|
+
return EVENT2;
|
|
713
|
+
})(EVENT || {});
|
|
714
|
+
var YOUTUBE_STATES = {
|
|
715
|
+
UNSTARTED: -1,
|
|
716
|
+
ENDED: 0,
|
|
717
|
+
PLAYING: 1,
|
|
718
|
+
PAUSED: 2,
|
|
719
|
+
BUFFERING: 3,
|
|
720
|
+
CUED: 5
|
|
721
|
+
};
|
|
722
|
+
var ENV = {
|
|
723
|
+
TEST: "test",
|
|
724
|
+
DEVELOPMENT: "development",
|
|
725
|
+
PRODUCTION: "production"
|
|
726
|
+
};
|
|
727
|
+
var CLASSES = {
|
|
728
|
+
SIDEBAR: "sidebar",
|
|
729
|
+
SHAPE_ACTIONS_MENU: "App-menu__left",
|
|
730
|
+
ZOOM_ACTIONS: "zoom-actions",
|
|
731
|
+
SEARCH_MENU_INPUT_WRAPPER: "layer-ui__search-inputWrapper",
|
|
732
|
+
CONVERT_ELEMENT_TYPE_POPUP: "ConvertElementTypePopup",
|
|
733
|
+
SHAPE_ACTIONS_THEME_SCOPE: "shape-actions-theme-scope",
|
|
734
|
+
FRAME_NAME: "frame-name"
|
|
735
|
+
};
|
|
736
|
+
var FONT_SIZES = {
|
|
737
|
+
sm: 16,
|
|
738
|
+
md: 20,
|
|
739
|
+
lg: 28,
|
|
740
|
+
xl: 36
|
|
741
|
+
};
|
|
742
|
+
var CJK_HAND_DRAWN_FALLBACK_FONT = "Xiaolai";
|
|
743
|
+
var WINDOWS_EMOJI_FALLBACK_FONT = "Segoe UI Emoji";
|
|
744
|
+
var FONT_FAMILY = {
|
|
745
|
+
Virgil: 1,
|
|
746
|
+
Helvetica: 2,
|
|
747
|
+
Cascadia: 3,
|
|
748
|
+
// leave 4 unused as it was historically used for Assistant (which we don't use anymore) or custom font (Obsidian)
|
|
749
|
+
Excalifont: 5,
|
|
750
|
+
Nunito: 6,
|
|
751
|
+
"Lilita One": 7,
|
|
752
|
+
"Comic Shanns": 8,
|
|
753
|
+
"Liberation Sans": 9,
|
|
754
|
+
Assistant: 10
|
|
755
|
+
};
|
|
756
|
+
var SANS_SERIF_GENERIC_FONT = "sans-serif";
|
|
757
|
+
var MONOSPACE_GENERIC_FONT = "monospace";
|
|
758
|
+
var FONT_FAMILY_GENERIC_FALLBACKS = {
|
|
759
|
+
[SANS_SERIF_GENERIC_FONT]: 998,
|
|
760
|
+
[MONOSPACE_GENERIC_FONT]: 999
|
|
761
|
+
};
|
|
762
|
+
var FONT_FAMILY_FALLBACKS = {
|
|
763
|
+
[CJK_HAND_DRAWN_FALLBACK_FONT]: 100,
|
|
764
|
+
...FONT_FAMILY_GENERIC_FALLBACKS,
|
|
765
|
+
[WINDOWS_EMOJI_FALLBACK_FONT]: 1e3
|
|
766
|
+
};
|
|
767
|
+
function getGenericFontFamilyFallback(fontFamily) {
|
|
768
|
+
switch (fontFamily) {
|
|
769
|
+
case FONT_FAMILY.Cascadia:
|
|
770
|
+
case FONT_FAMILY["Comic Shanns"]:
|
|
771
|
+
return MONOSPACE_GENERIC_FONT;
|
|
772
|
+
default:
|
|
773
|
+
return SANS_SERIF_GENERIC_FONT;
|
|
774
|
+
}
|
|
775
|
+
}
|
|
776
|
+
var getFontFamilyFallbacks = (fontFamily) => {
|
|
777
|
+
const genericFallbackFont = getGenericFontFamilyFallback(fontFamily);
|
|
778
|
+
switch (fontFamily) {
|
|
779
|
+
case FONT_FAMILY.Excalifont:
|
|
780
|
+
return [
|
|
781
|
+
CJK_HAND_DRAWN_FALLBACK_FONT,
|
|
782
|
+
genericFallbackFont,
|
|
783
|
+
WINDOWS_EMOJI_FALLBACK_FONT
|
|
784
|
+
];
|
|
785
|
+
default:
|
|
786
|
+
return [genericFallbackFont, WINDOWS_EMOJI_FALLBACK_FONT];
|
|
787
|
+
}
|
|
788
|
+
};
|
|
789
|
+
var THEME = {
|
|
790
|
+
LIGHT: "light",
|
|
791
|
+
DARK: "dark"
|
|
792
|
+
};
|
|
793
|
+
var FRAME_STYLE = {
|
|
794
|
+
strokeColor: "#bbb",
|
|
795
|
+
strokeWidth: 2,
|
|
796
|
+
strokeStyle: "solid",
|
|
797
|
+
fillStyle: "solid",
|
|
798
|
+
roughness: 0,
|
|
799
|
+
roundness: null,
|
|
800
|
+
backgroundColor: "transparent",
|
|
801
|
+
radius: 8,
|
|
802
|
+
nameOffsetY: 3,
|
|
803
|
+
nameColorLightTheme: "#999999",
|
|
804
|
+
nameColorDarkTheme: "#7a7a7a",
|
|
805
|
+
nameFontSize: 14,
|
|
806
|
+
nameLineHeight: 1.25
|
|
807
|
+
};
|
|
808
|
+
var MIN_FONT_SIZE = 1;
|
|
809
|
+
var DEFAULT_FONT_SIZE = 20;
|
|
810
|
+
var DEFAULT_FONT_FAMILY = FONT_FAMILY.Excalifont;
|
|
811
|
+
var DEFAULT_TEXT_ALIGN = "left";
|
|
812
|
+
var DEFAULT_VERTICAL_ALIGN = "top";
|
|
813
|
+
var DEFAULT_VERSION = "{version}";
|
|
814
|
+
var DEFAULT_TRANSFORM_HANDLE_SPACING = 2;
|
|
815
|
+
var SIDE_RESIZING_THRESHOLD = 2 * DEFAULT_TRANSFORM_HANDLE_SPACING;
|
|
816
|
+
var EPSILON = 1e-5;
|
|
817
|
+
var DEFAULT_COLLISION_THRESHOLD = 2 * SIDE_RESIZING_THRESHOLD - EPSILON;
|
|
818
|
+
var COLOR_WHITE = "#ffffff";
|
|
819
|
+
var COLOR_CHARCOAL_BLACK = "#1e1e1e";
|
|
820
|
+
var COLOR_VOICE_CALL = "#a2f1a6";
|
|
821
|
+
var CANVAS_ONLY_ACTIONS = ["selectAll"];
|
|
822
|
+
var DEFAULT_GRID_SIZE = 20;
|
|
823
|
+
var DEFAULT_GRID_STEP = 5;
|
|
824
|
+
var IMAGE_MIME_TYPES = {
|
|
825
|
+
svg: "image/svg+xml",
|
|
826
|
+
png: "image/png",
|
|
827
|
+
jpg: "image/jpeg",
|
|
828
|
+
gif: "image/gif",
|
|
829
|
+
webp: "image/webp",
|
|
830
|
+
bmp: "image/bmp",
|
|
831
|
+
ico: "image/x-icon",
|
|
832
|
+
avif: "image/avif",
|
|
833
|
+
jfif: "image/jfif"
|
|
834
|
+
};
|
|
835
|
+
var STRING_MIME_TYPES = {
|
|
836
|
+
text: "text/plain",
|
|
837
|
+
html: "text/html",
|
|
838
|
+
json: "application/json",
|
|
839
|
+
// excalidraw data
|
|
840
|
+
excalidraw: "application/vnd.excalidraw+json",
|
|
841
|
+
// LEGACY: fully-qualified library JSON data
|
|
842
|
+
excalidrawlib: "application/vnd.excalidrawlib+json",
|
|
843
|
+
// list of excalidraw library item ids
|
|
844
|
+
excalidrawlibIds: "application/vnd.excalidrawlib.ids+json"
|
|
845
|
+
};
|
|
846
|
+
var MIME_TYPES = {
|
|
847
|
+
...STRING_MIME_TYPES,
|
|
848
|
+
// image-encoded excalidraw data
|
|
849
|
+
"excalidraw.svg": "image/svg+xml",
|
|
850
|
+
"excalidraw.png": "image/png",
|
|
851
|
+
// binary
|
|
852
|
+
binary: "application/octet-stream",
|
|
853
|
+
// image
|
|
854
|
+
...IMAGE_MIME_TYPES
|
|
855
|
+
};
|
|
856
|
+
var ALLOWED_PASTE_MIME_TYPES = [
|
|
857
|
+
MIME_TYPES.text,
|
|
858
|
+
MIME_TYPES.html,
|
|
859
|
+
...Object.values(IMAGE_MIME_TYPES)
|
|
860
|
+
];
|
|
861
|
+
var EXPORT_IMAGE_TYPES = {
|
|
862
|
+
png: "png",
|
|
863
|
+
svg: "svg",
|
|
864
|
+
clipboard: "clipboard"
|
|
865
|
+
};
|
|
866
|
+
var EXPORT_DATA_TYPES = {
|
|
867
|
+
excalidraw: "excalidraw",
|
|
868
|
+
excalidrawClipboard: "excalidraw/clipboard",
|
|
869
|
+
excalidrawLibrary: "excalidrawlib",
|
|
870
|
+
excalidrawClipboardWithAPI: "excalidraw-api/clipboard"
|
|
871
|
+
};
|
|
872
|
+
var getExportSource = () => window.EXCALIDRAW_EXPORT_SOURCE || window.location.origin;
|
|
873
|
+
var IMAGE_RENDER_TIMEOUT = 500;
|
|
874
|
+
var TAP_TWICE_TIMEOUT = 300;
|
|
875
|
+
var TOUCH_CTX_MENU_TIMEOUT = 500;
|
|
876
|
+
var TITLE_TIMEOUT = 1e4;
|
|
877
|
+
var VERSION_TIMEOUT = 3e4;
|
|
878
|
+
var SCROLL_TIMEOUT = 100;
|
|
879
|
+
var ZOOM_STEP = 0.1;
|
|
880
|
+
var MIN_ZOOM = 0.1;
|
|
881
|
+
var MAX_ZOOM = 30;
|
|
882
|
+
var HYPERLINK_TOOLTIP_DELAY = 300;
|
|
883
|
+
var IDLE_THRESHOLD = 6e4;
|
|
884
|
+
var ACTIVE_THRESHOLD = 3e3;
|
|
885
|
+
var THEME_FILTER = "invert(93%) hue-rotate(180deg)";
|
|
886
|
+
var URL_QUERY_KEYS = {
|
|
887
|
+
addLibrary: "addLibrary"
|
|
888
|
+
};
|
|
889
|
+
var URL_HASH_KEYS = {
|
|
890
|
+
addLibrary: "addLibrary"
|
|
891
|
+
};
|
|
892
|
+
var DEFAULT_UI_OPTIONS = {
|
|
893
|
+
canvasActions: {
|
|
894
|
+
changeViewBackgroundColor: true,
|
|
895
|
+
clearCanvas: true,
|
|
896
|
+
export: { saveFileToDisk: true },
|
|
897
|
+
loadScene: true,
|
|
898
|
+
saveToActiveFile: true,
|
|
899
|
+
toggleTheme: null,
|
|
900
|
+
saveAsImage: true
|
|
901
|
+
},
|
|
902
|
+
tools: {
|
|
903
|
+
image: true
|
|
904
|
+
},
|
|
905
|
+
toolBar: {
|
|
906
|
+
lockEnabled: true,
|
|
907
|
+
moreToolsEnabled: true,
|
|
908
|
+
hintViewerEnabled: true
|
|
909
|
+
},
|
|
910
|
+
topLeftMenuEnabled: true,
|
|
911
|
+
libraryEnabled: true,
|
|
912
|
+
footer: {
|
|
913
|
+
helpEnabled: true
|
|
914
|
+
},
|
|
915
|
+
fontPicker: {
|
|
916
|
+
familyChangeEnabled: true
|
|
917
|
+
},
|
|
918
|
+
shapeControl: {
|
|
919
|
+
sloppinessChangeEnabled: true
|
|
920
|
+
},
|
|
921
|
+
viewModeControlEnabled: true,
|
|
922
|
+
hideAnnotationsControlEnabled: true,
|
|
923
|
+
undoRedoPosition: "footer",
|
|
924
|
+
swapTopMenuAndFooter: false
|
|
925
|
+
};
|
|
926
|
+
var MAX_DECIMALS_FOR_SVG_EXPORT = 2;
|
|
927
|
+
var EXPORT_SCALES = [1, 2, 3];
|
|
928
|
+
var DEFAULT_EXPORT_PADDING = 10;
|
|
929
|
+
var DEFAULT_MAX_IMAGE_WIDTH_OR_HEIGHT = 1440;
|
|
930
|
+
var MAX_ALLOWED_FILE_BYTES = 4 * 1024 * 1024;
|
|
931
|
+
var SVG_NS = "http://www.w3.org/2000/svg";
|
|
932
|
+
var SVG_DOCUMENT_PREAMBLE = `<?xml version="1.0" standalone="no"?>
|
|
933
|
+
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
|
934
|
+
`;
|
|
935
|
+
var ENCRYPTION_KEY_BITS = 128;
|
|
936
|
+
var VERSIONS = {
|
|
937
|
+
excalidraw: 2,
|
|
938
|
+
excalidrawLibrary: 2
|
|
939
|
+
};
|
|
940
|
+
var BOUND_TEXT_PADDING = 5;
|
|
941
|
+
var ARROW_LABEL_WIDTH_FRACTION = 0.7;
|
|
942
|
+
var ARROW_LABEL_FONT_SIZE_TO_MIN_WIDTH_RATIO = 11;
|
|
943
|
+
var VERTICAL_ALIGN = {
|
|
944
|
+
TOP: "top",
|
|
945
|
+
MIDDLE: "middle",
|
|
946
|
+
BOTTOM: "bottom"
|
|
947
|
+
};
|
|
948
|
+
var TEXT_ALIGN = {
|
|
949
|
+
LEFT: "left",
|
|
950
|
+
CENTER: "center",
|
|
951
|
+
RIGHT: "right"
|
|
952
|
+
};
|
|
953
|
+
var ELEMENT_READY_TO_ERASE_OPACITY = 20;
|
|
954
|
+
var DEFAULT_PROPORTIONAL_RADIUS = 0.25;
|
|
955
|
+
var DEFAULT_ADAPTIVE_RADIUS = 32;
|
|
956
|
+
var ROUNDNESS = {
|
|
957
|
+
// Used for legacy rounding (rectangles), which currently works the same
|
|
958
|
+
// as PROPORTIONAL_RADIUS, but we need to differentiate for UI purposes and
|
|
959
|
+
// forwards-compat.
|
|
960
|
+
LEGACY: 1,
|
|
961
|
+
// Used for linear elements & diamonds
|
|
962
|
+
PROPORTIONAL_RADIUS: 2,
|
|
963
|
+
// Current default algorithm for rectangles, using fixed pixel radius.
|
|
964
|
+
// It's working similarly to a regular border-radius, but attemps to make
|
|
965
|
+
// radius visually similar across differnt element sizes, especially
|
|
966
|
+
// very large and very small elements.
|
|
967
|
+
//
|
|
968
|
+
// NOTE right now we don't allow configuration and use a constant radius
|
|
969
|
+
// (see DEFAULT_ADAPTIVE_RADIUS constant)
|
|
970
|
+
ADAPTIVE_RADIUS: 3
|
|
971
|
+
};
|
|
972
|
+
var ROUGHNESS = {
|
|
973
|
+
architect: 0,
|
|
974
|
+
artist: 1,
|
|
975
|
+
cartoonist: 2
|
|
976
|
+
};
|
|
977
|
+
var STROKE_WIDTH = {
|
|
978
|
+
thin: 1,
|
|
979
|
+
bold: 2,
|
|
980
|
+
extraBold: 4
|
|
981
|
+
};
|
|
982
|
+
var DEFAULT_ELEMENT_PROPS = {
|
|
983
|
+
strokeColor: COLOR_PALETTE.black,
|
|
984
|
+
backgroundColor: COLOR_PALETTE.transparent,
|
|
985
|
+
fillStyle: "solid",
|
|
986
|
+
strokeWidth: 2,
|
|
987
|
+
strokeStyle: "solid",
|
|
988
|
+
roughness: ROUGHNESS.artist,
|
|
989
|
+
opacity: 100,
|
|
990
|
+
locked: false
|
|
991
|
+
};
|
|
992
|
+
var LIBRARY_SIDEBAR_TAB = "library";
|
|
993
|
+
var CANVAS_SEARCH_TAB = "search";
|
|
994
|
+
var DEFAULT_SIDEBAR = {
|
|
995
|
+
name: "default",
|
|
996
|
+
defaultTab: LIBRARY_SIDEBAR_TAB
|
|
997
|
+
};
|
|
998
|
+
var LIBRARY_DISABLED_TYPES = /* @__PURE__ */ new Set([
|
|
999
|
+
"iframe",
|
|
1000
|
+
"embeddable",
|
|
1001
|
+
"image"
|
|
1002
|
+
]);
|
|
1003
|
+
var TOOL_TYPE = {
|
|
1004
|
+
selection: "selection",
|
|
1005
|
+
lasso: "lasso",
|
|
1006
|
+
rectangle: "rectangle",
|
|
1007
|
+
diamond: "diamond",
|
|
1008
|
+
ellipse: "ellipse",
|
|
1009
|
+
arrow: "arrow",
|
|
1010
|
+
line: "line",
|
|
1011
|
+
freedraw: "freedraw",
|
|
1012
|
+
text: "text",
|
|
1013
|
+
image: "image",
|
|
1014
|
+
eraser: "eraser",
|
|
1015
|
+
hand: "hand",
|
|
1016
|
+
frame: "frame",
|
|
1017
|
+
magicframe: "magicframe",
|
|
1018
|
+
embeddable: "embeddable",
|
|
1019
|
+
laser: "laser"
|
|
1020
|
+
};
|
|
1021
|
+
var EDITOR_LS_KEYS = {
|
|
1022
|
+
OAI_API_KEY: "excalidraw-oai-api-key",
|
|
1023
|
+
// legacy naming (non)scheme
|
|
1024
|
+
MERMAID_TO_EXCALIDRAW: "mermaid-to-excalidraw",
|
|
1025
|
+
PUBLISH_LIBRARY: "publish-library-data"
|
|
1026
|
+
};
|
|
1027
|
+
var DEFAULT_FILENAME = "Untitled";
|
|
1028
|
+
var STATS_PANELS = { generalStats: 1, elementProperties: 2 };
|
|
1029
|
+
var MIN_WIDTH_OR_HEIGHT = 1;
|
|
1030
|
+
var ARROW_TYPE = {
|
|
1031
|
+
sharp: "sharp",
|
|
1032
|
+
round: "round",
|
|
1033
|
+
elbow: "elbow"
|
|
1034
|
+
};
|
|
1035
|
+
var DEFAULT_REDUCED_GLOBAL_ALPHA = 0.3;
|
|
1036
|
+
var ELEMENT_LINK_KEY = "element";
|
|
1037
|
+
var ORIG_ID = Symbol.for("__test__originalId__");
|
|
1038
|
+
var UserIdleState = /* @__PURE__ */ ((UserIdleState2) => {
|
|
1039
|
+
UserIdleState2["ACTIVE"] = "active";
|
|
1040
|
+
UserIdleState2["AWAY"] = "away";
|
|
1041
|
+
UserIdleState2["IDLE"] = "idle";
|
|
1042
|
+
return UserIdleState2;
|
|
1043
|
+
})(UserIdleState || {});
|
|
1044
|
+
var LINE_POLYGON_POINT_MERGE_DISTANCE = 20;
|
|
1045
|
+
var DOUBLE_TAP_POSITION_THRESHOLD = 35;
|
|
1046
|
+
var BIND_MODE_TIMEOUT = 700;
|
|
1047
|
+
var MOBILE_ACTION_BUTTON_BG = {
|
|
1048
|
+
background: "var(--mobile-action-button-bg)"
|
|
1049
|
+
};
|
|
1050
|
+
|
|
1051
|
+
// src/font-metadata.ts
|
|
1052
|
+
init_define_import_meta_env();
|
|
1053
|
+
var FONT_METADATA = {
|
|
1054
|
+
[FONT_FAMILY.Excalifont]: {
|
|
1055
|
+
metrics: {
|
|
1056
|
+
unitsPerEm: 1e3,
|
|
1057
|
+
ascender: 886,
|
|
1058
|
+
descender: -374,
|
|
1059
|
+
lineHeight: 1.25
|
|
1060
|
+
}
|
|
1061
|
+
},
|
|
1062
|
+
[FONT_FAMILY.Nunito]: {
|
|
1063
|
+
metrics: {
|
|
1064
|
+
unitsPerEm: 1e3,
|
|
1065
|
+
ascender: 1011,
|
|
1066
|
+
descender: -353,
|
|
1067
|
+
lineHeight: 1.25
|
|
1068
|
+
}
|
|
1069
|
+
},
|
|
1070
|
+
[FONT_FAMILY["Lilita One"]]: {
|
|
1071
|
+
metrics: {
|
|
1072
|
+
unitsPerEm: 1e3,
|
|
1073
|
+
ascender: 923,
|
|
1074
|
+
descender: -220,
|
|
1075
|
+
lineHeight: 1.15
|
|
1076
|
+
}
|
|
1077
|
+
},
|
|
1078
|
+
[FONT_FAMILY["Comic Shanns"]]: {
|
|
1079
|
+
metrics: {
|
|
1080
|
+
unitsPerEm: 1e3,
|
|
1081
|
+
ascender: 750,
|
|
1082
|
+
descender: -250,
|
|
1083
|
+
lineHeight: 1.25
|
|
1084
|
+
}
|
|
1085
|
+
},
|
|
1086
|
+
[FONT_FAMILY.Virgil]: {
|
|
1087
|
+
metrics: {
|
|
1088
|
+
unitsPerEm: 1e3,
|
|
1089
|
+
ascender: 886,
|
|
1090
|
+
descender: -374,
|
|
1091
|
+
lineHeight: 1.25
|
|
1092
|
+
},
|
|
1093
|
+
deprecated: true
|
|
1094
|
+
},
|
|
1095
|
+
[FONT_FAMILY.Helvetica]: {
|
|
1096
|
+
metrics: {
|
|
1097
|
+
unitsPerEm: 2048,
|
|
1098
|
+
ascender: 1577,
|
|
1099
|
+
descender: -471,
|
|
1100
|
+
lineHeight: 1.15
|
|
1101
|
+
},
|
|
1102
|
+
deprecated: true,
|
|
1103
|
+
local: true
|
|
1104
|
+
},
|
|
1105
|
+
[FONT_FAMILY.Cascadia]: {
|
|
1106
|
+
metrics: {
|
|
1107
|
+
unitsPerEm: 2048,
|
|
1108
|
+
ascender: 1900,
|
|
1109
|
+
descender: -480,
|
|
1110
|
+
lineHeight: 1.2
|
|
1111
|
+
},
|
|
1112
|
+
deprecated: true
|
|
1113
|
+
},
|
|
1114
|
+
[FONT_FAMILY["Liberation Sans"]]: {
|
|
1115
|
+
metrics: {
|
|
1116
|
+
unitsPerEm: 2048,
|
|
1117
|
+
ascender: 1854,
|
|
1118
|
+
descender: -434,
|
|
1119
|
+
lineHeight: 1.15
|
|
1120
|
+
},
|
|
1121
|
+
private: true
|
|
1122
|
+
},
|
|
1123
|
+
[FONT_FAMILY.Assistant]: {
|
|
1124
|
+
metrics: {
|
|
1125
|
+
unitsPerEm: 2048,
|
|
1126
|
+
ascender: 1021,
|
|
1127
|
+
descender: -287,
|
|
1128
|
+
lineHeight: 1.25
|
|
1129
|
+
},
|
|
1130
|
+
private: true
|
|
1131
|
+
},
|
|
1132
|
+
[FONT_FAMILY_FALLBACKS.Xiaolai]: {
|
|
1133
|
+
metrics: {
|
|
1134
|
+
unitsPerEm: 1e3,
|
|
1135
|
+
ascender: 880,
|
|
1136
|
+
descender: -144,
|
|
1137
|
+
lineHeight: 1.25
|
|
1138
|
+
},
|
|
1139
|
+
fallback: true
|
|
1140
|
+
},
|
|
1141
|
+
[FONT_FAMILY_FALLBACKS["Segoe UI Emoji"]]: {
|
|
1142
|
+
metrics: {
|
|
1143
|
+
// reusing Excalifont metrics
|
|
1144
|
+
unitsPerEm: 1e3,
|
|
1145
|
+
ascender: 886,
|
|
1146
|
+
descender: -374,
|
|
1147
|
+
lineHeight: 1.25
|
|
1148
|
+
},
|
|
1149
|
+
local: true,
|
|
1150
|
+
fallback: true
|
|
1151
|
+
}
|
|
1152
|
+
};
|
|
1153
|
+
var GOOGLE_FONTS_RANGES = {
|
|
1154
|
+
LATIN: "U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD",
|
|
1155
|
+
LATIN_EXT: "U+0100-02AF, U+0304, U+0308, U+0329, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF",
|
|
1156
|
+
CYRILIC_EXT: "U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F",
|
|
1157
|
+
CYRILIC: "U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116",
|
|
1158
|
+
VIETNAMESE: "U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB"
|
|
1159
|
+
};
|
|
1160
|
+
var LOCAL_FONT_PROTOCOL = "local:";
|
|
1161
|
+
var getVerticalOffset = (fontFamily, fontSize, lineHeightPx) => {
|
|
1162
|
+
const { unitsPerEm, ascender, descender } = FONT_METADATA[fontFamily]?.metrics || FONT_METADATA[FONT_FAMILY.Excalifont].metrics;
|
|
1163
|
+
const fontSizeEm = fontSize / unitsPerEm;
|
|
1164
|
+
const lineGap = (lineHeightPx - fontSizeEm * ascender + fontSizeEm * descender) / 2;
|
|
1165
|
+
const verticalOffset = fontSizeEm * ascender + lineGap;
|
|
1166
|
+
return verticalOffset;
|
|
1167
|
+
};
|
|
1168
|
+
var getLineHeight = (fontFamily) => {
|
|
1169
|
+
const { lineHeight } = FONT_METADATA[fontFamily]?.metrics || FONT_METADATA[FONT_FAMILY.Excalifont].metrics;
|
|
1170
|
+
return lineHeight;
|
|
1171
|
+
};
|
|
1172
|
+
|
|
1173
|
+
// src/queue.ts
|
|
1174
|
+
init_define_import_meta_env();
|
|
1175
|
+
var Queue = class {
|
|
1176
|
+
jobs = [];
|
|
1177
|
+
running = false;
|
|
1178
|
+
tick() {
|
|
1179
|
+
if (this.running) {
|
|
1180
|
+
return;
|
|
1181
|
+
}
|
|
1182
|
+
const job = this.jobs.shift();
|
|
1183
|
+
if (job) {
|
|
1184
|
+
this.running = true;
|
|
1185
|
+
job.promise.resolve(
|
|
1186
|
+
promiseTry(job.jobFactory, ...job.args).finally(() => {
|
|
1187
|
+
this.running = false;
|
|
1188
|
+
this.tick();
|
|
1189
|
+
})
|
|
1190
|
+
);
|
|
1191
|
+
} else {
|
|
1192
|
+
this.running = false;
|
|
1193
|
+
}
|
|
1194
|
+
}
|
|
1195
|
+
push(jobFactory, ...args) {
|
|
1196
|
+
const promise = resolvablePromise();
|
|
1197
|
+
this.jobs.push({ jobFactory, promise, args });
|
|
1198
|
+
this.tick();
|
|
1199
|
+
return promise;
|
|
1200
|
+
}
|
|
1201
|
+
};
|
|
1202
|
+
|
|
1203
|
+
// src/keys.ts
|
|
1204
|
+
init_define_import_meta_env();
|
|
1205
|
+
|
|
1206
|
+
// src/editorInterface.ts
|
|
1207
|
+
init_define_import_meta_env();
|
|
1208
|
+
var DESKTOP_UI_MODE_STORAGE_KEY = "excalidraw.desktopUIMode";
|
|
1209
|
+
var MQ_MAX_MOBILE = 599;
|
|
1210
|
+
var MQ_MAX_WIDTH_LANDSCAPE = 1e3;
|
|
1211
|
+
var MQ_MAX_HEIGHT_LANDSCAPE = 500;
|
|
1212
|
+
var MQ_MIN_TABLET = MQ_MAX_MOBILE + 1;
|
|
1213
|
+
var MQ_MAX_TABLET = 1400;
|
|
1214
|
+
var MQ_MIN_WIDTH_DESKTOP = 1440;
|
|
1215
|
+
var MQ_RIGHT_SIDEBAR_MIN_WIDTH = 1229;
|
|
1216
|
+
var isDarwin = /Mac|iPod|iPhone|iPad/.test(navigator.platform);
|
|
1217
|
+
var isWindows = /^Win/.test(navigator.platform);
|
|
1218
|
+
var isAndroid = /\b(android)\b/i.test(navigator.userAgent);
|
|
1219
|
+
var isFirefox = typeof window !== "undefined" && "netscape" in window && navigator.userAgent.indexOf("rv:") > 1 && navigator.userAgent.indexOf("Gecko") > 1;
|
|
1220
|
+
var isChrome = navigator.userAgent.indexOf("Chrome") !== -1;
|
|
1221
|
+
var isSafari = !isChrome && navigator.userAgent.indexOf("Safari") !== -1;
|
|
1222
|
+
var isIOS = /iPad|iPhone/i.test(navigator.platform) || // iPadOS 13+
|
|
1223
|
+
navigator.userAgent.includes("Mac") && "ontouchend" in document;
|
|
1224
|
+
var isBrave = () => navigator.brave?.isBrave?.name === "isBrave";
|
|
1225
|
+
var isMobileBreakpoint = (width, height) => {
|
|
1226
|
+
return width <= MQ_MAX_MOBILE || height < MQ_MAX_HEIGHT_LANDSCAPE && width < MQ_MAX_WIDTH_LANDSCAPE;
|
|
1227
|
+
};
|
|
1228
|
+
var isTabletBreakpoint = (editorWidth, editorHeight) => {
|
|
1229
|
+
const minSide = Math.min(editorWidth, editorHeight);
|
|
1230
|
+
const maxSide = Math.max(editorWidth, editorHeight);
|
|
1231
|
+
return minSide >= MQ_MIN_TABLET && maxSide <= MQ_MAX_TABLET;
|
|
1232
|
+
};
|
|
1233
|
+
var isMobileOrTablet = () => {
|
|
1234
|
+
const ua = navigator.userAgent || "";
|
|
1235
|
+
const platform = navigator.platform || "";
|
|
1236
|
+
const uaData = navigator.userAgentData;
|
|
1237
|
+
if (uaData) {
|
|
1238
|
+
const plat = (uaData.platform || "").toLowerCase();
|
|
1239
|
+
const isDesktopOS = plat === "windows" || plat === "macos" || plat === "linux" || plat === "chrome os";
|
|
1240
|
+
if (uaData.mobile === true) {
|
|
1241
|
+
return true;
|
|
1242
|
+
}
|
|
1243
|
+
if (uaData.mobile === false && plat === "android") {
|
|
1244
|
+
const looksTouchTablet = matchMedia?.("(hover: none)").matches && matchMedia?.("(pointer: coarse)").matches;
|
|
1245
|
+
return looksTouchTablet;
|
|
1246
|
+
}
|
|
1247
|
+
if (isDesktopOS) {
|
|
1248
|
+
return false;
|
|
1249
|
+
}
|
|
1250
|
+
}
|
|
1251
|
+
if (isIOS) {
|
|
1252
|
+
return true;
|
|
1253
|
+
}
|
|
1254
|
+
if (isAndroid) {
|
|
1255
|
+
const isAndroidPhone = /Mobile/i.test(ua);
|
|
1256
|
+
const isAndroidTablet = !isAndroidPhone;
|
|
1257
|
+
if (isAndroidPhone || isAndroidTablet) {
|
|
1258
|
+
const looksTouchTablet = matchMedia?.("(hover: none)").matches && matchMedia?.("(pointer: coarse)").matches;
|
|
1259
|
+
return looksTouchTablet;
|
|
1260
|
+
}
|
|
1261
|
+
}
|
|
1262
|
+
const looksDesktopPlatform = /Win|Linux|CrOS|Mac/.test(platform) || /Windows NT|X11|CrOS|Macintosh/.test(ua);
|
|
1263
|
+
if (looksDesktopPlatform) {
|
|
1264
|
+
return false;
|
|
1265
|
+
}
|
|
1266
|
+
return false;
|
|
1267
|
+
};
|
|
1268
|
+
var getFormFactor = (editorWidth, editorHeight) => {
|
|
1269
|
+
if (isMobileBreakpoint(editorWidth, editorHeight)) {
|
|
1270
|
+
return "phone";
|
|
1271
|
+
}
|
|
1272
|
+
if (isTabletBreakpoint(editorWidth, editorHeight)) {
|
|
1273
|
+
return "tablet";
|
|
1274
|
+
}
|
|
1275
|
+
return "desktop";
|
|
1276
|
+
};
|
|
1277
|
+
var deriveStylesPanelMode = (editorInterface) => {
|
|
1278
|
+
if (editorInterface.formFactor === "phone") {
|
|
1279
|
+
return "mobile";
|
|
1280
|
+
}
|
|
1281
|
+
if (editorInterface.formFactor === "tablet") {
|
|
1282
|
+
return "compact";
|
|
1283
|
+
}
|
|
1284
|
+
return editorInterface.desktopUIMode;
|
|
1285
|
+
};
|
|
1286
|
+
var createUserAgentDescriptor = (userAgentString) => {
|
|
1287
|
+
const normalizedUA = userAgentString ?? "";
|
|
1288
|
+
let platform = "unknown";
|
|
1289
|
+
if (isIOS) {
|
|
1290
|
+
platform = "ios";
|
|
1291
|
+
} else if (isAndroid) {
|
|
1292
|
+
platform = "android";
|
|
1293
|
+
} else if (normalizedUA) {
|
|
1294
|
+
platform = "other";
|
|
1295
|
+
}
|
|
1296
|
+
return {
|
|
1297
|
+
isMobileDevice: isMobileOrTablet(),
|
|
1298
|
+
platform
|
|
1299
|
+
};
|
|
1300
|
+
};
|
|
1301
|
+
var loadDesktopUIModePreference = () => {
|
|
1302
|
+
if (typeof window === "undefined") {
|
|
1303
|
+
return null;
|
|
1304
|
+
}
|
|
1305
|
+
try {
|
|
1306
|
+
const stored = window.localStorage.getItem(DESKTOP_UI_MODE_STORAGE_KEY);
|
|
1307
|
+
if (stored === "compact" || stored === "full") {
|
|
1308
|
+
return stored;
|
|
1309
|
+
}
|
|
1310
|
+
} catch (error) {
|
|
1311
|
+
}
|
|
1312
|
+
return null;
|
|
1313
|
+
};
|
|
1314
|
+
var persistDesktopUIMode = (mode) => {
|
|
1315
|
+
if (typeof window === "undefined") {
|
|
1316
|
+
return;
|
|
1317
|
+
}
|
|
1318
|
+
try {
|
|
1319
|
+
window.localStorage.setItem(DESKTOP_UI_MODE_STORAGE_KEY, mode);
|
|
1320
|
+
} catch (error) {
|
|
1321
|
+
}
|
|
1322
|
+
};
|
|
1323
|
+
var setDesktopUIMode = (mode) => {
|
|
1324
|
+
if (mode !== "compact" && mode !== "full") {
|
|
1325
|
+
return;
|
|
1326
|
+
}
|
|
1327
|
+
persistDesktopUIMode(mode);
|
|
1328
|
+
return mode;
|
|
1329
|
+
};
|
|
1330
|
+
|
|
1331
|
+
// src/keys.ts
|
|
1332
|
+
var CODES = {
|
|
1333
|
+
EQUAL: "Equal",
|
|
1334
|
+
MINUS: "Minus",
|
|
1335
|
+
NUM_ADD: "NumpadAdd",
|
|
1336
|
+
NUM_SUBTRACT: "NumpadSubtract",
|
|
1337
|
+
NUM_ZERO: "Numpad0",
|
|
1338
|
+
BRACKET_RIGHT: "BracketRight",
|
|
1339
|
+
BRACKET_LEFT: "BracketLeft",
|
|
1340
|
+
ONE: "Digit1",
|
|
1341
|
+
TWO: "Digit2",
|
|
1342
|
+
THREE: "Digit3",
|
|
1343
|
+
NINE: "Digit9",
|
|
1344
|
+
QUOTE: "Quote",
|
|
1345
|
+
ZERO: "Digit0",
|
|
1346
|
+
SLASH: "Slash",
|
|
1347
|
+
C: "KeyC",
|
|
1348
|
+
D: "KeyD",
|
|
1349
|
+
H: "KeyH",
|
|
1350
|
+
V: "KeyV",
|
|
1351
|
+
Z: "KeyZ",
|
|
1352
|
+
Y: "KeyY",
|
|
1353
|
+
R: "KeyR",
|
|
1354
|
+
S: "KeyS"
|
|
1355
|
+
};
|
|
1356
|
+
var KEYS = {
|
|
1357
|
+
ARROW_DOWN: "ArrowDown",
|
|
1358
|
+
ARROW_LEFT: "ArrowLeft",
|
|
1359
|
+
ARROW_RIGHT: "ArrowRight",
|
|
1360
|
+
ARROW_UP: "ArrowUp",
|
|
1361
|
+
PAGE_UP: "PageUp",
|
|
1362
|
+
PAGE_DOWN: "PageDown",
|
|
1363
|
+
BACKSPACE: "Backspace",
|
|
1364
|
+
ALT: "Alt",
|
|
1365
|
+
CTRL_OR_CMD: isDarwin ? "metaKey" : "ctrlKey",
|
|
1366
|
+
DELETE: "Delete",
|
|
1367
|
+
ENTER: "Enter",
|
|
1368
|
+
ESCAPE: "Escape",
|
|
1369
|
+
QUESTION_MARK: "?",
|
|
1370
|
+
SPACE: " ",
|
|
1371
|
+
TAB: "Tab",
|
|
1372
|
+
CHEVRON_LEFT: "<",
|
|
1373
|
+
CHEVRON_RIGHT: ">",
|
|
1374
|
+
PERIOD: ".",
|
|
1375
|
+
COMMA: ",",
|
|
1376
|
+
SUBTRACT: "-",
|
|
1377
|
+
SLASH: "/",
|
|
1378
|
+
A: "a",
|
|
1379
|
+
C: "c",
|
|
1380
|
+
D: "d",
|
|
1381
|
+
E: "e",
|
|
1382
|
+
F: "f",
|
|
1383
|
+
G: "g",
|
|
1384
|
+
H: "h",
|
|
1385
|
+
I: "i",
|
|
1386
|
+
L: "l",
|
|
1387
|
+
O: "o",
|
|
1388
|
+
P: "p",
|
|
1389
|
+
Q: "q",
|
|
1390
|
+
R: "r",
|
|
1391
|
+
S: "s",
|
|
1392
|
+
T: "t",
|
|
1393
|
+
V: "v",
|
|
1394
|
+
X: "x",
|
|
1395
|
+
Y: "y",
|
|
1396
|
+
Z: "z",
|
|
1397
|
+
K: "k",
|
|
1398
|
+
W: "w",
|
|
1399
|
+
0: "0",
|
|
1400
|
+
1: "1",
|
|
1401
|
+
2: "2",
|
|
1402
|
+
3: "3",
|
|
1403
|
+
4: "4",
|
|
1404
|
+
5: "5",
|
|
1405
|
+
6: "6",
|
|
1406
|
+
7: "7",
|
|
1407
|
+
8: "8",
|
|
1408
|
+
9: "9"
|
|
1409
|
+
};
|
|
1410
|
+
var KeyCodeMap = /* @__PURE__ */ new Map([
|
|
1411
|
+
[KEYS.Z, CODES.Z],
|
|
1412
|
+
[KEYS.Y, CODES.Y]
|
|
1413
|
+
]);
|
|
1414
|
+
var isLatinChar = (key) => /^[a-z]$/.test(key.toLowerCase());
|
|
1415
|
+
var matchKey = (event, key) => {
|
|
1416
|
+
if (key === event.key.toLowerCase()) {
|
|
1417
|
+
return true;
|
|
1418
|
+
}
|
|
1419
|
+
const code = KeyCodeMap.get(key);
|
|
1420
|
+
return Boolean(code && !isLatinChar(event.key) && event.code === code);
|
|
1421
|
+
};
|
|
1422
|
+
var isArrowKey = (key) => key === KEYS.ARROW_LEFT || key === KEYS.ARROW_RIGHT || key === KEYS.ARROW_DOWN || key === KEYS.ARROW_UP;
|
|
1423
|
+
var shouldResizeFromCenter = (event) => event.altKey;
|
|
1424
|
+
var shouldMaintainAspectRatio = (event) => event.shiftKey;
|
|
1425
|
+
var shouldRotateWithDiscreteAngle = (event) => event.shiftKey;
|
|
1426
|
+
|
|
1427
|
+
// src/points.ts
|
|
1428
|
+
init_define_import_meta_env();
|
|
1429
|
+
import {
|
|
1430
|
+
pointFromPair
|
|
1431
|
+
} from "@excalidraw/math";
|
|
1432
|
+
var getSizeFromPoints = (points) => {
|
|
1433
|
+
const xs = points.map((point) => point[0]);
|
|
1434
|
+
const ys = points.map((point) => point[1]);
|
|
1435
|
+
return {
|
|
1436
|
+
width: Math.max(...xs) - Math.min(...xs),
|
|
1437
|
+
height: Math.max(...ys) - Math.min(...ys)
|
|
1438
|
+
};
|
|
1439
|
+
};
|
|
1440
|
+
var rescalePoints = (dimension, newSize, points, normalize) => {
|
|
1441
|
+
const coordinates = points.map((point) => point[dimension]);
|
|
1442
|
+
const maxCoordinate = Math.max(...coordinates);
|
|
1443
|
+
const minCoordinate = Math.min(...coordinates);
|
|
1444
|
+
const size = maxCoordinate - minCoordinate;
|
|
1445
|
+
const scale = size === 0 ? 1 : newSize / size;
|
|
1446
|
+
let nextMinCoordinate = Infinity;
|
|
1447
|
+
const scaledPoints = points.map((point) => {
|
|
1448
|
+
const newCoordinate = point[dimension] * scale;
|
|
1449
|
+
const newPoint = [...point];
|
|
1450
|
+
newPoint[dimension] = newCoordinate;
|
|
1451
|
+
if (newCoordinate < nextMinCoordinate) {
|
|
1452
|
+
nextMinCoordinate = newCoordinate;
|
|
1453
|
+
}
|
|
1454
|
+
return newPoint;
|
|
1455
|
+
});
|
|
1456
|
+
if (!normalize) {
|
|
1457
|
+
return scaledPoints;
|
|
1458
|
+
}
|
|
1459
|
+
if (scaledPoints.length === 2) {
|
|
1460
|
+
return scaledPoints;
|
|
1461
|
+
}
|
|
1462
|
+
const translation = minCoordinate - nextMinCoordinate;
|
|
1463
|
+
const nextPoints = scaledPoints.map(
|
|
1464
|
+
(scaledPoint) => pointFromPair(
|
|
1465
|
+
scaledPoint.map((value, currentDimension) => {
|
|
1466
|
+
return currentDimension === dimension ? value + translation : value;
|
|
1467
|
+
})
|
|
1468
|
+
)
|
|
1469
|
+
);
|
|
1470
|
+
return nextPoints;
|
|
1471
|
+
};
|
|
1472
|
+
var getGridPoint = (x, y, gridSize) => {
|
|
1473
|
+
if (gridSize) {
|
|
1474
|
+
return [
|
|
1475
|
+
Math.round(x / gridSize) * gridSize,
|
|
1476
|
+
Math.round(y / gridSize) * gridSize
|
|
1477
|
+
];
|
|
1478
|
+
}
|
|
1479
|
+
return [x, y];
|
|
1480
|
+
};
|
|
1481
|
+
|
|
1482
|
+
// src/promise-pool.ts
|
|
1483
|
+
init_define_import_meta_env();
|
|
1484
|
+
var import_es6_promise_pool = __toESM(require_es6_promise_pool(), 1);
|
|
1485
|
+
var PromisePool = class {
|
|
1486
|
+
pool;
|
|
1487
|
+
entries = {};
|
|
1488
|
+
constructor(source, concurrency) {
|
|
1489
|
+
this.pool = new import_es6_promise_pool.default(
|
|
1490
|
+
source,
|
|
1491
|
+
concurrency
|
|
1492
|
+
);
|
|
1493
|
+
}
|
|
1494
|
+
all() {
|
|
1495
|
+
const listener = (event) => {
|
|
1496
|
+
if (event.data.result) {
|
|
1497
|
+
const [index, value] = event.data.result;
|
|
1498
|
+
this.entries[index] = value;
|
|
1499
|
+
}
|
|
1500
|
+
};
|
|
1501
|
+
this.pool.addEventListener("fulfilled", listener);
|
|
1502
|
+
return this.pool.start().then(() => {
|
|
1503
|
+
setTimeout(() => {
|
|
1504
|
+
this.pool.removeEventListener("fulfilled", listener);
|
|
1505
|
+
});
|
|
1506
|
+
return Object.values(this.entries);
|
|
1507
|
+
});
|
|
1508
|
+
}
|
|
1509
|
+
};
|
|
1510
|
+
|
|
1511
|
+
// src/random.ts
|
|
1512
|
+
init_define_import_meta_env();
|
|
1513
|
+
|
|
1514
|
+
// ../../node_modules/nanoid/index.browser.js
|
|
1515
|
+
init_define_import_meta_env();
|
|
1516
|
+
|
|
1517
|
+
// ../../node_modules/nanoid/url-alphabet/index.js
|
|
1518
|
+
init_define_import_meta_env();
|
|
1519
|
+
|
|
1520
|
+
// ../../node_modules/nanoid/index.browser.js
|
|
1521
|
+
var nanoid = (size = 21) => crypto.getRandomValues(new Uint8Array(size)).reduce((id, byte) => {
|
|
1522
|
+
byte &= 63;
|
|
1523
|
+
if (byte < 36) {
|
|
1524
|
+
id += byte.toString(36);
|
|
1525
|
+
} else if (byte < 62) {
|
|
1526
|
+
id += (byte - 26).toString(36).toUpperCase();
|
|
1527
|
+
} else if (byte > 62) {
|
|
1528
|
+
id += "-";
|
|
1529
|
+
} else {
|
|
1530
|
+
id += "_";
|
|
1531
|
+
}
|
|
1532
|
+
return id;
|
|
1533
|
+
}, "");
|
|
1534
|
+
|
|
1535
|
+
// ../../node_modules/roughjs/bin/math.js
|
|
1536
|
+
init_define_import_meta_env();
|
|
1537
|
+
var Random = class {
|
|
1538
|
+
constructor(seed) {
|
|
1539
|
+
this.seed = seed;
|
|
1540
|
+
}
|
|
1541
|
+
next() {
|
|
1542
|
+
if (this.seed) {
|
|
1543
|
+
return (2 ** 31 - 1 & (this.seed = Math.imul(48271, this.seed))) / 2 ** 31;
|
|
1544
|
+
} else {
|
|
1545
|
+
return Math.random();
|
|
1546
|
+
}
|
|
1547
|
+
}
|
|
1548
|
+
};
|
|
1549
|
+
|
|
1550
|
+
// src/utils.ts
|
|
1551
|
+
init_define_import_meta_env();
|
|
1552
|
+
import { average } from "@excalidraw/math";
|
|
1553
|
+
var mockDateTime = null;
|
|
1554
|
+
var setDateTimeForTests = (dateTime) => {
|
|
1555
|
+
mockDateTime = dateTime;
|
|
1556
|
+
};
|
|
1557
|
+
var getDateTime = () => {
|
|
1558
|
+
if (mockDateTime) {
|
|
1559
|
+
return mockDateTime;
|
|
1560
|
+
}
|
|
1561
|
+
const date = /* @__PURE__ */ new Date();
|
|
1562
|
+
const year = date.getFullYear();
|
|
1563
|
+
const month = `${date.getMonth() + 1}`.padStart(2, "0");
|
|
1564
|
+
const day = `${date.getDate()}`.padStart(2, "0");
|
|
1565
|
+
const hr = `${date.getHours()}`.padStart(2, "0");
|
|
1566
|
+
const min = `${date.getMinutes()}`.padStart(2, "0");
|
|
1567
|
+
return `${year}-${month}-${day}-${hr}${min}`;
|
|
1568
|
+
};
|
|
1569
|
+
var capitalizeString = (str) => str.charAt(0).toUpperCase() + str.slice(1);
|
|
1570
|
+
var isToolIcon = (target) => target instanceof HTMLElement && target.className.includes("ToolIcon");
|
|
1571
|
+
var isInputLike = (target) => target instanceof HTMLElement && target.dataset.type === "wysiwyg" || target instanceof HTMLBRElement || // newline in wysiwyg
|
|
1572
|
+
target instanceof HTMLInputElement || target instanceof HTMLTextAreaElement || target instanceof HTMLSelectElement;
|
|
1573
|
+
var isInteractive = (target) => {
|
|
1574
|
+
return isInputLike(target) || target instanceof Element && !!target.closest("label, button");
|
|
1575
|
+
};
|
|
1576
|
+
var isWritableElement = (target) => target instanceof HTMLElement && target.dataset.type === "wysiwyg" || target instanceof HTMLBRElement || // newline in wysiwyg
|
|
1577
|
+
target instanceof HTMLTextAreaElement || target instanceof HTMLInputElement && (target.type === "text" || target.type === "number" || target.type === "password" || target.type === "search");
|
|
1578
|
+
var getFontFamilyString = ({
|
|
1579
|
+
fontFamily
|
|
1580
|
+
}) => {
|
|
1581
|
+
for (const [fontFamilyString, id] of Object.entries(FONT_FAMILY)) {
|
|
1582
|
+
if (id === fontFamily) {
|
|
1583
|
+
return `${fontFamilyString}${getFontFamilyFallbacks(id).map((x) => `, ${x}`).join("")}`;
|
|
1584
|
+
}
|
|
1585
|
+
}
|
|
1586
|
+
return WINDOWS_EMOJI_FALLBACK_FONT;
|
|
1587
|
+
};
|
|
1588
|
+
var getFontString = ({
|
|
1589
|
+
fontSize,
|
|
1590
|
+
fontFamily
|
|
1591
|
+
}) => {
|
|
1592
|
+
return `${fontSize}px ${getFontFamilyString({ fontFamily })}`;
|
|
1593
|
+
};
|
|
1594
|
+
var nextAnimationFrame = async (cb) => {
|
|
1595
|
+
requestAnimationFrame(() => requestAnimationFrame(cb));
|
|
1596
|
+
};
|
|
1597
|
+
var debounce = (fn, timeout) => {
|
|
1598
|
+
let handle = 0;
|
|
1599
|
+
let lastArgs = null;
|
|
1600
|
+
const ret = (...args) => {
|
|
1601
|
+
lastArgs = args;
|
|
1602
|
+
clearTimeout(handle);
|
|
1603
|
+
handle = window.setTimeout(() => {
|
|
1604
|
+
lastArgs = null;
|
|
1605
|
+
fn(...args);
|
|
1606
|
+
}, timeout);
|
|
1607
|
+
};
|
|
1608
|
+
ret.flush = () => {
|
|
1609
|
+
clearTimeout(handle);
|
|
1610
|
+
if (lastArgs) {
|
|
1611
|
+
const _lastArgs = lastArgs;
|
|
1612
|
+
lastArgs = null;
|
|
1613
|
+
fn(..._lastArgs);
|
|
1614
|
+
}
|
|
1615
|
+
};
|
|
1616
|
+
ret.cancel = () => {
|
|
1617
|
+
lastArgs = null;
|
|
1618
|
+
clearTimeout(handle);
|
|
1619
|
+
};
|
|
1620
|
+
return ret;
|
|
1621
|
+
};
|
|
1622
|
+
var throttleRAF = (fn, opts) => {
|
|
1623
|
+
let timerId = null;
|
|
1624
|
+
let lastArgs = null;
|
|
1625
|
+
let lastArgsTrailing = null;
|
|
1626
|
+
const scheduleFunc = (args) => {
|
|
1627
|
+
timerId = window.requestAnimationFrame(() => {
|
|
1628
|
+
timerId = null;
|
|
1629
|
+
fn(...args);
|
|
1630
|
+
lastArgs = null;
|
|
1631
|
+
if (lastArgsTrailing) {
|
|
1632
|
+
lastArgs = lastArgsTrailing;
|
|
1633
|
+
lastArgsTrailing = null;
|
|
1634
|
+
scheduleFunc(lastArgs);
|
|
1635
|
+
}
|
|
1636
|
+
});
|
|
1637
|
+
};
|
|
1638
|
+
const ret = (...args) => {
|
|
1639
|
+
if (isTestEnv()) {
|
|
1640
|
+
fn(...args);
|
|
1641
|
+
return;
|
|
1642
|
+
}
|
|
1643
|
+
lastArgs = args;
|
|
1644
|
+
if (timerId === null) {
|
|
1645
|
+
scheduleFunc(lastArgs);
|
|
1646
|
+
} else if (opts?.trailing) {
|
|
1647
|
+
lastArgsTrailing = args;
|
|
1648
|
+
}
|
|
1649
|
+
};
|
|
1650
|
+
ret.flush = () => {
|
|
1651
|
+
if (timerId !== null) {
|
|
1652
|
+
cancelAnimationFrame(timerId);
|
|
1653
|
+
timerId = null;
|
|
1654
|
+
}
|
|
1655
|
+
if (lastArgs) {
|
|
1656
|
+
fn(...lastArgsTrailing || lastArgs);
|
|
1657
|
+
lastArgs = lastArgsTrailing = null;
|
|
1658
|
+
}
|
|
1659
|
+
};
|
|
1660
|
+
ret.cancel = () => {
|
|
1661
|
+
lastArgs = lastArgsTrailing = null;
|
|
1662
|
+
if (timerId !== null) {
|
|
1663
|
+
cancelAnimationFrame(timerId);
|
|
1664
|
+
timerId = null;
|
|
1665
|
+
}
|
|
1666
|
+
};
|
|
1667
|
+
return ret;
|
|
1668
|
+
};
|
|
1669
|
+
var easeOut = (k) => {
|
|
1670
|
+
return 1 - Math.pow(1 - k, 4);
|
|
1671
|
+
};
|
|
1672
|
+
var easeOutInterpolate = (from, to, progress) => {
|
|
1673
|
+
return (to - from) * easeOut(progress) + from;
|
|
1674
|
+
};
|
|
1675
|
+
var easeToValuesRAF = ({
|
|
1676
|
+
fromValues,
|
|
1677
|
+
toValues,
|
|
1678
|
+
onStep,
|
|
1679
|
+
duration = 250,
|
|
1680
|
+
interpolateValue,
|
|
1681
|
+
onStart,
|
|
1682
|
+
onEnd,
|
|
1683
|
+
onCancel
|
|
1684
|
+
}) => {
|
|
1685
|
+
let canceled = false;
|
|
1686
|
+
let frameId = 0;
|
|
1687
|
+
let startTime;
|
|
1688
|
+
function step(timestamp) {
|
|
1689
|
+
if (canceled) {
|
|
1690
|
+
return;
|
|
1691
|
+
}
|
|
1692
|
+
if (startTime === void 0) {
|
|
1693
|
+
startTime = timestamp;
|
|
1694
|
+
onStart?.();
|
|
1695
|
+
}
|
|
1696
|
+
const elapsed = Math.min(timestamp - startTime, duration);
|
|
1697
|
+
const factor = easeOut(elapsed / duration);
|
|
1698
|
+
const newValues = {};
|
|
1699
|
+
Object.keys(fromValues).forEach((key) => {
|
|
1700
|
+
const _key = key;
|
|
1701
|
+
const result = (toValues[_key] - fromValues[_key]) * factor + fromValues[_key];
|
|
1702
|
+
newValues[_key] = result;
|
|
1703
|
+
});
|
|
1704
|
+
onStep(newValues);
|
|
1705
|
+
if (elapsed < duration) {
|
|
1706
|
+
const progress = elapsed / duration;
|
|
1707
|
+
const newValues2 = {};
|
|
1708
|
+
Object.keys(fromValues).forEach((key) => {
|
|
1709
|
+
const _key = key;
|
|
1710
|
+
const startValue = fromValues[_key];
|
|
1711
|
+
const endValue = toValues[_key];
|
|
1712
|
+
let result;
|
|
1713
|
+
result = interpolateValue ? interpolateValue(startValue, endValue, progress, _key) : easeOutInterpolate(startValue, endValue, progress);
|
|
1714
|
+
if (result == null) {
|
|
1715
|
+
result = easeOutInterpolate(startValue, endValue, progress);
|
|
1716
|
+
}
|
|
1717
|
+
newValues2[_key] = result;
|
|
1718
|
+
});
|
|
1719
|
+
onStep(newValues2);
|
|
1720
|
+
frameId = window.requestAnimationFrame(step);
|
|
1721
|
+
} else {
|
|
1722
|
+
onStep(toValues);
|
|
1723
|
+
onEnd?.();
|
|
1724
|
+
}
|
|
1725
|
+
}
|
|
1726
|
+
frameId = window.requestAnimationFrame(step);
|
|
1727
|
+
return () => {
|
|
1728
|
+
onCancel?.();
|
|
1729
|
+
canceled = true;
|
|
1730
|
+
window.cancelAnimationFrame(frameId);
|
|
1731
|
+
};
|
|
1732
|
+
};
|
|
1733
|
+
var chunk = (array, size) => {
|
|
1734
|
+
if (!array.length || size < 1) {
|
|
1735
|
+
return [];
|
|
1736
|
+
}
|
|
1737
|
+
let index = 0;
|
|
1738
|
+
let resIndex = 0;
|
|
1739
|
+
const result = Array(Math.ceil(array.length / size));
|
|
1740
|
+
while (index < array.length) {
|
|
1741
|
+
result[resIndex++] = array.slice(index, index += size);
|
|
1742
|
+
}
|
|
1743
|
+
return result;
|
|
1744
|
+
};
|
|
1745
|
+
var selectNode = (node) => {
|
|
1746
|
+
const selection = window.getSelection();
|
|
1747
|
+
if (selection) {
|
|
1748
|
+
const range = document.createRange();
|
|
1749
|
+
range.selectNodeContents(node);
|
|
1750
|
+
selection.removeAllRanges();
|
|
1751
|
+
selection.addRange(range);
|
|
1752
|
+
}
|
|
1753
|
+
};
|
|
1754
|
+
var removeSelection = () => {
|
|
1755
|
+
const selection = window.getSelection();
|
|
1756
|
+
if (selection) {
|
|
1757
|
+
selection.removeAllRanges();
|
|
1758
|
+
}
|
|
1759
|
+
};
|
|
1760
|
+
var distance = (x, y) => Math.abs(x - y);
|
|
1761
|
+
var isSelectionLikeTool = (type) => {
|
|
1762
|
+
return type === "selection" || type === "lasso";
|
|
1763
|
+
};
|
|
1764
|
+
var updateActiveTool = (appState, data) => {
|
|
1765
|
+
if (data.type === "custom") {
|
|
1766
|
+
return {
|
|
1767
|
+
...appState.activeTool,
|
|
1768
|
+
type: "custom",
|
|
1769
|
+
customType: data.customType,
|
|
1770
|
+
locked: data.locked ?? appState.activeTool.locked
|
|
1771
|
+
};
|
|
1772
|
+
}
|
|
1773
|
+
return {
|
|
1774
|
+
...appState.activeTool,
|
|
1775
|
+
lastActiveTool: data.lastActiveToolBeforeEraser === void 0 ? appState.activeTool.lastActiveTool : data.lastActiveToolBeforeEraser,
|
|
1776
|
+
type: data.type,
|
|
1777
|
+
customType: null,
|
|
1778
|
+
locked: data.locked ?? appState.activeTool.locked,
|
|
1779
|
+
fromSelection: data.fromSelection ?? false
|
|
1780
|
+
};
|
|
1781
|
+
};
|
|
1782
|
+
var isFullScreen = () => document.fullscreenElement?.nodeName === "HTML";
|
|
1783
|
+
var allowFullScreen = () => document.documentElement.requestFullscreen();
|
|
1784
|
+
var exitFullScreen = () => document.exitFullscreen();
|
|
1785
|
+
var viewportCoordsToSceneCoords = ({ clientX, clientY }, {
|
|
1786
|
+
zoom,
|
|
1787
|
+
offsetLeft,
|
|
1788
|
+
offsetTop,
|
|
1789
|
+
scrollX,
|
|
1790
|
+
scrollY
|
|
1791
|
+
}) => {
|
|
1792
|
+
const x = (clientX - offsetLeft) / zoom.value - scrollX;
|
|
1793
|
+
const y = (clientY - offsetTop) / zoom.value - scrollY;
|
|
1794
|
+
return { x, y };
|
|
1795
|
+
};
|
|
1796
|
+
var sceneCoordsToViewportCoords = ({ sceneX, sceneY }, {
|
|
1797
|
+
zoom,
|
|
1798
|
+
offsetLeft,
|
|
1799
|
+
offsetTop,
|
|
1800
|
+
scrollX,
|
|
1801
|
+
scrollY
|
|
1802
|
+
}) => {
|
|
1803
|
+
const x = (sceneX + scrollX) * zoom.value + offsetLeft;
|
|
1804
|
+
const y = (sceneY + scrollY) * zoom.value + offsetTop;
|
|
1805
|
+
return { x, y };
|
|
1806
|
+
};
|
|
1807
|
+
var getGlobalCSSVariable = (name) => getComputedStyle(document.documentElement).getPropertyValue(`--${name}`);
|
|
1808
|
+
var RS_LTR_CHARS = "A-Za-z\xC0-\xD6\xD8-\xF6\xF8-\u02B8\u0300-\u0590\u0800-\u1FFF\u2C00-\uFB1C\uFDFE-\uFE6F\uFEFD-\uFFFF";
|
|
1809
|
+
var RS_RTL_CHARS = "\u0591-\u07FF\uFB1D-\uFDFD\uFE70-\uFEFC";
|
|
1810
|
+
var RE_RTL_CHECK = new RegExp(`^[^${RS_LTR_CHARS}]*[${RS_RTL_CHARS}]`);
|
|
1811
|
+
var isRTL = (text) => RE_RTL_CHECK.test(text);
|
|
1812
|
+
var tupleToCoors = (xyTuple) => {
|
|
1813
|
+
const [x, y] = xyTuple;
|
|
1814
|
+
return { x, y };
|
|
1815
|
+
};
|
|
1816
|
+
var muteFSAbortError = (error) => {
|
|
1817
|
+
if (error?.name === "AbortError") {
|
|
1818
|
+
console.warn(error);
|
|
1819
|
+
return;
|
|
1820
|
+
}
|
|
1821
|
+
throw error;
|
|
1822
|
+
};
|
|
1823
|
+
var findIndex = (array, cb, fromIndex = 0) => {
|
|
1824
|
+
if (fromIndex < 0) {
|
|
1825
|
+
fromIndex = array.length + fromIndex;
|
|
1826
|
+
}
|
|
1827
|
+
fromIndex = Math.min(array.length, Math.max(fromIndex, 0));
|
|
1828
|
+
let index = fromIndex - 1;
|
|
1829
|
+
while (++index < array.length) {
|
|
1830
|
+
if (cb(array[index], index, array)) {
|
|
1831
|
+
return index;
|
|
1832
|
+
}
|
|
1833
|
+
}
|
|
1834
|
+
return -1;
|
|
1835
|
+
};
|
|
1836
|
+
var findLastIndex = (array, cb, fromIndex = array.length - 1) => {
|
|
1837
|
+
if (fromIndex < 0) {
|
|
1838
|
+
fromIndex = array.length + fromIndex;
|
|
1839
|
+
}
|
|
1840
|
+
fromIndex = Math.min(array.length - 1, Math.max(fromIndex, 0));
|
|
1841
|
+
let index = fromIndex + 1;
|
|
1842
|
+
while (--index > -1) {
|
|
1843
|
+
if (cb(array[index], index, array)) {
|
|
1844
|
+
return index;
|
|
1845
|
+
}
|
|
1846
|
+
}
|
|
1847
|
+
return -1;
|
|
1848
|
+
};
|
|
1849
|
+
var mapFind = (collection, iteratee) => {
|
|
1850
|
+
for (let idx = 0; idx < collection.length; idx++) {
|
|
1851
|
+
const result = iteratee(collection[idx], idx);
|
|
1852
|
+
if (result != null) {
|
|
1853
|
+
return result;
|
|
1854
|
+
}
|
|
1855
|
+
}
|
|
1856
|
+
return void 0;
|
|
1857
|
+
};
|
|
1858
|
+
var isTransparent = (color) => {
|
|
1859
|
+
const isRGBTransparent = color.length === 5 && color.substr(4, 1) === "0";
|
|
1860
|
+
const isRRGGBBTransparent = color.length === 9 && color.substr(7, 2) === "00";
|
|
1861
|
+
return isRGBTransparent || isRRGGBBTransparent || color === COLOR_PALETTE.transparent;
|
|
1862
|
+
};
|
|
1863
|
+
var resolvablePromise = () => {
|
|
1864
|
+
let resolve;
|
|
1865
|
+
let reject;
|
|
1866
|
+
const promise = new Promise((_resolve, _reject) => {
|
|
1867
|
+
resolve = _resolve;
|
|
1868
|
+
reject = _reject;
|
|
1869
|
+
});
|
|
1870
|
+
promise.resolve = resolve;
|
|
1871
|
+
promise.reject = reject;
|
|
1872
|
+
return promise;
|
|
1873
|
+
};
|
|
1874
|
+
var nFormatter = (num, digits) => {
|
|
1875
|
+
const si = [
|
|
1876
|
+
{ value: 1, symbol: "b" },
|
|
1877
|
+
{ value: 1e3, symbol: "k" },
|
|
1878
|
+
{ value: 1e6, symbol: "M" },
|
|
1879
|
+
{ value: 1e9, symbol: "G" }
|
|
1880
|
+
];
|
|
1881
|
+
const rx = /\.0+$|(\.[0-9]*[1-9])0+$/;
|
|
1882
|
+
let index;
|
|
1883
|
+
for (index = si.length - 1; index > 0; index--) {
|
|
1884
|
+
if (num >= si[index].value) {
|
|
1885
|
+
break;
|
|
1886
|
+
}
|
|
1887
|
+
}
|
|
1888
|
+
return (num / si[index].value).toFixed(digits).replace(rx, "$1") + si[index].symbol;
|
|
1889
|
+
};
|
|
1890
|
+
var getVersion = () => {
|
|
1891
|
+
return document.querySelector('meta[name="version"]')?.content || DEFAULT_VERSION;
|
|
1892
|
+
};
|
|
1893
|
+
var supportsEmoji = () => {
|
|
1894
|
+
const canvas = document.createElement("canvas");
|
|
1895
|
+
const ctx = canvas.getContext("2d");
|
|
1896
|
+
if (!ctx) {
|
|
1897
|
+
return false;
|
|
1898
|
+
}
|
|
1899
|
+
const offset = 12;
|
|
1900
|
+
ctx.fillStyle = "#f00";
|
|
1901
|
+
ctx.textBaseline = "top";
|
|
1902
|
+
ctx.font = "32px Arial";
|
|
1903
|
+
ctx.fillText("\u{1F600}", 0, 0);
|
|
1904
|
+
return ctx.getImageData(offset, offset, 1, 1).data[0] !== 0;
|
|
1905
|
+
};
|
|
1906
|
+
var getNearestScrollableContainer = (element) => {
|
|
1907
|
+
let parent = element.parentElement;
|
|
1908
|
+
while (parent) {
|
|
1909
|
+
if (parent === document.body) {
|
|
1910
|
+
return document;
|
|
1911
|
+
}
|
|
1912
|
+
const { overflowY } = window.getComputedStyle(parent);
|
|
1913
|
+
const hasScrollableContent = parent.scrollHeight > parent.clientHeight;
|
|
1914
|
+
if (hasScrollableContent && (overflowY === "auto" || overflowY === "scroll" || overflowY === "overlay")) {
|
|
1915
|
+
return parent;
|
|
1916
|
+
}
|
|
1917
|
+
parent = parent.parentElement;
|
|
1918
|
+
}
|
|
1919
|
+
return document;
|
|
1920
|
+
};
|
|
1921
|
+
var focusNearestParent = (element) => {
|
|
1922
|
+
let parent = element.parentElement;
|
|
1923
|
+
while (parent) {
|
|
1924
|
+
if (parent.tabIndex > -1) {
|
|
1925
|
+
parent.focus();
|
|
1926
|
+
return;
|
|
1927
|
+
}
|
|
1928
|
+
parent = parent.parentElement;
|
|
1929
|
+
}
|
|
1930
|
+
};
|
|
1931
|
+
var preventUnload = (event) => {
|
|
1932
|
+
event.preventDefault();
|
|
1933
|
+
event.returnValue = "";
|
|
1934
|
+
};
|
|
1935
|
+
var bytesToHexString = (bytes) => {
|
|
1936
|
+
return Array.from(bytes).map((byte) => `0${byte.toString(16)}`.slice(-2)).join("");
|
|
1937
|
+
};
|
|
1938
|
+
var getUpdatedTimestamp = () => isTestEnv() ? 1 : Date.now();
|
|
1939
|
+
var arrayToMap = (items) => {
|
|
1940
|
+
if (items instanceof Map) {
|
|
1941
|
+
return items;
|
|
1942
|
+
}
|
|
1943
|
+
return items.reduce((acc, element) => {
|
|
1944
|
+
acc.set(typeof element === "string" ? element : element.id, element);
|
|
1945
|
+
return acc;
|
|
1946
|
+
}, /* @__PURE__ */ new Map());
|
|
1947
|
+
};
|
|
1948
|
+
var arrayToMapWithIndex = (elements) => elements.reduce((acc, element, idx) => {
|
|
1949
|
+
acc.set(element.id, [element, idx]);
|
|
1950
|
+
return acc;
|
|
1951
|
+
}, /* @__PURE__ */ new Map());
|
|
1952
|
+
var arrayToObject = (array, groupBy) => array.reduce((acc, value, idx) => {
|
|
1953
|
+
acc[groupBy ? groupBy(value) : idx] = value;
|
|
1954
|
+
return acc;
|
|
1955
|
+
}, {});
|
|
1956
|
+
var arrayToList = (array) => array.reduce((acc, curr, index) => {
|
|
1957
|
+
const node = { ...curr, prev: null, next: null };
|
|
1958
|
+
if (index !== 0) {
|
|
1959
|
+
const prevNode = acc[index - 1];
|
|
1960
|
+
node.prev = prevNode;
|
|
1961
|
+
prevNode.next = node;
|
|
1962
|
+
if (index === array.length - 1) {
|
|
1963
|
+
const firstNode = acc[0];
|
|
1964
|
+
node.next = firstNode;
|
|
1965
|
+
firstNode.prev = node;
|
|
1966
|
+
}
|
|
1967
|
+
}
|
|
1968
|
+
acc.push(node);
|
|
1969
|
+
return acc;
|
|
1970
|
+
}, []);
|
|
1971
|
+
var toIterable = (values) => {
|
|
1972
|
+
return Array.isArray(values) ? values : values.values();
|
|
1973
|
+
};
|
|
1974
|
+
var toArray = (values) => {
|
|
1975
|
+
return Array.isArray(values) ? values : Array.from(toIterable(values));
|
|
1976
|
+
};
|
|
1977
|
+
var isTestEnv = () => define_import_meta_env_default.MODE === ENV.TEST;
|
|
1978
|
+
var isDevEnv = () => define_import_meta_env_default.MODE === ENV.DEVELOPMENT;
|
|
1979
|
+
var isProdEnv = () => define_import_meta_env_default.MODE === ENV.PRODUCTION;
|
|
1980
|
+
var isServerEnv = () => typeof process !== "undefined" && true;
|
|
1981
|
+
var wrapEvent = (name, nativeEvent) => {
|
|
1982
|
+
return new CustomEvent(name, {
|
|
1983
|
+
detail: {
|
|
1984
|
+
nativeEvent
|
|
1985
|
+
},
|
|
1986
|
+
cancelable: true
|
|
1987
|
+
});
|
|
1988
|
+
};
|
|
1989
|
+
var updateObject = (obj, updates) => {
|
|
1990
|
+
let didChange = false;
|
|
1991
|
+
for (const key in updates) {
|
|
1992
|
+
const value = updates[key];
|
|
1993
|
+
if (typeof value !== "undefined") {
|
|
1994
|
+
if (obj[key] === value && // if object, always update because its attrs could have changed
|
|
1995
|
+
(typeof value !== "object" || value === null)) {
|
|
1996
|
+
continue;
|
|
1997
|
+
}
|
|
1998
|
+
didChange = true;
|
|
1999
|
+
}
|
|
2000
|
+
}
|
|
2001
|
+
if (!didChange) {
|
|
2002
|
+
return obj;
|
|
2003
|
+
}
|
|
2004
|
+
return {
|
|
2005
|
+
...obj,
|
|
2006
|
+
...updates
|
|
2007
|
+
};
|
|
2008
|
+
};
|
|
2009
|
+
var isPrimitive = (val) => {
|
|
2010
|
+
const type = typeof val;
|
|
2011
|
+
return val == null || type !== "object" && type !== "function";
|
|
2012
|
+
};
|
|
2013
|
+
var getFrame = () => {
|
|
2014
|
+
try {
|
|
2015
|
+
return window.self === window.top ? "top" : "iframe";
|
|
2016
|
+
} catch (error) {
|
|
2017
|
+
return "iframe";
|
|
2018
|
+
}
|
|
2019
|
+
};
|
|
2020
|
+
var isRunningInIframe = () => getFrame() === "iframe";
|
|
2021
|
+
var isPromiseLike = (value) => {
|
|
2022
|
+
return !!value && typeof value === "object" && "then" in value && "catch" in value && "finally" in value;
|
|
2023
|
+
};
|
|
2024
|
+
var queryFocusableElements = (container) => {
|
|
2025
|
+
const focusableElements = container?.querySelectorAll(
|
|
2026
|
+
"button, a, input, select, textarea, div[tabindex], label[tabindex]"
|
|
2027
|
+
);
|
|
2028
|
+
return focusableElements ? Array.from(focusableElements).filter(
|
|
2029
|
+
(element) => element.tabIndex > -1 && !element.disabled
|
|
2030
|
+
) : [];
|
|
2031
|
+
};
|
|
2032
|
+
var _defaultIsShallowComparatorFallback = (a, b) => {
|
|
2033
|
+
if (Array.isArray(a) && Array.isArray(b) && a.length === 0 && b.length === 0) {
|
|
2034
|
+
return true;
|
|
2035
|
+
}
|
|
2036
|
+
return a === b;
|
|
2037
|
+
};
|
|
2038
|
+
var isShallowEqual = (objA, objB, comparators, debug = false) => {
|
|
2039
|
+
const aKeys = Object.keys(objA);
|
|
2040
|
+
const bKeys = Object.keys(objB);
|
|
2041
|
+
if (aKeys.length !== bKeys.length) {
|
|
2042
|
+
if (debug) {
|
|
2043
|
+
console.warn(
|
|
2044
|
+
`%cisShallowEqual: objects don't have same properties ->`,
|
|
2045
|
+
"color: #8B4000",
|
|
2046
|
+
objA,
|
|
2047
|
+
objB
|
|
2048
|
+
);
|
|
2049
|
+
}
|
|
2050
|
+
return false;
|
|
2051
|
+
}
|
|
2052
|
+
if (comparators && Array.isArray(comparators)) {
|
|
2053
|
+
for (const key of comparators) {
|
|
2054
|
+
const ret = objA[key] === objB[key] || _defaultIsShallowComparatorFallback(objA[key], objB[key]);
|
|
2055
|
+
if (!ret) {
|
|
2056
|
+
if (debug) {
|
|
2057
|
+
console.warn(
|
|
2058
|
+
`%cisShallowEqual: ${key} not equal ->`,
|
|
2059
|
+
"color: #8B4000",
|
|
2060
|
+
objA[key],
|
|
2061
|
+
objB[key]
|
|
2062
|
+
);
|
|
2063
|
+
}
|
|
2064
|
+
return false;
|
|
2065
|
+
}
|
|
2066
|
+
}
|
|
2067
|
+
return true;
|
|
2068
|
+
}
|
|
2069
|
+
return aKeys.every((key) => {
|
|
2070
|
+
const comparator = comparators?.[key];
|
|
2071
|
+
const ret = comparator ? comparator(objA[key], objB[key]) : objA[key] === objB[key] || _defaultIsShallowComparatorFallback(objA[key], objB[key]);
|
|
2072
|
+
if (!ret && debug) {
|
|
2073
|
+
console.warn(
|
|
2074
|
+
`%cisShallowEqual: ${key} not equal ->`,
|
|
2075
|
+
"color: #8B4000",
|
|
2076
|
+
objA[key],
|
|
2077
|
+
objB[key]
|
|
2078
|
+
);
|
|
2079
|
+
}
|
|
2080
|
+
return ret;
|
|
2081
|
+
});
|
|
2082
|
+
};
|
|
2083
|
+
var composeEventHandlers = (originalEventHandler, ourEventHandler, { checkForDefaultPrevented = true } = {}) => {
|
|
2084
|
+
return function handleEvent(event) {
|
|
2085
|
+
originalEventHandler?.(event);
|
|
2086
|
+
if (!checkForDefaultPrevented || !event?.defaultPrevented) {
|
|
2087
|
+
return ourEventHandler?.(event);
|
|
2088
|
+
}
|
|
2089
|
+
};
|
|
2090
|
+
};
|
|
2091
|
+
var assertNever = (value, message, softAssert) => {
|
|
2092
|
+
if (!message) {
|
|
2093
|
+
return value;
|
|
2094
|
+
}
|
|
2095
|
+
if (softAssert) {
|
|
2096
|
+
console.error(message);
|
|
2097
|
+
return value;
|
|
2098
|
+
}
|
|
2099
|
+
throw new Error(message);
|
|
2100
|
+
};
|
|
2101
|
+
function invariant(condition, message) {
|
|
2102
|
+
if (!condition) {
|
|
2103
|
+
throw new Error(message);
|
|
2104
|
+
}
|
|
2105
|
+
}
|
|
2106
|
+
var memoize = (func) => {
|
|
2107
|
+
let lastArgs;
|
|
2108
|
+
let lastResult;
|
|
2109
|
+
const ret = function(opts) {
|
|
2110
|
+
const currentArgs = Object.entries(opts);
|
|
2111
|
+
if (lastArgs) {
|
|
2112
|
+
let argsAreEqual = true;
|
|
2113
|
+
for (const [key, value] of currentArgs) {
|
|
2114
|
+
if (lastArgs.get(key) !== value) {
|
|
2115
|
+
argsAreEqual = false;
|
|
2116
|
+
break;
|
|
2117
|
+
}
|
|
2118
|
+
}
|
|
2119
|
+
if (argsAreEqual) {
|
|
2120
|
+
return lastResult;
|
|
2121
|
+
}
|
|
2122
|
+
}
|
|
2123
|
+
const result = func(opts);
|
|
2124
|
+
lastArgs = new Map(currentArgs);
|
|
2125
|
+
lastResult = result;
|
|
2126
|
+
return result;
|
|
2127
|
+
};
|
|
2128
|
+
ret.clear = () => {
|
|
2129
|
+
lastArgs = void 0;
|
|
2130
|
+
lastResult = void 0;
|
|
2131
|
+
};
|
|
2132
|
+
return ret;
|
|
2133
|
+
};
|
|
2134
|
+
var isMemberOf = (collection, value) => {
|
|
2135
|
+
return collection instanceof Set || collection instanceof Map ? collection.has(value) : "includes" in collection ? collection.includes(value) : collection.hasOwnProperty(value);
|
|
2136
|
+
};
|
|
2137
|
+
var cloneJSON = (obj) => JSON.parse(JSON.stringify(obj));
|
|
2138
|
+
var updateStable = (prevValue, nextValue) => {
|
|
2139
|
+
if (isShallowEqual(prevValue, nextValue)) {
|
|
2140
|
+
return prevValue;
|
|
2141
|
+
}
|
|
2142
|
+
return nextValue;
|
|
2143
|
+
};
|
|
2144
|
+
function addEventListener(target, type, listener, options) {
|
|
2145
|
+
if (!target) {
|
|
2146
|
+
return () => {
|
|
2147
|
+
};
|
|
2148
|
+
}
|
|
2149
|
+
target?.addEventListener?.(type, listener, options);
|
|
2150
|
+
return () => {
|
|
2151
|
+
target?.removeEventListener?.(type, listener, options);
|
|
2152
|
+
};
|
|
2153
|
+
}
|
|
2154
|
+
function getSvgPathFromStroke(points, closed = true) {
|
|
2155
|
+
const len = points.length;
|
|
2156
|
+
if (len < 4) {
|
|
2157
|
+
return ``;
|
|
2158
|
+
}
|
|
2159
|
+
let a = points[0];
|
|
2160
|
+
let b = points[1];
|
|
2161
|
+
const c = points[2];
|
|
2162
|
+
let result = `M${a[0].toFixed(2)},${a[1].toFixed(2)} Q${b[0].toFixed(
|
|
2163
|
+
2
|
|
2164
|
+
)},${b[1].toFixed(2)} ${average(b[0], c[0]).toFixed(2)},${average(
|
|
2165
|
+
b[1],
|
|
2166
|
+
c[1]
|
|
2167
|
+
).toFixed(2)} T`;
|
|
2168
|
+
for (let i = 2, max = len - 1; i < max; i++) {
|
|
2169
|
+
a = points[i];
|
|
2170
|
+
b = points[i + 1];
|
|
2171
|
+
result += `${average(a[0], b[0]).toFixed(2)},${average(a[1], b[1]).toFixed(
|
|
2172
|
+
2
|
|
2173
|
+
)} `;
|
|
2174
|
+
}
|
|
2175
|
+
if (closed) {
|
|
2176
|
+
result += "Z";
|
|
2177
|
+
}
|
|
2178
|
+
return result;
|
|
2179
|
+
}
|
|
2180
|
+
var normalizeEOL = (str) => {
|
|
2181
|
+
return str.replace(/\r?\n|\r/g, "\n");
|
|
2182
|
+
};
|
|
2183
|
+
var toBrandedType = (value) => {
|
|
2184
|
+
return value;
|
|
2185
|
+
};
|
|
2186
|
+
var promiseTry = async (fn, ...args) => {
|
|
2187
|
+
return new Promise((resolve) => {
|
|
2188
|
+
resolve(fn(...args));
|
|
2189
|
+
});
|
|
2190
|
+
};
|
|
2191
|
+
var isAnyTrue = (...args) => Math.max(...args.map((arg) => arg ? 1 : 0)) > 0;
|
|
2192
|
+
var safelyParseJSON = (json) => {
|
|
2193
|
+
try {
|
|
2194
|
+
return JSON.parse(json);
|
|
2195
|
+
} catch {
|
|
2196
|
+
return null;
|
|
2197
|
+
}
|
|
2198
|
+
};
|
|
2199
|
+
var escapeDoubleQuotes = (str) => {
|
|
2200
|
+
return str.replace(/"/g, """);
|
|
2201
|
+
};
|
|
2202
|
+
var castArray = (value) => Array.isArray(value) ? value : [value];
|
|
2203
|
+
var isReadonlyArray = (value) => {
|
|
2204
|
+
return Array.isArray(value);
|
|
2205
|
+
};
|
|
2206
|
+
var sizeOf = (value) => {
|
|
2207
|
+
return isReadonlyArray(value) ? value.length : value instanceof Map || value instanceof Set ? value.size : Object.keys(value).length;
|
|
2208
|
+
};
|
|
2209
|
+
var reduceToCommonValue = (collection, getValue) => {
|
|
2210
|
+
if (sizeOf(collection) === 0) {
|
|
2211
|
+
return null;
|
|
2212
|
+
}
|
|
2213
|
+
const valueExtractor = getValue || ((item) => item);
|
|
2214
|
+
let commonValue = null;
|
|
2215
|
+
for (const item of collection) {
|
|
2216
|
+
const value = valueExtractor(item);
|
|
2217
|
+
if ((commonValue === null || commonValue === value) && value != null) {
|
|
2218
|
+
commonValue = value;
|
|
2219
|
+
} else {
|
|
2220
|
+
return null;
|
|
2221
|
+
}
|
|
2222
|
+
}
|
|
2223
|
+
return commonValue;
|
|
2224
|
+
};
|
|
2225
|
+
var FEATURE_FLAGS_STORAGE_KEY = "excalidraw-feature-flags";
|
|
2226
|
+
var DEFAULT_FEATURE_FLAGS = {
|
|
2227
|
+
COMPLEX_BINDINGS: false
|
|
2228
|
+
};
|
|
2229
|
+
var featureFlags = null;
|
|
2230
|
+
var getFeatureFlag = (flag) => {
|
|
2231
|
+
if (!featureFlags) {
|
|
2232
|
+
try {
|
|
2233
|
+
const serializedFlags = localStorage.getItem(FEATURE_FLAGS_STORAGE_KEY);
|
|
2234
|
+
if (serializedFlags) {
|
|
2235
|
+
const flags = JSON.parse(serializedFlags);
|
|
2236
|
+
featureFlags = flags ?? DEFAULT_FEATURE_FLAGS;
|
|
2237
|
+
}
|
|
2238
|
+
} catch {
|
|
2239
|
+
}
|
|
2240
|
+
}
|
|
2241
|
+
return (featureFlags || DEFAULT_FEATURE_FLAGS)[flag];
|
|
2242
|
+
};
|
|
2243
|
+
var setFeatureFlag = (flag, value) => {
|
|
2244
|
+
try {
|
|
2245
|
+
featureFlags = {
|
|
2246
|
+
...featureFlags || DEFAULT_FEATURE_FLAGS,
|
|
2247
|
+
[flag]: value
|
|
2248
|
+
};
|
|
2249
|
+
localStorage.setItem(
|
|
2250
|
+
FEATURE_FLAGS_STORAGE_KEY,
|
|
2251
|
+
JSON.stringify(featureFlags)
|
|
2252
|
+
);
|
|
2253
|
+
} catch (e) {
|
|
2254
|
+
console.error("unable to set feature flag", e);
|
|
2255
|
+
}
|
|
2256
|
+
};
|
|
2257
|
+
|
|
2258
|
+
// src/random.ts
|
|
2259
|
+
var random = new Random(Date.now());
|
|
2260
|
+
var testIdBase = 0;
|
|
2261
|
+
var randomInteger = () => Math.floor(random.next() * 2 ** 31);
|
|
2262
|
+
var reseed = (seed) => {
|
|
2263
|
+
random = new Random(seed);
|
|
2264
|
+
testIdBase = 0;
|
|
2265
|
+
};
|
|
2266
|
+
var randomId = () => isTestEnv() ? `id${testIdBase++}` : nanoid();
|
|
2267
|
+
|
|
2268
|
+
// src/url.ts
|
|
2269
|
+
init_define_import_meta_env();
|
|
2270
|
+
var import_sanitize_url = __toESM(require_dist(), 1);
|
|
2271
|
+
var normalizeLink = (link) => {
|
|
2272
|
+
link = link.trim();
|
|
2273
|
+
if (!link) {
|
|
2274
|
+
return link;
|
|
2275
|
+
}
|
|
2276
|
+
return (0, import_sanitize_url.sanitizeUrl)(escapeDoubleQuotes(link));
|
|
2277
|
+
};
|
|
2278
|
+
var isLocalLink = (link) => {
|
|
2279
|
+
return !!(link?.includes(location.origin) || link?.startsWith("/"));
|
|
2280
|
+
};
|
|
2281
|
+
var toValidURL = (link) => {
|
|
2282
|
+
link = normalizeLink(link);
|
|
2283
|
+
if (link.startsWith("/")) {
|
|
2284
|
+
return `${location.origin}${link}`;
|
|
2285
|
+
}
|
|
2286
|
+
try {
|
|
2287
|
+
new URL(link);
|
|
2288
|
+
} catch {
|
|
2289
|
+
return "about:blank";
|
|
2290
|
+
}
|
|
2291
|
+
return link;
|
|
2292
|
+
};
|
|
2293
|
+
|
|
2294
|
+
// src/emitter.ts
|
|
2295
|
+
init_define_import_meta_env();
|
|
2296
|
+
var Emitter = class {
|
|
2297
|
+
subscribers = [];
|
|
2298
|
+
/**
|
|
2299
|
+
* Attaches subscriber
|
|
2300
|
+
*
|
|
2301
|
+
* @returns unsubscribe function
|
|
2302
|
+
*/
|
|
2303
|
+
on(...handlers) {
|
|
2304
|
+
const _handlers = handlers.flat().filter((item) => typeof item === "function");
|
|
2305
|
+
this.subscribers.push(..._handlers);
|
|
2306
|
+
return () => this.off(_handlers);
|
|
2307
|
+
}
|
|
2308
|
+
once(...handlers) {
|
|
2309
|
+
const _handlers = handlers.flat().filter((item) => typeof item === "function");
|
|
2310
|
+
_handlers.push(() => detach());
|
|
2311
|
+
const detach = this.on(..._handlers);
|
|
2312
|
+
return detach;
|
|
2313
|
+
}
|
|
2314
|
+
off(...handlers) {
|
|
2315
|
+
const _handlers = handlers.flat();
|
|
2316
|
+
this.subscribers = this.subscribers.filter(
|
|
2317
|
+
(handler) => !_handlers.includes(handler)
|
|
2318
|
+
);
|
|
2319
|
+
}
|
|
2320
|
+
trigger(...payload) {
|
|
2321
|
+
for (const handler of this.subscribers) {
|
|
2322
|
+
handler(...payload);
|
|
2323
|
+
}
|
|
2324
|
+
return this;
|
|
2325
|
+
}
|
|
2326
|
+
clear() {
|
|
2327
|
+
this.subscribers = [];
|
|
2328
|
+
}
|
|
2329
|
+
};
|
|
2330
|
+
|
|
2331
|
+
// src/visualdebug.ts
|
|
2332
|
+
init_define_import_meta_env();
|
|
2333
|
+
import {
|
|
2334
|
+
isLineSegment,
|
|
2335
|
+
lineSegment,
|
|
2336
|
+
pointFrom
|
|
2337
|
+
} from "@excalidraw/math";
|
|
2338
|
+
var debugDrawCubicBezier = (c, opts) => {
|
|
2339
|
+
addToCurrentFrame({
|
|
2340
|
+
color: opts?.color ?? "purple",
|
|
2341
|
+
permanent: !!opts?.permanent,
|
|
2342
|
+
data: c
|
|
2343
|
+
});
|
|
2344
|
+
};
|
|
2345
|
+
var debugDrawLine = (segment, opts) => {
|
|
2346
|
+
const segments = isLineSegment(segment) ? [segment] : segment;
|
|
2347
|
+
segments.forEach(
|
|
2348
|
+
(data) => addToCurrentFrame({
|
|
2349
|
+
color: opts?.color ?? "red",
|
|
2350
|
+
data,
|
|
2351
|
+
permanent: !!opts?.permanent
|
|
2352
|
+
})
|
|
2353
|
+
);
|
|
2354
|
+
};
|
|
2355
|
+
var debugDrawPoint = (p, opts) => {
|
|
2356
|
+
const xOffset = opts?.fuzzy ? Math.random() * 3 : 0;
|
|
2357
|
+
const yOffset = opts?.fuzzy ? Math.random() * 3 : 0;
|
|
2358
|
+
debugDrawLine(
|
|
2359
|
+
lineSegment(
|
|
2360
|
+
pointFrom(p[0] + xOffset - 10, p[1] + yOffset - 10),
|
|
2361
|
+
pointFrom(p[0] + xOffset + 10, p[1] + yOffset + 10)
|
|
2362
|
+
),
|
|
2363
|
+
{
|
|
2364
|
+
color: opts?.color ?? "cyan",
|
|
2365
|
+
permanent: opts?.permanent
|
|
2366
|
+
}
|
|
2367
|
+
);
|
|
2368
|
+
debugDrawLine(
|
|
2369
|
+
lineSegment(
|
|
2370
|
+
pointFrom(p[0] + xOffset - 10, p[1] + yOffset + 10),
|
|
2371
|
+
pointFrom(p[0] + xOffset + 10, p[1] + yOffset - 10)
|
|
2372
|
+
),
|
|
2373
|
+
{
|
|
2374
|
+
color: opts?.color ?? "cyan",
|
|
2375
|
+
permanent: opts?.permanent
|
|
2376
|
+
}
|
|
2377
|
+
);
|
|
2378
|
+
};
|
|
2379
|
+
var debugDrawBounds = (box, opts) => {
|
|
2380
|
+
(isBounds(box) ? [box] : box).forEach(
|
|
2381
|
+
(bbox) => debugDrawLine(
|
|
2382
|
+
[
|
|
2383
|
+
lineSegment(
|
|
2384
|
+
pointFrom(bbox[0], bbox[1]),
|
|
2385
|
+
pointFrom(bbox[2], bbox[1])
|
|
2386
|
+
),
|
|
2387
|
+
lineSegment(
|
|
2388
|
+
pointFrom(bbox[2], bbox[1]),
|
|
2389
|
+
pointFrom(bbox[2], bbox[3])
|
|
2390
|
+
),
|
|
2391
|
+
lineSegment(
|
|
2392
|
+
pointFrom(bbox[2], bbox[3]),
|
|
2393
|
+
pointFrom(bbox[0], bbox[3])
|
|
2394
|
+
),
|
|
2395
|
+
lineSegment(
|
|
2396
|
+
pointFrom(bbox[0], bbox[3]),
|
|
2397
|
+
pointFrom(bbox[0], bbox[1])
|
|
2398
|
+
)
|
|
2399
|
+
],
|
|
2400
|
+
{
|
|
2401
|
+
color: opts?.color ?? "green",
|
|
2402
|
+
permanent: !!opts?.permanent
|
|
2403
|
+
}
|
|
2404
|
+
)
|
|
2405
|
+
);
|
|
2406
|
+
};
|
|
2407
|
+
var debugDrawPoints = ({
|
|
2408
|
+
x,
|
|
2409
|
+
y,
|
|
2410
|
+
points
|
|
2411
|
+
}, options) => {
|
|
2412
|
+
points.forEach(
|
|
2413
|
+
(p) => debugDrawPoint(pointFrom(x + p[0], y + p[1]), options)
|
|
2414
|
+
);
|
|
2415
|
+
};
|
|
2416
|
+
var debugCloseFrame = () => {
|
|
2417
|
+
window.visualDebug?.data.push([]);
|
|
2418
|
+
};
|
|
2419
|
+
var debugClear = () => {
|
|
2420
|
+
if (window.visualDebug?.data) {
|
|
2421
|
+
window.visualDebug.data = [];
|
|
2422
|
+
}
|
|
2423
|
+
};
|
|
2424
|
+
var addToCurrentFrame = (element) => {
|
|
2425
|
+
if (window.visualDebug?.data && window.visualDebug.data.length === 0) {
|
|
2426
|
+
window.visualDebug.data[0] = [];
|
|
2427
|
+
}
|
|
2428
|
+
window.visualDebug?.data && window.visualDebug.data[window.visualDebug.data.length - 1].push(element);
|
|
2429
|
+
};
|
|
2430
|
+
export {
|
|
2431
|
+
ACTIVE_THRESHOLD,
|
|
2432
|
+
ALLOWED_PASTE_MIME_TYPES,
|
|
2433
|
+
APP_NAME,
|
|
2434
|
+
ARROW_LABEL_FONT_SIZE_TO_MIN_WIDTH_RATIO,
|
|
2435
|
+
ARROW_LABEL_WIDTH_FRACTION,
|
|
2436
|
+
ARROW_TYPE,
|
|
2437
|
+
BIND_MODE_TIMEOUT,
|
|
2438
|
+
BOUND_TEXT_PADDING,
|
|
2439
|
+
BinaryHeap,
|
|
2440
|
+
CANVAS_ONLY_ACTIONS,
|
|
2441
|
+
CANVAS_PALETTE_SHADE_INDEXES,
|
|
2442
|
+
CANVAS_SEARCH_TAB,
|
|
2443
|
+
CJK_HAND_DRAWN_FALLBACK_FONT,
|
|
2444
|
+
CLASSES,
|
|
2445
|
+
CODES,
|
|
2446
|
+
COLORS_PER_ROW,
|
|
2447
|
+
COLOR_CHARCOAL_BLACK,
|
|
2448
|
+
COLOR_OUTLINE_CONTRAST_THRESHOLD,
|
|
2449
|
+
COLOR_PALETTE,
|
|
2450
|
+
COLOR_VOICE_CALL,
|
|
2451
|
+
COLOR_WHITE,
|
|
2452
|
+
CURSOR_TYPE,
|
|
2453
|
+
DEFAULT_ADAPTIVE_RADIUS,
|
|
2454
|
+
DEFAULT_CANVAS_BACKGROUND_PICKS,
|
|
2455
|
+
DEFAULT_CHART_COLOR_INDEX,
|
|
2456
|
+
DEFAULT_COLLISION_THRESHOLD,
|
|
2457
|
+
DEFAULT_ELEMENT_BACKGROUND_COLOR_INDEX,
|
|
2458
|
+
DEFAULT_ELEMENT_BACKGROUND_COLOR_PALETTE,
|
|
2459
|
+
DEFAULT_ELEMENT_BACKGROUND_PICKS,
|
|
2460
|
+
DEFAULT_ELEMENT_PROPS,
|
|
2461
|
+
DEFAULT_ELEMENT_STROKE_COLOR_INDEX,
|
|
2462
|
+
DEFAULT_ELEMENT_STROKE_COLOR_PALETTE,
|
|
2463
|
+
DEFAULT_ELEMENT_STROKE_PICKS,
|
|
2464
|
+
DEFAULT_EXPORT_PADDING,
|
|
2465
|
+
DEFAULT_FILENAME,
|
|
2466
|
+
DEFAULT_FONT_FAMILY,
|
|
2467
|
+
DEFAULT_FONT_SIZE,
|
|
2468
|
+
DEFAULT_GRID_SIZE,
|
|
2469
|
+
DEFAULT_GRID_STEP,
|
|
2470
|
+
DEFAULT_LASER_COLOR,
|
|
2471
|
+
DEFAULT_MAX_IMAGE_WIDTH_OR_HEIGHT,
|
|
2472
|
+
DEFAULT_PROPORTIONAL_RADIUS,
|
|
2473
|
+
DEFAULT_REDUCED_GLOBAL_ALPHA,
|
|
2474
|
+
DEFAULT_SIDEBAR,
|
|
2475
|
+
DEFAULT_TEXT_ALIGN,
|
|
2476
|
+
DEFAULT_TRANSFORM_HANDLE_SPACING,
|
|
2477
|
+
DEFAULT_UI_OPTIONS,
|
|
2478
|
+
DEFAULT_VERSION,
|
|
2479
|
+
DEFAULT_VERTICAL_ALIGN,
|
|
2480
|
+
DOUBLE_TAP_POSITION_THRESHOLD,
|
|
2481
|
+
DRAGGING_THRESHOLD,
|
|
2482
|
+
EDITOR_LS_KEYS,
|
|
2483
|
+
ELEMENTS_PALETTE_SHADE_INDEXES,
|
|
2484
|
+
ELEMENT_LINK_KEY,
|
|
2485
|
+
ELEMENT_READY_TO_ERASE_OPACITY,
|
|
2486
|
+
ELEMENT_SHIFT_TRANSLATE_AMOUNT,
|
|
2487
|
+
ELEMENT_TRANSLATE_AMOUNT,
|
|
2488
|
+
ENCRYPTION_KEY_BITS,
|
|
2489
|
+
ENV,
|
|
2490
|
+
EPSILON,
|
|
2491
|
+
EVENT,
|
|
2492
|
+
EXPORT_DATA_TYPES,
|
|
2493
|
+
EXPORT_IMAGE_TYPES,
|
|
2494
|
+
EXPORT_SCALES,
|
|
2495
|
+
Emitter,
|
|
2496
|
+
FONT_FAMILY,
|
|
2497
|
+
FONT_FAMILY_FALLBACKS,
|
|
2498
|
+
FONT_FAMILY_GENERIC_FALLBACKS,
|
|
2499
|
+
FONT_METADATA,
|
|
2500
|
+
FONT_SIZES,
|
|
2501
|
+
FRAME_STYLE,
|
|
2502
|
+
GOOGLE_FONTS_RANGES,
|
|
2503
|
+
HYPERLINK_TOOLTIP_DELAY,
|
|
2504
|
+
IDLE_THRESHOLD,
|
|
2505
|
+
IMAGE_MIME_TYPES,
|
|
2506
|
+
IMAGE_RENDER_TIMEOUT,
|
|
2507
|
+
KEYS,
|
|
2508
|
+
KeyCodeMap,
|
|
2509
|
+
LIBRARY_DISABLED_TYPES,
|
|
2510
|
+
LIBRARY_SIDEBAR_TAB,
|
|
2511
|
+
LINE_CONFIRM_THRESHOLD,
|
|
2512
|
+
LINE_POLYGON_POINT_MERGE_DISTANCE,
|
|
2513
|
+
LOCAL_FONT_PROTOCOL,
|
|
2514
|
+
MAX_ALLOWED_FILE_BYTES,
|
|
2515
|
+
MAX_CUSTOM_COLORS_USED_IN_CANVAS,
|
|
2516
|
+
MAX_DECIMALS_FOR_SVG_EXPORT,
|
|
2517
|
+
MAX_ZOOM,
|
|
2518
|
+
MIME_TYPES,
|
|
2519
|
+
MINIMUM_ARROW_SIZE,
|
|
2520
|
+
MIN_FONT_SIZE,
|
|
2521
|
+
MIN_WIDTH_OR_HEIGHT,
|
|
2522
|
+
MIN_ZOOM,
|
|
2523
|
+
MOBILE_ACTION_BUTTON_BG,
|
|
2524
|
+
MONOSPACE_GENERIC_FONT,
|
|
2525
|
+
MQ_MAX_HEIGHT_LANDSCAPE,
|
|
2526
|
+
MQ_MAX_MOBILE,
|
|
2527
|
+
MQ_MAX_TABLET,
|
|
2528
|
+
MQ_MAX_WIDTH_LANDSCAPE,
|
|
2529
|
+
MQ_MIN_TABLET,
|
|
2530
|
+
MQ_MIN_WIDTH_DESKTOP,
|
|
2531
|
+
MQ_RIGHT_SIDEBAR_MIN_WIDTH,
|
|
2532
|
+
ORIG_ID,
|
|
2533
|
+
POINTER_BUTTON,
|
|
2534
|
+
POINTER_EVENTS,
|
|
2535
|
+
PromisePool,
|
|
2536
|
+
Queue,
|
|
2537
|
+
ROUGHNESS,
|
|
2538
|
+
ROUNDNESS,
|
|
2539
|
+
SANS_SERIF_GENERIC_FONT,
|
|
2540
|
+
SCROLL_TIMEOUT,
|
|
2541
|
+
SHIFT_LOCKING_ANGLE,
|
|
2542
|
+
SIDE_RESIZING_THRESHOLD,
|
|
2543
|
+
STATS_PANELS,
|
|
2544
|
+
STRING_MIME_TYPES,
|
|
2545
|
+
STROKE_WIDTH,
|
|
2546
|
+
SVG_DOCUMENT_PREAMBLE,
|
|
2547
|
+
SVG_NS,
|
|
2548
|
+
TAP_TWICE_TIMEOUT,
|
|
2549
|
+
TEXT_ALIGN,
|
|
2550
|
+
TEXT_AUTOWRAP_THRESHOLD,
|
|
2551
|
+
TEXT_TO_CENTER_SNAP_THRESHOLD,
|
|
2552
|
+
THEME,
|
|
2553
|
+
THEME_FILTER,
|
|
2554
|
+
TITLE_TIMEOUT,
|
|
2555
|
+
TOOL_TYPE,
|
|
2556
|
+
TOUCH_CTX_MENU_TIMEOUT,
|
|
2557
|
+
URL_HASH_KEYS,
|
|
2558
|
+
URL_QUERY_KEYS,
|
|
2559
|
+
UserIdleState,
|
|
2560
|
+
VERSIONS,
|
|
2561
|
+
VERSION_TIMEOUT,
|
|
2562
|
+
VERTICAL_ALIGN,
|
|
2563
|
+
WINDOWS_EMOJI_FALLBACK_FONT,
|
|
2564
|
+
YOUTUBE_STATES,
|
|
2565
|
+
ZOOM_STEP,
|
|
2566
|
+
addEventListener,
|
|
2567
|
+
allowFullScreen,
|
|
2568
|
+
arrayToList,
|
|
2569
|
+
arrayToMap,
|
|
2570
|
+
arrayToMapWithIndex,
|
|
2571
|
+
arrayToObject,
|
|
2572
|
+
assertNever,
|
|
2573
|
+
bytesToHexString,
|
|
2574
|
+
capitalizeString,
|
|
2575
|
+
castArray,
|
|
2576
|
+
chunk,
|
|
2577
|
+
cloneJSON,
|
|
2578
|
+
composeEventHandlers,
|
|
2579
|
+
createUserAgentDescriptor,
|
|
2580
|
+
debounce,
|
|
2581
|
+
debugClear,
|
|
2582
|
+
debugCloseFrame,
|
|
2583
|
+
debugDrawBounds,
|
|
2584
|
+
debugDrawCubicBezier,
|
|
2585
|
+
debugDrawLine,
|
|
2586
|
+
debugDrawPoint,
|
|
2587
|
+
debugDrawPoints,
|
|
2588
|
+
deriveStylesPanelMode,
|
|
2589
|
+
distance,
|
|
2590
|
+
easeOut,
|
|
2591
|
+
easeToValuesRAF,
|
|
2592
|
+
escapeDoubleQuotes,
|
|
2593
|
+
exitFullScreen,
|
|
2594
|
+
findIndex,
|
|
2595
|
+
findLastIndex,
|
|
2596
|
+
focusNearestParent,
|
|
2597
|
+
getAllColorsSpecificShade,
|
|
2598
|
+
getDateTime,
|
|
2599
|
+
getExportSource,
|
|
2600
|
+
getFeatureFlag,
|
|
2601
|
+
getFontFamilyFallbacks,
|
|
2602
|
+
getFontFamilyString,
|
|
2603
|
+
getFontString,
|
|
2604
|
+
getFormFactor,
|
|
2605
|
+
getFrame,
|
|
2606
|
+
getGenericFontFamilyFallback,
|
|
2607
|
+
getGlobalCSSVariable,
|
|
2608
|
+
getGridPoint,
|
|
2609
|
+
getLineHeight,
|
|
2610
|
+
getNearestScrollableContainer,
|
|
2611
|
+
getSizeFromPoints,
|
|
2612
|
+
getSpecificColorShades,
|
|
2613
|
+
getSvgPathFromStroke,
|
|
2614
|
+
getUpdatedTimestamp,
|
|
2615
|
+
getVersion,
|
|
2616
|
+
getVerticalOffset,
|
|
2617
|
+
invariant,
|
|
2618
|
+
isAndroid,
|
|
2619
|
+
isAnyTrue,
|
|
2620
|
+
isArrowKey,
|
|
2621
|
+
isBounds,
|
|
2622
|
+
isBrave,
|
|
2623
|
+
isChrome,
|
|
2624
|
+
isDarwin,
|
|
2625
|
+
isDevEnv,
|
|
2626
|
+
isFirefox,
|
|
2627
|
+
isFullScreen,
|
|
2628
|
+
isIOS,
|
|
2629
|
+
isInputLike,
|
|
2630
|
+
isInteractive,
|
|
2631
|
+
isLatinChar,
|
|
2632
|
+
isLocalLink,
|
|
2633
|
+
isMemberOf,
|
|
2634
|
+
isMobileBreakpoint,
|
|
2635
|
+
isPrimitive,
|
|
2636
|
+
isProdEnv,
|
|
2637
|
+
isPromiseLike,
|
|
2638
|
+
isRTL,
|
|
2639
|
+
isReadonlyArray,
|
|
2640
|
+
isRunningInIframe,
|
|
2641
|
+
isSafari,
|
|
2642
|
+
isSelectionLikeTool,
|
|
2643
|
+
isServerEnv,
|
|
2644
|
+
isShallowEqual,
|
|
2645
|
+
isTabletBreakpoint,
|
|
2646
|
+
isTestEnv,
|
|
2647
|
+
isToolIcon,
|
|
2648
|
+
isTransparent,
|
|
2649
|
+
isWindows,
|
|
2650
|
+
isWritableElement,
|
|
2651
|
+
loadDesktopUIModePreference,
|
|
2652
|
+
mapFind,
|
|
2653
|
+
matchKey,
|
|
2654
|
+
memoize,
|
|
2655
|
+
muteFSAbortError,
|
|
2656
|
+
nFormatter,
|
|
2657
|
+
nextAnimationFrame,
|
|
2658
|
+
normalizeEOL,
|
|
2659
|
+
normalizeLink,
|
|
2660
|
+
preventUnload,
|
|
2661
|
+
promiseTry,
|
|
2662
|
+
queryFocusableElements,
|
|
2663
|
+
randomId,
|
|
2664
|
+
randomInteger,
|
|
2665
|
+
reduceToCommonValue,
|
|
2666
|
+
removeSelection,
|
|
2667
|
+
rescalePoints,
|
|
2668
|
+
reseed,
|
|
2669
|
+
resolvablePromise,
|
|
2670
|
+
rgbToHex,
|
|
2671
|
+
safelyParseJSON,
|
|
2672
|
+
sceneCoordsToViewportCoords,
|
|
2673
|
+
selectNode,
|
|
2674
|
+
setDateTimeForTests,
|
|
2675
|
+
setDesktopUIMode,
|
|
2676
|
+
setFeatureFlag,
|
|
2677
|
+
shouldMaintainAspectRatio,
|
|
2678
|
+
shouldResizeFromCenter,
|
|
2679
|
+
shouldRotateWithDiscreteAngle,
|
|
2680
|
+
sizeOf,
|
|
2681
|
+
supportsEmoji,
|
|
2682
|
+
supportsResizeObserver,
|
|
2683
|
+
throttleRAF,
|
|
2684
|
+
toArray,
|
|
2685
|
+
toBrandedType,
|
|
2686
|
+
toIterable,
|
|
2687
|
+
toValidURL,
|
|
2688
|
+
tupleToCoors,
|
|
2689
|
+
updateActiveTool,
|
|
2690
|
+
updateObject,
|
|
2691
|
+
updateStable,
|
|
2692
|
+
viewportCoordsToSceneCoords,
|
|
2693
|
+
wrapEvent
|
|
2694
|
+
};
|
|
2695
|
+
//# sourceMappingURL=index.js.map
|