@excalidraw/math 0.18.0-414182f → 0.18.0-43a92e6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/dev/index.js +363 -163
- package/dist/dev/index.js.map +4 -4
- package/dist/prod/index.js +1 -1
- package/dist/types/common/debug.d.ts +21 -0
- package/dist/types/common/src/appEventBus.d.ts +27 -0
- package/dist/types/common/src/bounds.d.ts +10 -0
- package/dist/types/common/src/colors.d.ts +81 -39
- package/dist/types/common/src/constants.d.ts +92 -31
- package/dist/types/common/src/editorInterface.d.ts +34 -0
- package/dist/types/common/src/font-metadata.d.ts +1 -3
- package/dist/types/common/src/index.d.ts +5 -0
- package/dist/types/common/src/keys.d.ts +5 -1
- package/dist/types/common/src/points.d.ts +1 -1
- package/dist/types/common/src/random.d.ts +7 -0
- package/dist/types/common/src/utility-types.d.ts +0 -1
- package/dist/types/common/src/utils.d.ts +52 -77
- package/dist/types/common/src/versionedSnapshotStore.d.ts +17 -0
- package/dist/types/element/src/Scene.d.ts +12 -8
- package/dist/types/element/src/align.d.ts +2 -2
- package/dist/types/element/src/arrowEndpointText.d.ts +49 -0
- package/dist/types/element/src/arrowheads.d.ts +3 -0
- package/dist/types/element/src/arrows/focus.d.ts +30 -0
- package/dist/types/element/src/arrows/helpers.d.ts +5 -0
- package/dist/types/element/src/binding.d.ts +85 -51
- package/dist/types/element/src/bounds.d.ts +27 -18
- package/dist/types/element/src/bucketFill.d.ts +110 -0
- package/dist/types/element/src/collision.d.ts +17 -3
- package/dist/types/element/src/comparisons.d.ts +10 -7
- package/dist/types/element/src/convertToShape.d.ts +23 -0
- package/dist/types/element/src/cropElement.d.ts +36 -4
- package/dist/types/element/src/delta.d.ts +23 -1
- package/dist/types/element/src/distribute.d.ts +3 -2
- package/dist/types/element/src/dragElements.d.ts +30 -3
- package/dist/types/element/src/duplicate.d.ts +67 -6
- package/dist/types/element/src/elbowArrow.d.ts +2 -0
- package/dist/types/element/src/embeddable.d.ts +2 -2
- package/dist/types/element/src/flowchart.d.ts +11 -7
- package/dist/types/element/src/fractionalIndex.d.ts +4 -4
- package/dist/types/element/src/frame.d.ts +16 -11
- package/dist/types/element/src/groups.d.ts +10 -15
- package/dist/types/element/src/heading.d.ts +2 -1
- package/dist/types/element/src/image.d.ts +1 -11
- package/dist/types/element/src/index.d.ts +10 -4
- package/dist/types/element/src/linearElementEditor.d.ts +48 -30
- package/dist/types/element/src/listMarker.d.ts +34 -0
- package/dist/types/element/src/mutateElement.d.ts +6 -2
- package/dist/types/element/src/newElement.d.ts +59 -9
- package/dist/types/element/src/renderElement.d.ts +23 -12
- package/dist/types/element/src/resizeElements.d.ts +18 -11
- package/dist/types/element/src/resizeTest.d.ts +6 -5
- package/dist/types/element/src/selection.d.ts +11 -17
- package/dist/types/element/src/shape.d.ts +36 -9
- package/dist/types/element/src/sizeHelpers.d.ts +6 -0
- package/dist/types/element/src/sortElements.d.ts +10 -0
- package/dist/types/element/src/stickyNote.d.ts +183 -0
- package/dist/types/element/src/textElement.d.ts +21 -10
- package/dist/types/element/src/textMeasurements.d.ts +1 -3
- package/dist/types/element/src/textWrapping.d.ts +26 -0
- package/dist/types/{excalidraw/data → element/src}/transform.d.ts +27 -8
- package/dist/types/element/src/transformHandles.d.ts +8 -27
- package/dist/types/element/src/typeChecks.d.ts +30 -31
- package/dist/types/element/src/types.d.ts +55 -20
- package/dist/types/element/src/utils.d.ts +22 -6
- package/dist/types/element/src/zindex.d.ts +7 -1
- package/dist/types/excalidraw/actions/actionAddToLibrary.d.ts +248 -219
- package/dist/types/excalidraw/actions/actionAlign.d.ts +12 -13
- package/dist/types/excalidraw/actions/actionBoundText.d.ts +116 -272
- package/dist/types/excalidraw/actions/actionCanvas.d.ts +549 -1582
- package/dist/types/excalidraw/actions/actionClipboard.d.ts +177 -899
- package/dist/types/excalidraw/actions/actionCropEditor.d.ts +73 -64
- package/dist/types/excalidraw/actions/actionDeleteSelected.d.ts +4 -562
- package/dist/types/excalidraw/actions/actionDeselect.d.ts +182 -0
- package/dist/types/excalidraw/actions/actionDistribute.d.ts +4 -6
- package/dist/types/excalidraw/actions/actionDuplicateSelection.d.ts +3 -4
- package/dist/types/excalidraw/actions/actionElementLink.d.ts +80 -77
- package/dist/types/excalidraw/actions/actionElementLock.d.ts +149 -130
- package/dist/types/excalidraw/actions/actionExport.d.ts +230 -1416
- package/dist/types/excalidraw/actions/actionFinalize.d.ts +11 -394
- package/dist/types/excalidraw/actions/actionFlip.d.ts +2 -3
- package/dist/types/excalidraw/actions/actionFrame.d.ts +247 -875
- package/dist/types/excalidraw/actions/actionGroup.d.ts +160 -149
- package/dist/types/excalidraw/actions/actionLinearEditor.d.ts +220 -197
- package/dist/types/excalidraw/actions/actionLink.d.ts +86 -77
- package/dist/types/excalidraw/actions/actionMenu.d.ts +75 -438
- package/dist/types/excalidraw/actions/actionNavigate.d.ts +18 -359
- package/dist/types/excalidraw/actions/actionProperties.d.ts +238 -2533
- package/dist/types/excalidraw/actions/actionSelectAll.d.ts +80 -75
- package/dist/types/excalidraw/actions/actionStyles.d.ts +74 -64
- package/dist/types/excalidraw/actions/actionTextAutoResize.d.ts +4 -4
- package/dist/types/excalidraw/actions/actionToggleArrowBinding.d.ts +195 -0
- package/dist/types/excalidraw/actions/actionToggleGridMode.d.ts +88 -80
- package/dist/types/excalidraw/actions/actionToggleMidpointSnapping.d.ts +195 -0
- package/dist/types/excalidraw/actions/actionToggleObjectsSnapMode.d.ts +87 -78
- package/dist/types/excalidraw/actions/actionToggleSearchMenu.d.ts +76 -74
- package/dist/types/excalidraw/actions/actionToggleShapeSwitch.d.ts +2 -2
- package/dist/types/excalidraw/actions/actionToggleShowHints.d.ts +197 -0
- package/dist/types/excalidraw/actions/actionToggleStats.d.ts +86 -77
- package/dist/types/excalidraw/actions/actionToggleViewMode.d.ts +87 -78
- package/dist/types/excalidraw/actions/actionToggleWrap.d.ts +12 -0
- package/dist/types/excalidraw/actions/actionToggleZenMode.d.ts +87 -78
- package/dist/types/excalidraw/actions/actionZindex.d.ts +8 -9
- package/dist/types/excalidraw/actions/colorTargets.d.ts +39 -0
- package/dist/types/excalidraw/actions/index.d.ts +7 -3
- package/dist/types/excalidraw/actions/manager.d.ts +1 -0
- package/dist/types/excalidraw/actions/register.d.ts +2 -2
- package/dist/types/excalidraw/actions/shortcuts.d.ts +1 -1
- package/dist/types/excalidraw/actions/types.d.ts +11 -7
- package/dist/types/excalidraw/{animated-trail.d.ts → animatedTrail.d.ts} +4 -3
- package/dist/types/excalidraw/appState.d.ts +59 -28
- package/dist/types/excalidraw/charts/charts.bar.d.ts +2 -0
- package/dist/types/excalidraw/charts/charts.constants.d.ts +48 -0
- package/dist/types/excalidraw/charts/charts.helpers.d.ts +32 -0
- package/dist/types/excalidraw/charts/charts.line.d.ts +2 -0
- package/dist/types/excalidraw/charts/charts.parse.d.ts +10 -0
- package/dist/types/excalidraw/charts/charts.radar.d.ts +2 -0
- package/dist/types/excalidraw/charts/charts.types.d.ts +18 -0
- package/dist/types/excalidraw/charts/index.d.ts +7 -0
- package/dist/types/excalidraw/clipboard.d.ts +13 -36
- package/dist/types/excalidraw/components/Actions.d.ts +33 -11
- package/dist/types/excalidraw/components/ActiveConfirmDialog.d.ts +1 -1
- package/dist/types/excalidraw/components/App.arrowText.d.ts +70 -0
- package/dist/types/excalidraw/components/App.bucketFill.d.ts +48 -0
- package/dist/types/excalidraw/components/App.clipboard.d.ts +31 -0
- package/dist/types/excalidraw/components/App.cursor.d.ts +38 -0
- package/dist/types/excalidraw/components/App.d.ts +406 -154
- package/dist/types/excalidraw/components/App.drawshape.d.ts +55 -0
- package/dist/types/excalidraw/components/App.duplicate.d.ts +101 -0
- package/dist/types/excalidraw/components/App.flowchart.d.ts +21 -0
- package/dist/types/excalidraw/components/App.modifiers.d.ts +38 -0
- package/dist/types/excalidraw/components/App.pan.d.ts +62 -0
- package/dist/types/excalidraw/components/App.selection.d.ts +265 -0
- package/dist/types/excalidraw/components/App.selectionTool.d.ts +93 -0
- package/dist/types/excalidraw/components/App.text.d.ts +146 -0
- package/dist/types/excalidraw/components/App.textTool.d.ts +140 -0
- package/dist/types/excalidraw/components/App.toolDrag.d.ts +63 -0
- package/dist/types/excalidraw/components/App.viewport.d.ts +113 -0
- package/dist/types/excalidraw/components/App.wheel.d.ts +26 -0
- package/dist/types/excalidraw/components/App.wrap.d.ts +31 -0
- package/dist/types/excalidraw/components/AppStateObserver.d.ts +37 -0
- package/dist/types/excalidraw/components/Card.d.ts +1 -3
- package/dist/types/excalidraw/components/ColorPicker/ColorInput.d.ts +2 -4
- package/dist/types/excalidraw/components/ColorPicker/ColorPicker.d.ts +9 -4
- package/dist/types/excalidraw/components/ColorPicker/CustomColorList.d.ts +3 -1
- package/dist/types/excalidraw/components/ColorPicker/Picker.d.ts +7 -1
- package/dist/types/excalidraw/components/ColorPicker/PickerColorList.d.ts +10 -2
- package/dist/types/excalidraw/components/ColorPicker/ShadeList.d.ts +5 -2
- package/dist/types/excalidraw/components/ColorPicker/TopPicks.d.ts +8 -1
- package/dist/types/excalidraw/components/ColorPicker/colorPickerUtils.d.ts +1 -2
- package/dist/types/excalidraw/components/ColorPicker/colorTopPicksDnD.d.ts +11 -0
- package/dist/types/excalidraw/components/ColorPicker/keyboardNavHandlers.d.ts +2 -2
- package/dist/types/excalidraw/components/CommandPalette/CommandPalette.d.ts +1 -0
- package/dist/types/excalidraw/components/CommandPalette/defaultCommandPaletteItems.d.ts +1 -2
- package/dist/types/excalidraw/components/CommandPalette/types.d.ts +2 -4
- package/dist/types/excalidraw/components/ConvertElementTypePopup.d.ts +4 -4
- package/dist/types/excalidraw/components/CursorHint.d.ts +46 -0
- package/dist/types/excalidraw/components/DarkModeToggle.d.ts +1 -1
- package/dist/types/excalidraw/components/DefaultSidebar.d.ts +9 -13
- package/dist/types/excalidraw/components/ElementLinkDialog.d.ts +1 -1
- package/dist/types/excalidraw/components/Ellipsify.d.ts +1 -2
- package/dist/types/excalidraw/components/ErrorDialog.d.ts +1 -1
- package/dist/types/excalidraw/components/EyeDropper.d.ts +1 -2
- package/dist/types/excalidraw/components/FileDropOverlay.d.ts +2 -0
- package/dist/types/excalidraw/components/FilledButton.d.ts +2 -1
- package/dist/types/excalidraw/components/FontPicker/FontPicker.d.ts +5 -1
- package/dist/types/excalidraw/components/FontPicker/FontPickerList.d.ts +6 -1
- package/dist/types/excalidraw/components/FontPicker/FontPickerTrigger.d.ts +3 -1
- package/dist/types/excalidraw/components/FontPicker/fontTopPicksDnD.d.ts +12 -0
- package/dist/types/excalidraw/components/FontPicker/keyboardNavHandlers.d.ts +0 -1
- package/dist/types/excalidraw/components/HelpDialog.d.ts +1 -1
- package/dist/types/excalidraw/components/HintViewer.d.ts +4 -3
- package/dist/types/excalidraw/components/IconButton.d.ts +48 -0
- package/dist/types/excalidraw/components/IconPicker.d.ts +14 -9
- package/dist/types/excalidraw/components/InlineIcon.d.ts +3 -1
- package/dist/types/excalidraw/components/Island.d.ts +7 -0
- package/dist/types/excalidraw/components/LaserPointerButton.d.ts +2 -4
- package/dist/types/excalidraw/components/LayerUI.d.ts +6 -2
- package/dist/types/excalidraw/components/LibraryMenu.d.ts +1 -1
- package/dist/types/excalidraw/components/LibraryMenuControlButtons.d.ts +1 -1
- package/dist/types/excalidraw/components/LibraryMenuHeaderContent.d.ts +1 -2
- package/dist/types/excalidraw/components/LibraryMenuSection.d.ts +7 -3
- package/dist/types/excalidraw/components/LibraryUnit.d.ts +9 -5
- package/dist/types/excalidraw/components/LoadingMessage.d.ts +0 -1
- package/dist/types/excalidraw/components/LockButton.d.ts +3 -4
- package/dist/types/excalidraw/components/MagicButton.d.ts +0 -2
- package/dist/types/excalidraw/components/MobileMenu.d.ts +5 -7
- package/dist/types/excalidraw/components/MobileToolbar.d.ts +9 -0
- package/dist/types/excalidraw/components/Modal.d.ts +0 -1
- package/dist/types/excalidraw/components/OverwriteConfirm/OverwriteConfirm.d.ts +1 -1
- package/dist/types/excalidraw/components/OverwriteConfirm/OverwriteConfirmState.d.ts +1 -1
- package/dist/types/excalidraw/components/PasteChartDialog.d.ts +4 -5
- package/dist/types/excalidraw/components/PenModeButton.d.ts +2 -5
- package/dist/types/excalidraw/components/Popover.d.ts +2 -3
- package/dist/types/excalidraw/components/PropertiesPopover.d.ts +2 -1
- package/dist/types/excalidraw/components/{ButtonIcon.d.ts → RadioButton.d.ts} +2 -5
- package/dist/types/excalidraw/components/RadioGroup.d.ts +0 -1
- package/dist/types/excalidraw/components/RadioSelection.d.ts +4 -4
- package/dist/types/excalidraw/components/Range.d.ts +10 -4
- package/dist/types/excalidraw/components/SVGLayer.d.ts +1 -1
- package/dist/types/excalidraw/components/ScrollableList.d.ts +0 -1
- package/dist/types/excalidraw/components/SearchMenu.d.ts +1 -1
- package/dist/types/excalidraw/components/Sidebar/Sidebar.d.ts +16 -22
- package/dist/types/excalidraw/components/Sidebar/SidebarHeader.d.ts +1 -1
- package/dist/types/excalidraw/components/Sidebar/SidebarTab.d.ts +1 -2
- package/dist/types/excalidraw/components/Sidebar/SidebarTabTrigger.d.ts +1 -2
- package/dist/types/excalidraw/components/Sidebar/SidebarTabTriggers.d.ts +1 -2
- package/dist/types/excalidraw/components/Sidebar/SidebarTabs.d.ts +1 -2
- package/dist/types/excalidraw/components/Spinner.d.ts +4 -4
- package/dist/types/excalidraw/components/Stats/Angle.d.ts +2 -2
- package/dist/types/excalidraw/components/Stats/CanvasGrid.d.ts +0 -1
- package/dist/types/excalidraw/components/Stats/Collapsible.d.ts +0 -1
- package/dist/types/excalidraw/components/Stats/Dimension.d.ts +2 -2
- package/dist/types/excalidraw/components/Stats/DragInput.d.ts +2 -3
- package/dist/types/excalidraw/components/Stats/MultiAngle.d.ts +2 -2
- package/dist/types/excalidraw/components/Stats/MultiDimension.d.ts +2 -2
- package/dist/types/excalidraw/components/Stats/MultiPosition.d.ts +2 -2
- package/dist/types/excalidraw/components/Stats/Position.d.ts +3 -3
- package/dist/types/excalidraw/components/Stats/index.d.ts +7 -8
- package/dist/types/excalidraw/components/Stats/utils.d.ts +1 -1
- package/dist/types/excalidraw/components/TTDDialog/Chat/ChatHistoryMenu.d.ts +15 -0
- package/dist/types/excalidraw/components/TTDDialog/Chat/ChatInterface.d.ts +23 -0
- package/dist/types/excalidraw/components/TTDDialog/Chat/ChatMessage.d.ts +14 -0
- package/dist/types/excalidraw/components/TTDDialog/Chat/TTDChatPanel.d.ts +27 -0
- package/dist/types/excalidraw/components/TTDDialog/Chat/index.d.ts +3 -0
- package/dist/types/excalidraw/components/TTDDialog/Chat/useChatAgent.d.ts +8 -0
- package/dist/types/excalidraw/components/TTDDialog/CodeMirrorEditor.d.ts +11 -0
- package/dist/types/excalidraw/components/TTDDialog/MermaidToExcalidraw.d.ts +3 -2
- package/dist/types/excalidraw/components/TTDDialog/TTDContext.d.ts +13 -0
- package/dist/types/excalidraw/components/TTDDialog/TTDDialog.d.ts +12 -29
- package/dist/types/excalidraw/components/TTDDialog/TTDDialogInput.d.ts +3 -3
- package/dist/types/excalidraw/components/TTDDialog/TTDDialogOutput.d.ts +5 -2
- package/dist/types/excalidraw/components/TTDDialog/TTDDialogPanel.d.ts +13 -9
- package/dist/types/excalidraw/components/TTDDialog/TTDDialogTab.d.ts +1 -2
- package/dist/types/excalidraw/components/TTDDialog/TTDDialogTabTrigger.d.ts +1 -2
- package/dist/types/excalidraw/components/TTDDialog/TTDDialogTabTriggers.d.ts +1 -2
- package/dist/types/excalidraw/components/TTDDialog/TTDPreviewPanel.d.ts +9 -0
- package/dist/types/excalidraw/components/TTDDialog/TTDWelcomeMessage.d.ts +1 -0
- package/dist/types/excalidraw/components/TTDDialog/TextToDiagram.d.ts +9 -0
- package/dist/types/excalidraw/components/TTDDialog/common.d.ts +16 -16
- package/dist/types/excalidraw/components/TTDDialog/hooks/useChatManagement.d.ts +13 -0
- package/dist/types/excalidraw/components/TTDDialog/hooks/useMermaidRenderer.d.ts +14 -0
- package/dist/types/excalidraw/components/TTDDialog/hooks/useTextGeneration.d.ts +7 -0
- package/dist/types/excalidraw/components/TTDDialog/mermaid-lang-lite.d.ts +2 -0
- package/dist/types/excalidraw/components/TTDDialog/types.d.ts +95 -0
- package/dist/types/excalidraw/components/TTDDialog/useTTDChatStorage.d.ts +22 -0
- package/dist/types/excalidraw/components/TTDDialog/utils/chat.d.ts +10 -0
- package/dist/types/excalidraw/components/TTDDialog/utils/mermaidAutoFix.d.ts +1 -0
- package/dist/types/excalidraw/components/TTDDialog/utils/mermaidError.d.ts +10 -0
- package/dist/types/excalidraw/components/TTDDialog/utils/mermaidValidation.d.ts +1 -0
- package/dist/types/excalidraw/components/TextField.d.ts +1 -0
- package/dist/types/excalidraw/components/Toast.d.ts +11 -7
- package/dist/types/excalidraw/components/ToolPopover.d.ts +22 -0
- package/dist/types/excalidraw/components/Toolbar.d.ts +11 -0
- package/dist/types/excalidraw/components/Tools.d.ts +151 -0
- package/dist/types/excalidraw/components/Tooltip.d.ts +15 -1
- package/dist/types/excalidraw/components/TopPicksDnD/TopPicksContextMenu.d.ts +14 -0
- package/dist/types/excalidraw/components/TopPicksDnD/TopPicksTip.d.ts +11 -0
- package/dist/types/excalidraw/components/TopPicksDnD/topPicksDnD.d.ts +58 -0
- package/dist/types/excalidraw/components/Trans.d.ts +2 -2
- package/dist/types/excalidraw/components/UserList.d.ts +3 -2
- package/dist/types/excalidraw/components/ViewportStatusFrame/ViewportStatusFrame.d.ts +11 -0
- package/dist/types/excalidraw/components/canvases/InteractiveCanvas.d.ts +10 -4
- package/dist/types/excalidraw/components/canvases/NewElementCanvas.d.ts +3 -0
- package/dist/types/excalidraw/components/canvases/StaticCanvas.d.ts +1 -1
- package/dist/types/excalidraw/components/dropdownMenu/DropdownMenu.d.ts +47 -35
- package/dist/types/excalidraw/components/dropdownMenu/DropdownMenuContent.d.ts +7 -5
- package/dist/types/excalidraw/components/dropdownMenu/DropdownMenuGroup.d.ts +3 -3
- package/dist/types/excalidraw/components/dropdownMenu/DropdownMenuItem.d.ts +13 -22
- package/dist/types/excalidraw/components/dropdownMenu/DropdownMenuItemCheckbox.d.ts +5 -0
- package/dist/types/excalidraw/components/dropdownMenu/DropdownMenuItemContent.d.ts +5 -4
- package/dist/types/excalidraw/components/dropdownMenu/DropdownMenuItemContentRadio.d.ts +2 -2
- package/dist/types/excalidraw/components/dropdownMenu/DropdownMenuItemCustom.d.ts +2 -2
- package/dist/types/excalidraw/components/dropdownMenu/DropdownMenuItemLink.d.ts +6 -6
- package/dist/types/excalidraw/components/dropdownMenu/DropdownMenuSub.d.ts +23 -0
- package/dist/types/excalidraw/components/dropdownMenu/DropdownMenuSubContent.d.ts +8 -0
- package/dist/types/excalidraw/components/dropdownMenu/DropdownMenuSubTrigger.d.ts +12 -0
- package/dist/types/excalidraw/components/dropdownMenu/DropdownMenuTrigger.d.ts +3 -4
- package/dist/types/excalidraw/components/dropdownMenu/common.d.ts +2 -2
- package/dist/types/excalidraw/components/dropdownMenu/dropdownMenuUtils.d.ts +2 -0
- package/dist/types/excalidraw/components/footer/Footer.d.ts +3 -1
- package/dist/types/excalidraw/components/hoc/withInternalFallback.d.ts +1 -1
- package/dist/types/excalidraw/components/hyperlink/helpers.d.ts +3 -3
- package/dist/types/excalidraw/components/icons.d.ts +56 -22
- package/dist/types/excalidraw/components/main-menu/DefaultItems.d.ts +26 -3
- package/dist/types/excalidraw/components/main-menu/MainMenu.d.ts +39 -35
- package/dist/types/excalidraw/components/positionElementBesideCursor.d.ts +26 -0
- package/dist/types/excalidraw/components/shapeActionPredicates.d.ts +39 -0
- package/dist/types/excalidraw/data/blob.d.ts +373 -8
- package/dist/types/excalidraw/data/encode.d.ts +4 -4
- package/dist/types/excalidraw/data/encryption.d.ts +5 -5
- package/dist/types/excalidraw/data/filesystem.d.ts +5 -7
- package/dist/types/excalidraw/data/index.d.ts +8 -9
- package/dist/types/excalidraw/data/json.d.ts +192 -3
- package/dist/types/excalidraw/data/library.d.ts +25 -10
- package/dist/types/excalidraw/data/resave.d.ts +7 -2
- package/dist/types/excalidraw/data/restore.d.ts +25 -10
- package/dist/types/excalidraw/data/types.d.ts +4 -1
- package/dist/types/excalidraw/drawShapeTrail.d.ts +16 -0
- package/dist/types/excalidraw/editor-jotai.d.ts +11 -11
- package/dist/types/excalidraw/eraser/index.d.ts +2 -3
- package/dist/types/excalidraw/errors.d.ts +14 -0
- package/dist/types/excalidraw/fonts/Fonts.d.ts +3 -2
- package/dist/types/excalidraw/hooks/useAppStateValue.d.ts +29 -0
- package/dist/types/excalidraw/hooks/useLibraryItemSvg.d.ts +2 -2
- package/dist/types/excalidraw/hooks/useOutsideClick.d.ts +4 -3
- package/dist/types/excalidraw/hooks/useScrollPosition.d.ts +1 -2
- package/dist/types/excalidraw/hooks/useTextEditorFocus.d.ts +14 -0
- package/dist/types/excalidraw/i18n.d.ts +2 -2
- package/dist/types/excalidraw/{laser-trails.d.ts → laserTrails.d.ts} +5 -7
- package/dist/types/excalidraw/lasso/index.d.ts +2 -3
- package/dist/types/excalidraw/lasso/utils.d.ts +2 -0
- package/dist/types/excalidraw/renderOverrides.d.ts +9 -0
- package/dist/types/excalidraw/renderer/animation.d.ts +16 -0
- package/dist/types/excalidraw/renderer/helpers.d.ts +31 -8
- package/dist/types/excalidraw/renderer/interactiveScene.d.ts +7 -15
- package/dist/types/excalidraw/scene/Renderer.d.ts +491 -19
- package/dist/types/excalidraw/scene/export.d.ts +4 -4
- package/dist/types/excalidraw/scene/index.d.ts +2 -2
- package/dist/types/excalidraw/scene/types.d.ts +28 -8
- package/dist/types/excalidraw/shortcut.d.ts +1 -0
- package/dist/types/excalidraw/snapping.d.ts +12 -12
- package/dist/types/excalidraw/subset/harfbuzz/harfbuzz-bindings.d.ts +1 -1
- package/dist/types/excalidraw/subset/harfbuzz/harfbuzz-loader.d.ts +1 -1
- package/dist/types/excalidraw/subset/harfbuzz/harfbuzz-wasm.d.ts +1 -1
- package/dist/types/excalidraw/subset/woff2/woff2-loader.d.ts +2 -2
- package/dist/types/excalidraw/subset/woff2/woff2-wasm.d.ts +1 -1
- package/dist/types/excalidraw/textAutoResizeHandle.d.ts +15 -0
- package/dist/types/excalidraw/types.d.ts +672 -61
- package/dist/types/excalidraw/viewport.d.ts +302 -0
- package/dist/types/excalidraw/wysiwyg/textWysiwyg.d.ts +19 -5
- package/dist/types/fractional-indexing/src/index.d.ts +29 -0
- package/dist/types/laser-pointer/src/index.d.ts +2 -0
- package/dist/types/laser-pointer/src/math.d.ts +16 -0
- package/dist/types/laser-pointer/src/simplify.d.ts +2 -0
- package/dist/types/laser-pointer/src/state.d.ts +36 -0
- package/dist/types/math/src/constants.d.ts +0 -1
- package/dist/types/math/src/curve.d.ts +23 -13
- package/dist/types/math/src/index.d.ts +1 -0
- package/dist/types/math/src/pca.d.ts +79 -0
- package/dist/types/math/src/point.d.ts +8 -2
- package/dist/types/math/src/polygon.d.ts +26 -2
- package/dist/types/math/src/range.d.ts +1 -3
- package/dist/types/math/src/segment.d.ts +10 -3
- package/dist/types/math/src/types.d.ts +25 -1
- package/dist/types/utils/src/export.d.ts +9 -8
- package/dist/types/utils/src/index.d.ts +1 -2
- package/dist/types/utils/src/shape.d.ts +8 -8
- package/package.json +2 -2
- package/dist/types/excalidraw/actions/actionEmbeddable.d.ts +0 -185
- package/dist/types/excalidraw/animation-frame-handler.d.ts +0 -16
- package/dist/types/excalidraw/charts.d.ts +0 -27
- package/dist/types/excalidraw/components/DiagramToCodePlugin/DiagramToCodePlugin.d.ts +0 -4
- package/dist/types/excalidraw/components/ExcalidrawLogo.d.ts +0 -16
- package/dist/types/excalidraw/components/FollowMode/FollowMode.d.ts +0 -10
- package/dist/types/excalidraw/components/HandButton.d.ts +0 -10
- package/dist/types/excalidraw/components/InitializeApp.d.ts +0 -10
- package/dist/types/excalidraw/components/TTDDialog/TTDDialogTrigger.d.ts +0 -9
- package/dist/types/excalidraw/components/ToolButton.d.ts +0 -49
- package/dist/types/excalidraw/components/footer/FooterCenter.d.ts +0 -8
- package/dist/types/excalidraw/components/live-collaboration/LiveCollaborationTrigger.d.ts +0 -10
- package/dist/types/excalidraw/components/shapes.d.ts +0 -190
- package/dist/types/excalidraw/components/welcome-screen/WelcomeScreen.Center.d.ts +0 -58
- package/dist/types/excalidraw/components/welcome-screen/WelcomeScreen.Hints.d.ts +0 -19
- package/dist/types/excalidraw/components/welcome-screen/WelcomeScreen.d.ts +0 -85
- package/dist/types/excalidraw/cursor.d.ts +0 -5
- package/dist/types/excalidraw/data/reconcile.d.ts +0 -7
- package/dist/types/excalidraw/index.d.ts +0 -47
- package/dist/types/excalidraw/polyfill.d.ts +0 -2
- package/dist/types/excalidraw/scene/scroll.d.ts +0 -23
- package/dist/types/excalidraw/scene/zoom.d.ts +0 -12
- package/dist/types/utils/src/bbox.d.ts +0 -9
- package/dist/types/utils/src/withinBounds.d.ts +0 -19
package/dist/dev/index.js
CHANGED
|
@@ -101,8 +101,8 @@ var vectorNormalize = (v) => {
|
|
|
101
101
|
var vectorNormal = (v) => vector(v[1], -v[0]);
|
|
102
102
|
|
|
103
103
|
// src/point.ts
|
|
104
|
-
function pointFrom(
|
|
105
|
-
return [x, y];
|
|
104
|
+
function pointFrom(xOrCoords, y) {
|
|
105
|
+
return typeof xOrCoords === "object" ? [xOrCoords.x, xOrCoords.y] : [xOrCoords, y];
|
|
106
106
|
}
|
|
107
107
|
function pointFromArray(numberArray) {
|
|
108
108
|
return numberArray.length === 2 ? pointFrom(numberArray[0], numberArray[1]) : void 0;
|
|
@@ -120,7 +120,12 @@ function pointsEqual(a, b, tolerance = PRECISION) {
|
|
|
120
120
|
const abs = Math.abs;
|
|
121
121
|
return abs(a[0] - b[0]) < tolerance && abs(a[1] - b[1]) < tolerance;
|
|
122
122
|
}
|
|
123
|
-
function pointRotateRads(
|
|
123
|
+
function pointRotateRads(point, center, angle) {
|
|
124
|
+
if (!angle) {
|
|
125
|
+
return point;
|
|
126
|
+
}
|
|
127
|
+
const [x, y] = point;
|
|
128
|
+
const [cx, cy] = center;
|
|
124
129
|
return pointFrom(
|
|
125
130
|
(x - cx) * Math.cos(angle) - (y - cy) * Math.sin(angle) + cx,
|
|
126
131
|
(x - cx) * Math.sin(angle) + (y - cy) * Math.cos(angle) + cy
|
|
@@ -147,6 +152,9 @@ var pointScaleFromOrigin = (p, mid, multiplier) => pointTranslate(mid, vectorSca
|
|
|
147
152
|
var isPointWithinBounds = (p, q, r) => {
|
|
148
153
|
return q[0] <= Math.max(p[0], r[0]) && q[0] >= Math.min(p[0], r[0]) && q[1] <= Math.max(p[1], r[1]) && q[1] >= Math.min(p[1], r[1]);
|
|
149
154
|
};
|
|
155
|
+
var isValidPoint = (point) => {
|
|
156
|
+
return Array.isArray(point) && point.length === 2 && isFiniteNumber(point[0]) && isFiniteNumber(point[1]);
|
|
157
|
+
};
|
|
150
158
|
|
|
151
159
|
// src/constants.ts
|
|
152
160
|
var LegendreGaussN24TValues = [
|
|
@@ -206,41 +214,41 @@ var LegendreGaussN24CValues = [
|
|
|
206
214
|
function curve(a, b, c, d) {
|
|
207
215
|
return [a, b, c, d];
|
|
208
216
|
}
|
|
209
|
-
function
|
|
210
|
-
return [
|
|
211
|
-
(f(t0 + delta, s0) - f(t0 - delta, s0)) / (2 * delta),
|
|
212
|
-
(f(t0, s0 + delta) - f(t0, s0 - delta)) / (2 * delta)
|
|
213
|
-
];
|
|
214
|
-
}
|
|
215
|
-
function solve(f, t0, s0, tolerance = 1e-3, iterLimit = 10) {
|
|
217
|
+
function solveWithAnalyticalJacobian(curve2, lineSegment2, t0, s0, tolerance = 1e-3, iterLimit = 10) {
|
|
216
218
|
let error = Infinity;
|
|
217
219
|
let iter = 0;
|
|
218
220
|
while (error >= tolerance) {
|
|
219
221
|
if (iter >= iterLimit) {
|
|
220
222
|
return null;
|
|
221
223
|
}
|
|
222
|
-
const
|
|
223
|
-
const
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
const
|
|
228
|
-
const
|
|
229
|
-
|
|
224
|
+
const bt = 1 - t0;
|
|
225
|
+
const bt2 = bt * bt;
|
|
226
|
+
const bt3 = bt2 * bt;
|
|
227
|
+
const t0_2 = t0 * t0;
|
|
228
|
+
const t0_3 = t0_2 * t0;
|
|
229
|
+
const bezierX = bt3 * curve2[0][0] + 3 * bt2 * t0 * curve2[1][0] + 3 * bt * t0_2 * curve2[2][0] + t0_3 * curve2[3][0];
|
|
230
|
+
const bezierY = bt3 * curve2[0][1] + 3 * bt2 * t0 * curve2[1][1] + 3 * bt * t0_2 * curve2[2][1] + t0_3 * curve2[3][1];
|
|
231
|
+
const lineX = lineSegment2[0][0] + s0 * (lineSegment2[1][0] - lineSegment2[0][0]);
|
|
232
|
+
const lineY = lineSegment2[0][1] + s0 * (lineSegment2[1][1] - lineSegment2[0][1]);
|
|
233
|
+
const fx = bezierX - lineX;
|
|
234
|
+
const fy = bezierY - lineY;
|
|
235
|
+
error = Math.abs(fx) + Math.abs(fy);
|
|
236
|
+
if (error < tolerance) {
|
|
237
|
+
break;
|
|
238
|
+
}
|
|
239
|
+
const dfx_dt = -3 * bt2 * curve2[0][0] + 3 * bt2 * curve2[1][0] - 6 * bt * t0 * curve2[1][0] - 3 * t0_2 * curve2[2][0] + 6 * bt * t0 * curve2[2][0] + 3 * t0_2 * curve2[3][0];
|
|
240
|
+
const dfy_dt = -3 * bt2 * curve2[0][1] + 3 * bt2 * curve2[1][1] - 6 * bt * t0 * curve2[1][1] - 3 * t0_2 * curve2[2][1] + 6 * bt * t0 * curve2[2][1] + 3 * t0_2 * curve2[3][1];
|
|
241
|
+
const dfx_ds = -(lineSegment2[1][0] - lineSegment2[0][0]);
|
|
242
|
+
const dfy_ds = -(lineSegment2[1][1] - lineSegment2[0][1]);
|
|
243
|
+
const det = dfx_dt * dfy_ds - dfx_ds * dfy_dt;
|
|
244
|
+
if (Math.abs(det) < 1e-12) {
|
|
230
245
|
return null;
|
|
231
246
|
}
|
|
232
|
-
const
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
[iJ[0][0] * b[0][0] + iJ[0][1] * b[1][0]],
|
|
238
|
-
[iJ[1][0] * b[0][0] + iJ[1][1] * b[1][0]]
|
|
239
|
-
];
|
|
240
|
-
t0 = t0 + h[0][0];
|
|
241
|
-
s0 = s0 + h[1][0];
|
|
242
|
-
const [tErr, sErr] = f(t0, s0);
|
|
243
|
-
error = Math.max(Math.abs(tErr), Math.abs(sErr));
|
|
247
|
+
const invDet = 1 / det;
|
|
248
|
+
const dt = invDet * (dfy_ds * -fx - dfx_ds * -fy);
|
|
249
|
+
const ds = invDet * (-dfy_dt * -fx + dfx_dt * -fy);
|
|
250
|
+
t0 += dt;
|
|
251
|
+
s0 += ds;
|
|
244
252
|
iter += 1;
|
|
245
253
|
}
|
|
246
254
|
return [t0, s0];
|
|
@@ -249,53 +257,63 @@ var bezierEquation = (c, t) => pointFrom(
|
|
|
249
257
|
(1 - t) ** 3 * c[0][0] + 3 * (1 - t) ** 2 * t * c[1][0] + 3 * (1 - t) * t ** 2 * c[2][0] + t ** 3 * c[3][0],
|
|
250
258
|
(1 - t) ** 3 * c[0][1] + 3 * (1 - t) ** 2 * t * c[1][1] + 3 * (1 - t) * t ** 2 * c[2][1] + t ** 3 * c[3][1]
|
|
251
259
|
);
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
260
|
+
var initial_guesses = [
|
|
261
|
+
[0.5, 0],
|
|
262
|
+
[0.2, 0],
|
|
263
|
+
[0.8, 0]
|
|
264
|
+
];
|
|
265
|
+
var calculate = ([t0, s0], l, c, tolerance = 0.01, iterLimit = 4) => {
|
|
266
|
+
const solution = solveWithAnalyticalJacobian(
|
|
267
|
+
c,
|
|
268
|
+
l,
|
|
269
|
+
t0,
|
|
270
|
+
s0,
|
|
271
|
+
tolerance,
|
|
272
|
+
iterLimit
|
|
273
|
+
);
|
|
274
|
+
if (!solution) {
|
|
275
|
+
return null;
|
|
276
|
+
}
|
|
277
|
+
const [t, s] = solution;
|
|
278
|
+
if (t < 0 || t > 1 || s < 0 || s > 1) {
|
|
279
|
+
return null;
|
|
280
|
+
}
|
|
281
|
+
return bezierEquation(c, t);
|
|
282
|
+
};
|
|
283
|
+
function curveIntersectLineSegment(c, l, opts) {
|
|
284
|
+
let solution = calculate(
|
|
285
|
+
initial_guesses[0],
|
|
286
|
+
l,
|
|
287
|
+
c,
|
|
288
|
+
opts?.tolerance,
|
|
289
|
+
opts?.iterLimit
|
|
256
290
|
);
|
|
257
|
-
const initial_guesses = [
|
|
258
|
-
[0.5, 0],
|
|
259
|
-
[0.2, 0],
|
|
260
|
-
[0.8, 0]
|
|
261
|
-
];
|
|
262
|
-
const calculate = ([t0, s0]) => {
|
|
263
|
-
const solution2 = solve(
|
|
264
|
-
(t2, s2) => {
|
|
265
|
-
const bezier_point = bezierEquation(c, t2);
|
|
266
|
-
const line_point = line2(s2);
|
|
267
|
-
return [
|
|
268
|
-
bezier_point[0] - line_point[0],
|
|
269
|
-
bezier_point[1] - line_point[1]
|
|
270
|
-
];
|
|
271
|
-
},
|
|
272
|
-
t0,
|
|
273
|
-
s0
|
|
274
|
-
);
|
|
275
|
-
if (!solution2) {
|
|
276
|
-
return null;
|
|
277
|
-
}
|
|
278
|
-
const [t, s] = solution2;
|
|
279
|
-
if (t < 0 || t > 1 || s < 0 || s > 1) {
|
|
280
|
-
return null;
|
|
281
|
-
}
|
|
282
|
-
return bezierEquation(c, t);
|
|
283
|
-
};
|
|
284
|
-
let solution = calculate(initial_guesses[0]);
|
|
285
291
|
if (solution) {
|
|
286
292
|
return [solution];
|
|
287
293
|
}
|
|
288
|
-
solution = calculate(
|
|
294
|
+
solution = calculate(
|
|
295
|
+
initial_guesses[1],
|
|
296
|
+
l,
|
|
297
|
+
c,
|
|
298
|
+
opts?.tolerance,
|
|
299
|
+
opts?.iterLimit
|
|
300
|
+
);
|
|
289
301
|
if (solution) {
|
|
290
302
|
return [solution];
|
|
291
303
|
}
|
|
292
|
-
solution = calculate(
|
|
304
|
+
solution = calculate(
|
|
305
|
+
initial_guesses[2],
|
|
306
|
+
l,
|
|
307
|
+
c,
|
|
308
|
+
opts?.tolerance,
|
|
309
|
+
opts?.iterLimit
|
|
310
|
+
);
|
|
293
311
|
if (solution) {
|
|
294
312
|
return [solution];
|
|
295
313
|
}
|
|
296
314
|
return [];
|
|
297
315
|
}
|
|
298
|
-
function
|
|
316
|
+
function curveClosestParameter(c, p, tolerance = 1e-3) {
|
|
299
317
|
const localMinimum = (min, max, f, e = tolerance) => {
|
|
300
318
|
let m = min;
|
|
301
319
|
let n = max;
|
|
@@ -312,7 +330,7 @@ function curveClosestPoint(c, p, tolerance = 1e-3) {
|
|
|
312
330
|
};
|
|
313
331
|
const maxSteps = 30;
|
|
314
332
|
let closestStep = 0;
|
|
315
|
-
for (let min = Infinity, step = 0; step
|
|
333
|
+
for (let min = Infinity, step = 0; step <= maxSteps; step++) {
|
|
316
334
|
const d = pointDistance(p, bezierEquation(c, step / maxSteps));
|
|
317
335
|
if (d < min) {
|
|
318
336
|
min = d;
|
|
@@ -321,22 +339,18 @@ function curveClosestPoint(c, p, tolerance = 1e-3) {
|
|
|
321
339
|
}
|
|
322
340
|
const t0 = Math.max((closestStep - 1) / maxSteps, 0);
|
|
323
341
|
const t1 = Math.min((closestStep + 1) / maxSteps, 1);
|
|
324
|
-
const
|
|
342
|
+
const param = localMinimum(
|
|
325
343
|
t0,
|
|
326
344
|
t1,
|
|
327
345
|
(t) => pointDistance(p, bezierEquation(c, t))
|
|
328
346
|
);
|
|
329
|
-
|
|
330
|
-
return null;
|
|
331
|
-
}
|
|
332
|
-
return bezierEquation(c, solution);
|
|
347
|
+
return param ?? closestStep / maxSteps;
|
|
333
348
|
}
|
|
334
|
-
function
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
return pointDistance(p, closest);
|
|
349
|
+
function curveClosestPoint(c, p, tolerance = 1e-3) {
|
|
350
|
+
return bezierEquation(c, curveClosestParameter(c, p, tolerance));
|
|
351
|
+
}
|
|
352
|
+
function curvePointDistance(c, p, tolerance = 1e-3) {
|
|
353
|
+
return pointDistance(p, curveClosestPoint(c, p, tolerance));
|
|
340
354
|
}
|
|
341
355
|
function isCurve(v) {
|
|
342
356
|
return Array.isArray(v) && v.length === 4 && isPoint(v[0]) && isPoint(v[1]) && isPoint(v[2]) && isPoint(v[3]);
|
|
@@ -454,14 +468,13 @@ function curveLengthAtParameter(c, t) {
|
|
|
454
468
|
}
|
|
455
469
|
return z1 * sum;
|
|
456
470
|
}
|
|
457
|
-
function curvePointAtLength(c, percent) {
|
|
471
|
+
function curvePointAtLength(c, percent, totalLength = curveLength(c)) {
|
|
458
472
|
if (percent <= 0) {
|
|
459
473
|
return bezierEquation(c, 0);
|
|
460
474
|
}
|
|
461
475
|
if (percent >= 1) {
|
|
462
476
|
return bezierEquation(c, 1);
|
|
463
477
|
}
|
|
464
|
-
const totalLength = curveLength(c);
|
|
465
478
|
const targetLength = totalLength * percent;
|
|
466
479
|
let tMin = 0;
|
|
467
480
|
let tMax = 1;
|
|
@@ -510,6 +523,9 @@ var ellipseDistanceFromPoint = (p, ellipse2) => {
|
|
|
510
523
|
vectorFromPoint(p),
|
|
511
524
|
vectorScale(vectorFromPoint(center), -1)
|
|
512
525
|
);
|
|
526
|
+
if (a === b) {
|
|
527
|
+
return Math.abs(Math.hypot(translatedPoint[0], translatedPoint[1]) - a);
|
|
528
|
+
}
|
|
513
529
|
const px = Math.abs(translatedPoint[0]);
|
|
514
530
|
const py = Math.abs(translatedPoint[1]);
|
|
515
531
|
let tx = 0.707;
|
|
@@ -525,6 +541,9 @@ var ellipseDistanceFromPoint = (p, ellipse2) => {
|
|
|
525
541
|
const qy = py - ey;
|
|
526
542
|
const r = Math.hypot(ry, rx);
|
|
527
543
|
const q = Math.hypot(qy, qx);
|
|
544
|
+
if (q === 0) {
|
|
545
|
+
break;
|
|
546
|
+
}
|
|
528
547
|
tx = Math.min(1, Math.max(0, (qx * r / q + ex) / a));
|
|
529
548
|
ty = Math.min(1, Math.max(0, (qy * r / q + ey) / b));
|
|
530
549
|
const t = Math.hypot(ty, tx);
|
|
@@ -532,8 +551,8 @@ var ellipseDistanceFromPoint = (p, ellipse2) => {
|
|
|
532
551
|
ty /= t;
|
|
533
552
|
}
|
|
534
553
|
const [minX, minY] = [
|
|
535
|
-
a * tx *
|
|
536
|
-
b * ty *
|
|
554
|
+
a * tx * (translatedPoint[0] < 0 ? -1 : 1),
|
|
555
|
+
b * ty * (translatedPoint[1] < 0 ? -1 : 1)
|
|
537
556
|
];
|
|
538
557
|
return pointDistance(pointFromVector(translatedPoint), pointFrom(minX, minY));
|
|
539
558
|
};
|
|
@@ -620,82 +639,98 @@ function linesIntersectAt(a, b) {
|
|
|
620
639
|
return null;
|
|
621
640
|
}
|
|
622
641
|
|
|
623
|
-
// src/
|
|
624
|
-
function
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
pointRotateRads(l[0], origin || pointCenter(l[0], l[1]), angle),
|
|
631
|
-
pointRotateRads(l[1], origin || pointCenter(l[0], l[1]), angle)
|
|
632
|
-
);
|
|
633
|
-
};
|
|
634
|
-
var segmentsIntersectAt = (a, b) => {
|
|
635
|
-
const a0 = vectorFromPoint(a[0]);
|
|
636
|
-
const a1 = vectorFromPoint(a[1]);
|
|
637
|
-
const b0 = vectorFromPoint(b[0]);
|
|
638
|
-
const b1 = vectorFromPoint(b[1]);
|
|
639
|
-
const r = vectorSubtract(a1, a0);
|
|
640
|
-
const s = vectorSubtract(b1, b0);
|
|
641
|
-
const denominator = vectorCross(r, s);
|
|
642
|
-
if (denominator === 0) {
|
|
643
|
-
return null;
|
|
642
|
+
// src/pca.ts
|
|
643
|
+
function centroid(points) {
|
|
644
|
+
let cx = 0;
|
|
645
|
+
let cy = 0;
|
|
646
|
+
for (const [x, y] of points) {
|
|
647
|
+
cx += x;
|
|
648
|
+
cy += y;
|
|
644
649
|
}
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
if (
|
|
649
|
-
|
|
650
|
+
return pointFrom(cx / points.length, cy / points.length);
|
|
651
|
+
}
|
|
652
|
+
function principalAxes(points) {
|
|
653
|
+
if (points.length < 2) {
|
|
654
|
+
console.error("Degenerate point set: at least two points are required");
|
|
650
655
|
}
|
|
651
|
-
const
|
|
652
|
-
|
|
653
|
-
|
|
656
|
+
const c = centroid(points);
|
|
657
|
+
let m20 = 0;
|
|
658
|
+
let m02 = 0;
|
|
659
|
+
let m11 = 0;
|
|
660
|
+
for (const [x, y] of points) {
|
|
661
|
+
const dx = x - c[0];
|
|
662
|
+
const dy = y - c[1];
|
|
663
|
+
m20 += dx * dx;
|
|
664
|
+
m02 += dy * dy;
|
|
665
|
+
m11 += dx * dy;
|
|
654
666
|
}
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
const
|
|
659
|
-
|
|
660
|
-
|
|
667
|
+
m20 /= points.length;
|
|
668
|
+
m02 /= points.length;
|
|
669
|
+
m11 /= points.length;
|
|
670
|
+
const trace = m20 + m02;
|
|
671
|
+
const diff = Math.hypot(m20 - m02, 2 * m11);
|
|
672
|
+
const majorVariance = (trace + diff) / 2;
|
|
673
|
+
const minorVariance = (trace - diff) / 2;
|
|
674
|
+
let major;
|
|
675
|
+
if (Math.abs(m11) > Number.EPSILON) {
|
|
676
|
+
major = vectorNormalize(vector(majorVariance - m02, m11));
|
|
677
|
+
} else {
|
|
678
|
+
major = m20 >= m02 ? vector(1, 0) : vector(0, 1);
|
|
661
679
|
}
|
|
662
|
-
return
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
const
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
680
|
+
return {
|
|
681
|
+
centroid: c,
|
|
682
|
+
major,
|
|
683
|
+
minor: vectorNormal(major),
|
|
684
|
+
majorVariance,
|
|
685
|
+
minorVariance
|
|
686
|
+
};
|
|
687
|
+
}
|
|
688
|
+
function principalCoords(points, axes, scale = 1) {
|
|
689
|
+
const { centroid: c, major, minor } = axes;
|
|
690
|
+
return points.map(([x, y]) => {
|
|
691
|
+
const dx = x - c[0];
|
|
692
|
+
const dy = y - c[1];
|
|
693
|
+
return [
|
|
694
|
+
(dx * major[0] + dy * major[1]) * scale,
|
|
695
|
+
(dx * minor[0] + dy * minor[1]) * scale
|
|
696
|
+
];
|
|
697
|
+
});
|
|
698
|
+
}
|
|
699
|
+
function orientPrincipalAxes(points, axes) {
|
|
700
|
+
const u = principalCoords(points, axes).map(([uu]) => uu);
|
|
701
|
+
if (skewness(u) <= 0) {
|
|
702
|
+
return axes;
|
|
676
703
|
}
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
704
|
+
const major = vectorScale(axes.major, -1);
|
|
705
|
+
return { ...axes, major, minor: vectorNormal(major) };
|
|
706
|
+
}
|
|
707
|
+
function elongation(axes) {
|
|
708
|
+
return axes.majorVariance > 0 ? axes.minorVariance / axes.majorVariance : 1;
|
|
709
|
+
}
|
|
710
|
+
function standardizedMoment(values, order) {
|
|
711
|
+
const n = values.length;
|
|
712
|
+
let mean = 0;
|
|
713
|
+
for (const v of values) {
|
|
714
|
+
mean += v;
|
|
688
715
|
}
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
return null;
|
|
716
|
+
mean /= n;
|
|
717
|
+
let variance = 0;
|
|
718
|
+
let moment = 0;
|
|
719
|
+
for (const v of values) {
|
|
720
|
+
const d = v - mean;
|
|
721
|
+
variance += d * d;
|
|
722
|
+
moment += d ** order;
|
|
697
723
|
}
|
|
698
|
-
|
|
724
|
+
variance /= n;
|
|
725
|
+
moment /= n;
|
|
726
|
+
const sigma = Math.sqrt(variance);
|
|
727
|
+
return sigma > Number.EPSILON ? moment / sigma ** order : 0;
|
|
728
|
+
}
|
|
729
|
+
function skewness(values) {
|
|
730
|
+
return standardizedMoment(values, 3);
|
|
731
|
+
}
|
|
732
|
+
function kurtosis(values) {
|
|
733
|
+
return standardizedMoment(values, 4);
|
|
699
734
|
}
|
|
700
735
|
|
|
701
736
|
// src/polygon.ts
|
|
@@ -741,21 +776,84 @@ var polygonIncludesPointNonZero = (point, polygon2) => {
|
|
|
741
776
|
}
|
|
742
777
|
return windingNumber !== 0;
|
|
743
778
|
};
|
|
744
|
-
var pointOnPolygon = (p, poly, threshold = PRECISION) => {
|
|
745
|
-
let on = false;
|
|
746
|
-
for (let i = 0, l = poly.length - 1; i < l; i++) {
|
|
747
|
-
if (pointOnLineSegment(p, lineSegment(poly[i], poly[i + 1]), threshold)) {
|
|
748
|
-
on = true;
|
|
749
|
-
break;
|
|
750
|
-
}
|
|
751
|
-
}
|
|
752
|
-
return on;
|
|
753
|
-
};
|
|
754
779
|
function polygonClose(polygon2) {
|
|
755
780
|
return polygonIsClosed(polygon2) ? polygon2 : [...polygon2, polygon2[0]];
|
|
756
781
|
}
|
|
757
|
-
function polygonIsClosed(polygon2) {
|
|
758
|
-
return pointsEqual(polygon2[0], polygon2[polygon2.length - 1]);
|
|
782
|
+
function polygonIsClosed(polygon2, tolerance = PRECISION) {
|
|
783
|
+
return pointsEqual(polygon2[0], polygon2[polygon2.length - 1], tolerance);
|
|
784
|
+
}
|
|
785
|
+
function polygonSignedArea(polygon2, tolerance = PRECISION) {
|
|
786
|
+
const pts = polygonIsClosed(polygon2, tolerance) ? polygon2.slice(0, -1) : polygon2;
|
|
787
|
+
let sum = 0;
|
|
788
|
+
for (let i = 0, j = pts.length - 1; i < pts.length; j = i++) {
|
|
789
|
+
sum += pts[j][0] * pts[i][1] - pts[i][0] * pts[j][1];
|
|
790
|
+
}
|
|
791
|
+
return sum / 2;
|
|
792
|
+
}
|
|
793
|
+
function polygonArea(polygon2, tolerance = PRECISION) {
|
|
794
|
+
return Math.abs(polygonSignedArea(polygon2, tolerance));
|
|
795
|
+
}
|
|
796
|
+
function convexHull(points) {
|
|
797
|
+
if (points.length < 3) {
|
|
798
|
+
return [...points];
|
|
799
|
+
}
|
|
800
|
+
const sorted = [...points].sort(
|
|
801
|
+
(a, b) => a[0] === b[0] ? a[1] - b[1] : a[0] - b[0]
|
|
802
|
+
);
|
|
803
|
+
const cross = (o, a, b) => (a[0] - o[0]) * (b[1] - o[1]) - (a[1] - o[1]) * (b[0] - o[0]);
|
|
804
|
+
const half = (pts) => {
|
|
805
|
+
const chain = [];
|
|
806
|
+
for (const p of pts) {
|
|
807
|
+
while (chain.length >= 2 && cross(chain[chain.length - 2], chain[chain.length - 1], p) <= 0) {
|
|
808
|
+
chain.pop();
|
|
809
|
+
}
|
|
810
|
+
chain.push(p);
|
|
811
|
+
}
|
|
812
|
+
chain.pop();
|
|
813
|
+
return chain;
|
|
814
|
+
};
|
|
815
|
+
const hull = [...half(sorted), ...half([...sorted].reverse())];
|
|
816
|
+
return hull.length >= 3 ? hull : [...points];
|
|
817
|
+
}
|
|
818
|
+
function simplifyConvexPolygon(polygon2, angleThreshold) {
|
|
819
|
+
if (polygon2.length < 3) {
|
|
820
|
+
return [...polygon2];
|
|
821
|
+
}
|
|
822
|
+
const turnAt = (i) => {
|
|
823
|
+
const prev = polygon2[(i - 1 + polygon2.length) % polygon2.length];
|
|
824
|
+
const curr = polygon2[i];
|
|
825
|
+
const next = polygon2[(i + 1) % polygon2.length];
|
|
826
|
+
const inAngle = Math.atan2(curr[1] - prev[1], curr[0] - prev[0]);
|
|
827
|
+
const outAngle = Math.atan2(next[1] - curr[1], next[0] - curr[0]);
|
|
828
|
+
return Math.abs(normalizeTurn(outAngle - inAngle));
|
|
829
|
+
};
|
|
830
|
+
let start = 0;
|
|
831
|
+
for (let i = 1; i < polygon2.length; i++) {
|
|
832
|
+
if (turnAt(i) > turnAt(start)) {
|
|
833
|
+
start = i;
|
|
834
|
+
}
|
|
835
|
+
}
|
|
836
|
+
const simplified = [];
|
|
837
|
+
let accumulated = 0;
|
|
838
|
+
for (let k = 0; k < polygon2.length; k++) {
|
|
839
|
+
const i = (start + k) % polygon2.length;
|
|
840
|
+
accumulated += turnAt(i);
|
|
841
|
+
if (accumulated >= angleThreshold) {
|
|
842
|
+
simplified.push(polygon2[i]);
|
|
843
|
+
accumulated = 0;
|
|
844
|
+
}
|
|
845
|
+
}
|
|
846
|
+
return simplified.length >= 3 ? simplified : [...polygon2];
|
|
847
|
+
}
|
|
848
|
+
function normalizeTurn(angle) {
|
|
849
|
+
let a = angle;
|
|
850
|
+
while (a > Math.PI) {
|
|
851
|
+
a -= 2 * Math.PI;
|
|
852
|
+
}
|
|
853
|
+
while (a < -Math.PI) {
|
|
854
|
+
a += 2 * Math.PI;
|
|
855
|
+
}
|
|
856
|
+
return a;
|
|
759
857
|
}
|
|
760
858
|
|
|
761
859
|
// src/range.ts
|
|
@@ -787,6 +885,91 @@ var rangeIncludesValue = (value, [min, max]) => {
|
|
|
787
885
|
return value >= min && value <= max;
|
|
788
886
|
};
|
|
789
887
|
|
|
888
|
+
// src/segment.ts
|
|
889
|
+
function lineSegment(a, b) {
|
|
890
|
+
return [a, b];
|
|
891
|
+
}
|
|
892
|
+
var isLineSegment = (segment) => Array.isArray(segment) && segment.length === 2 && isPoint(segment[0]) && isPoint(segment[1]);
|
|
893
|
+
var lineSegmentRotate = (l, angle, origin) => {
|
|
894
|
+
return lineSegment(
|
|
895
|
+
pointRotateRads(l[0], origin || pointCenter(l[0], l[1]), angle),
|
|
896
|
+
pointRotateRads(l[1], origin || pointCenter(l[0], l[1]), angle)
|
|
897
|
+
);
|
|
898
|
+
};
|
|
899
|
+
var segmentsIntersectAt = (a, b) => {
|
|
900
|
+
const a0 = vectorFromPoint(a[0]);
|
|
901
|
+
const a1 = vectorFromPoint(a[1]);
|
|
902
|
+
const b0 = vectorFromPoint(b[0]);
|
|
903
|
+
const b1 = vectorFromPoint(b[1]);
|
|
904
|
+
const r = vectorSubtract(a1, a0);
|
|
905
|
+
const s = vectorSubtract(b1, b0);
|
|
906
|
+
const denominator = vectorCross(r, s);
|
|
907
|
+
if (denominator === 0) {
|
|
908
|
+
return null;
|
|
909
|
+
}
|
|
910
|
+
const i = vectorSubtract(vectorFromPoint(b[0]), vectorFromPoint(a[0]));
|
|
911
|
+
const u = vectorCross(i, r) / denominator;
|
|
912
|
+
const t = vectorCross(i, s) / denominator;
|
|
913
|
+
if (u === 0) {
|
|
914
|
+
return null;
|
|
915
|
+
}
|
|
916
|
+
const p = vectorAdd(a0, vectorScale(r, t));
|
|
917
|
+
if (t >= 0 && t < 1 && u >= 0 && u < 1) {
|
|
918
|
+
return pointFromVector(p);
|
|
919
|
+
}
|
|
920
|
+
return null;
|
|
921
|
+
};
|
|
922
|
+
var pointOnLineSegment = (point, line2, threshold = PRECISION) => {
|
|
923
|
+
const distance = distanceToLineSegment(point, line2);
|
|
924
|
+
if (distance === 0) {
|
|
925
|
+
return true;
|
|
926
|
+
}
|
|
927
|
+
return distance < threshold;
|
|
928
|
+
};
|
|
929
|
+
var distanceToLineSegment = (point, line2) => {
|
|
930
|
+
return pointDistance(
|
|
931
|
+
point,
|
|
932
|
+
lineSegmentPointAt(line2, lineSegmentClosestParameter(point, line2))
|
|
933
|
+
);
|
|
934
|
+
};
|
|
935
|
+
function lineSegmentPointAt(line2, t) {
|
|
936
|
+
const [[x1, y1], [x2, y2]] = line2;
|
|
937
|
+
return pointFrom(x1 + t * (x2 - x1), y1 + t * (y2 - y1));
|
|
938
|
+
}
|
|
939
|
+
function lineSegmentIntersectionPoints(l, s, threshold) {
|
|
940
|
+
const candidate = linesIntersectAt(line(l[0], l[1]), line(s[0], s[1]));
|
|
941
|
+
if (!candidate || !pointOnLineSegment(candidate, s, threshold) || !pointOnLineSegment(candidate, l, threshold)) {
|
|
942
|
+
return null;
|
|
943
|
+
}
|
|
944
|
+
return candidate;
|
|
945
|
+
}
|
|
946
|
+
function lineSegmentsDistance(s1, s2) {
|
|
947
|
+
if (lineSegmentIntersectionPoints(s1, s2)) {
|
|
948
|
+
return 0;
|
|
949
|
+
}
|
|
950
|
+
return Math.min(
|
|
951
|
+
distanceToLineSegment(s1[0], s2),
|
|
952
|
+
distanceToLineSegment(s1[1], s2),
|
|
953
|
+
distanceToLineSegment(s2[0], s1),
|
|
954
|
+
distanceToLineSegment(s2[1], s1)
|
|
955
|
+
);
|
|
956
|
+
}
|
|
957
|
+
function lineSegmentClosestParameter(point, line2) {
|
|
958
|
+
const [x, y] = point;
|
|
959
|
+
const [[x1, y1], [x2, y2]] = line2;
|
|
960
|
+
const A = x - x1;
|
|
961
|
+
const B = y - y1;
|
|
962
|
+
const C = x2 - x1;
|
|
963
|
+
const D = y2 - y1;
|
|
964
|
+
const dot = A * C + B * D;
|
|
965
|
+
const len_sq = C * C + D * D;
|
|
966
|
+
let param = 0;
|
|
967
|
+
if (len_sq !== 0) {
|
|
968
|
+
param = dot / len_sq;
|
|
969
|
+
}
|
|
970
|
+
return Math.max(0, Math.min(1, param));
|
|
971
|
+
}
|
|
972
|
+
|
|
790
973
|
// src/rectangle.ts
|
|
791
974
|
function rectangle(topLeft, bottomRight) {
|
|
792
975
|
return [topLeft, bottomRight];
|
|
@@ -823,10 +1006,13 @@ export {
|
|
|
823
1006
|
average,
|
|
824
1007
|
bezierEquation,
|
|
825
1008
|
cartesian2Polar,
|
|
1009
|
+
centroid,
|
|
826
1010
|
clamp,
|
|
1011
|
+
convexHull,
|
|
827
1012
|
curve,
|
|
828
1013
|
curveCatmullRomCubicApproxPoints,
|
|
829
1014
|
curveCatmullRomQuadraticApproxPoints,
|
|
1015
|
+
curveClosestParameter,
|
|
830
1016
|
curveClosestPoint,
|
|
831
1017
|
curveIntersectLineSegment,
|
|
832
1018
|
curveLength,
|
|
@@ -843,6 +1029,7 @@ export {
|
|
|
843
1029
|
ellipseLineIntersectionPoints,
|
|
844
1030
|
ellipseSegmentInterceptPoints,
|
|
845
1031
|
ellipseTouchesPoint,
|
|
1032
|
+
elongation,
|
|
846
1033
|
isCloseTo,
|
|
847
1034
|
isCurve,
|
|
848
1035
|
isFiniteNumber,
|
|
@@ -850,14 +1037,20 @@ export {
|
|
|
850
1037
|
isPoint,
|
|
851
1038
|
isPointWithinBounds,
|
|
852
1039
|
isRightAngleRads,
|
|
1040
|
+
isValidPoint,
|
|
853
1041
|
isVector,
|
|
1042
|
+
kurtosis,
|
|
854
1043
|
line,
|
|
855
1044
|
lineSegment,
|
|
1045
|
+
lineSegmentClosestParameter,
|
|
856
1046
|
lineSegmentIntersectionPoints,
|
|
1047
|
+
lineSegmentPointAt,
|
|
857
1048
|
lineSegmentRotate,
|
|
1049
|
+
lineSegmentsDistance,
|
|
858
1050
|
linesIntersectAt,
|
|
859
1051
|
normalizeRadians,
|
|
860
1052
|
offsetPointsForQuadraticBezier,
|
|
1053
|
+
orientPrincipalAxes,
|
|
861
1054
|
pointCenter,
|
|
862
1055
|
pointDistance,
|
|
863
1056
|
pointDistanceSq,
|
|
@@ -866,16 +1059,20 @@ export {
|
|
|
866
1059
|
pointFromPair,
|
|
867
1060
|
pointFromVector,
|
|
868
1061
|
pointOnLineSegment,
|
|
869
|
-
pointOnPolygon,
|
|
870
1062
|
pointRotateDegs,
|
|
871
1063
|
pointRotateRads,
|
|
872
1064
|
pointScaleFromOrigin,
|
|
873
1065
|
pointTranslate,
|
|
874
1066
|
pointsEqual,
|
|
875
1067
|
polygon,
|
|
1068
|
+
polygonArea,
|
|
876
1069
|
polygonFromPoints,
|
|
877
1070
|
polygonIncludesPoint,
|
|
878
1071
|
polygonIncludesPointNonZero,
|
|
1072
|
+
polygonIsClosed,
|
|
1073
|
+
polygonSignedArea,
|
|
1074
|
+
principalAxes,
|
|
1075
|
+
principalCoords,
|
|
879
1076
|
radiansBetweenAngles,
|
|
880
1077
|
radiansDifference,
|
|
881
1078
|
radiansToDegrees,
|
|
@@ -891,6 +1088,9 @@ export {
|
|
|
891
1088
|
round,
|
|
892
1089
|
roundToStep,
|
|
893
1090
|
segmentsIntersectAt,
|
|
1091
|
+
simplifyConvexPolygon,
|
|
1092
|
+
skewness,
|
|
1093
|
+
standardizedMoment,
|
|
894
1094
|
triangleIncludesPoint,
|
|
895
1095
|
vector,
|
|
896
1096
|
vectorAdd,
|