@excalidraw/common 0.18.0-51ad895 → 0.18.0-51ca8ab
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 +1467 -379
- package/dist/dev/index.js.map +4 -4
- package/dist/prod/index.js +3 -3
- 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 +59 -39
- package/dist/types/common/src/constants.d.ts +27 -19
- package/dist/types/common/src/editorInterface.d.ts +1 -1
- package/dist/types/common/src/font-metadata.d.ts +1 -3
- package/dist/types/common/src/index.d.ts +4 -1
- package/dist/types/common/src/keys.d.ts +1 -1
- package/dist/types/common/src/utility-types.d.ts +0 -1
- package/dist/types/common/src/utils.d.ts +41 -77
- package/dist/types/common/src/versionedSnapshotStore.d.ts +17 -0
- package/dist/types/element/src/Scene.d.ts +11 -7
- package/dist/types/element/src/arrowheads.d.ts +3 -0
- package/dist/types/element/src/arrows/focus.d.ts +27 -0
- package/dist/types/element/src/arrows/helpers.d.ts +5 -0
- package/dist/types/element/src/binding.d.ts +19 -12
- package/dist/types/element/src/bounds.d.ts +24 -17
- package/dist/types/element/src/collision.d.ts +4 -3
- package/dist/types/element/src/comparisons.d.ts +8 -7
- package/dist/types/element/src/distribute.d.ts +2 -1
- package/dist/types/element/src/dragElements.d.ts +3 -3
- package/dist/types/element/src/duplicate.d.ts +4 -3
- package/dist/types/element/src/elbowArrow.d.ts +2 -0
- package/dist/types/element/src/fractionalIndex.d.ts +2 -2
- package/dist/types/element/src/frame.d.ts +14 -9
- 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 +4 -0
- package/dist/types/element/src/linearElementEditor.d.ts +8 -4
- package/dist/types/element/src/mutateElement.d.ts +5 -1
- package/dist/types/element/src/newElement.d.ts +7 -6
- package/dist/types/element/src/renderElement.d.ts +0 -6
- package/dist/types/element/src/resizeElements.d.ts +10 -10
- package/dist/types/element/src/resizeTest.d.ts +1 -1
- package/dist/types/element/src/selection.d.ts +10 -10
- package/dist/types/element/src/shape.d.ts +9 -8
- package/dist/types/element/src/textElement.d.ts +1 -1
- 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 +3 -3
- package/dist/types/element/src/transformHandles.d.ts +3 -23
- package/dist/types/element/src/typeChecks.d.ts +3 -4
- package/dist/types/element/src/types.d.ts +11 -2
- package/dist/types/element/src/utils.d.ts +9 -5
- package/dist/types/element/src/zindex.d.ts +1 -1
- package/dist/types/excalidraw/actions/actionAddToLibrary.d.ts +152 -207
- package/dist/types/excalidraw/actions/actionAlign.d.ts +0 -1
- package/dist/types/excalidraw/actions/actionBoundText.d.ts +79 -116
- package/dist/types/excalidraw/actions/actionCanvas.d.ts +461 -1025
- package/dist/types/excalidraw/actions/actionClipboard.d.ts +111 -148
- package/dist/types/excalidraw/actions/actionCropEditor.d.ts +38 -57
- package/dist/types/excalidraw/actions/actionDeleteSelected.d.ts +127 -184
- package/dist/types/excalidraw/actions/actionDeselect.d.ts +161 -0
- package/dist/types/excalidraw/actions/actionDistribute.d.ts +0 -1
- package/dist/types/excalidraw/actions/actionDuplicateSelection.d.ts +2 -3
- package/dist/types/excalidraw/actions/actionElementLink.d.ts +50 -73
- package/dist/types/excalidraw/actions/actionElementLock.d.ts +79 -116
- package/dist/types/excalidraw/actions/actionEmbeddable.d.ts +54 -73
- package/dist/types/excalidraw/actions/actionExport.d.ts +149 -502
- package/dist/types/excalidraw/actions/actionFinalize.d.ts +1 -2
- package/dist/types/excalidraw/actions/actionFlip.d.ts +0 -1
- package/dist/types/excalidraw/actions/actionFrame.d.ts +277 -385
- package/dist/types/excalidraw/actions/actionGroup.d.ts +83 -128
- package/dist/types/excalidraw/actions/actionLinearEditor.d.ts +169 -221
- package/dist/types/excalidraw/actions/actionLink.d.ts +56 -75
- package/dist/types/excalidraw/actions/actionMenu.d.ts +44 -67
- package/dist/types/excalidraw/actions/actionNavigate.d.ts +14 -17
- package/dist/types/excalidraw/actions/actionProperties.d.ts +105 -133
- package/dist/types/excalidraw/actions/actionSelectAll.d.ts +41 -64
- package/dist/types/excalidraw/actions/actionStyles.d.ts +37 -55
- package/dist/types/excalidraw/actions/actionTextAutoResize.d.ts +4 -4
- package/dist/types/excalidraw/actions/actionToggleArrowBinding.d.ts +174 -0
- package/dist/types/excalidraw/actions/actionToggleGridMode.d.ts +54 -73
- package/dist/types/excalidraw/actions/actionToggleMidpointSnapping.d.ts +174 -0
- package/dist/types/excalidraw/actions/actionToggleObjectsSnapMode.d.ts +54 -73
- package/dist/types/excalidraw/actions/actionToggleSearchMenu.d.ts +44 -67
- package/dist/types/excalidraw/actions/actionToggleStats.d.ts +53 -72
- package/dist/types/excalidraw/actions/actionToggleViewMode.d.ts +54 -73
- package/dist/types/excalidraw/actions/actionToggleZenMode.d.ts +54 -73
- package/dist/types/excalidraw/actions/actionZindex.d.ts +8 -9
- package/dist/types/excalidraw/actions/index.d.ts +4 -1
- package/dist/types/excalidraw/actions/manager.d.ts +1 -1
- 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 +1 -1
- package/dist/types/excalidraw/{animated-trail.d.ts → animatedTrail.d.ts} +4 -3
- package/dist/types/excalidraw/appState.d.ts +41 -37
- 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 +15 -40
- package/dist/types/excalidraw/components/Actions.d.ts +1 -1
- package/dist/types/excalidraw/components/ActiveConfirmDialog.d.ts +1 -1
- package/dist/types/excalidraw/components/App.d.ts +134 -78
- 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 +0 -1
- package/dist/types/excalidraw/components/ColorPicker/colorPickerUtils.d.ts +1 -2
- package/dist/types/excalidraw/components/ColorPicker/keyboardNavHandlers.d.ts +0 -1
- package/dist/types/excalidraw/components/CommandPalette/defaultCommandPaletteItems.d.ts +1 -2
- package/dist/types/excalidraw/components/CommandPalette/types.d.ts +1 -2
- package/dist/types/excalidraw/components/ConvertElementTypePopup.d.ts +3 -3
- 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/FilledButton.d.ts +1 -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/IconPicker.d.ts +14 -9
- package/dist/types/excalidraw/components/InlineIcon.d.ts +2 -2
- package/dist/types/excalidraw/components/Island.d.ts +7 -0
- 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/LibraryUnit.d.ts +2 -3
- package/dist/types/excalidraw/components/LoadingMessage.d.ts +0 -1
- package/dist/types/excalidraw/components/MobileToolBar.d.ts +0 -1
- 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/PropertiesPopover.d.ts +1 -1
- 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/CanvasGrid.d.ts +0 -1
- package/dist/types/excalidraw/components/Stats/Collapsible.d.ts +0 -1
- package/dist/types/excalidraw/components/Stats/DragInput.d.ts +0 -1
- package/dist/types/excalidraw/components/Stats/index.d.ts +7 -8
- 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/Toast.d.ts +11 -7
- package/dist/types/excalidraw/components/Trans.d.ts +2 -2
- package/dist/types/excalidraw/components/canvases/InteractiveCanvas.d.ts +2 -1
- package/dist/types/excalidraw/components/canvases/NewElementCanvas.d.ts +1 -0
- package/dist/types/excalidraw/components/canvases/StaticCanvas.d.ts +1 -1
- package/dist/types/excalidraw/components/dropdownMenu/DropdownMenu.d.ts +48 -38
- package/dist/types/excalidraw/components/dropdownMenu/DropdownMenuContent.d.ts +7 -6
- 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/hoc/withInternalFallback.d.ts +1 -1
- package/dist/types/excalidraw/components/hyperlink/helpers.d.ts +1 -1
- package/dist/types/excalidraw/components/icons.d.ts +41 -21
- package/dist/types/excalidraw/components/main-menu/DefaultItems.d.ts +24 -3
- package/dist/types/excalidraw/components/main-menu/MainMenu.d.ts +39 -32
- package/dist/types/excalidraw/components/shapes.d.ts +81 -1
- package/dist/types/excalidraw/data/blob.d.ts +330 -7
- 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 +4 -5
- package/dist/types/excalidraw/data/json.d.ts +172 -4
- 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/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/hooks/useLibraryItemSvg.d.ts +1 -1
- package/dist/types/excalidraw/hooks/useOutsideClick.d.ts +1 -2
- package/dist/types/excalidraw/hooks/useScrollPosition.d.ts +1 -2
- 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/renderer/animation.d.ts +5 -1
- package/dist/types/excalidraw/renderer/helpers.d.ts +6 -4
- package/dist/types/excalidraw/renderer/interactiveScene.d.ts +8 -6
- package/dist/types/excalidraw/scene/Renderer.d.ts +428 -18
- package/dist/types/excalidraw/scene/export.d.ts +2 -2
- package/dist/types/excalidraw/scene/index.d.ts +2 -2
- package/dist/types/excalidraw/scene/types.d.ts +7 -2
- package/dist/types/excalidraw/snapping.d.ts +5 -5
- 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 +264 -25
- package/dist/types/excalidraw/viewport.d.ts +316 -0
- package/dist/types/excalidraw/wysiwyg/textWysiwyg.d.ts +7 -3
- 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 +35 -0
- package/dist/types/math/src/constants.d.ts +0 -1
- package/dist/types/math/src/curve.d.ts +4 -1
- package/dist/types/math/src/point.d.ts +8 -2
- package/dist/types/math/src/polygon.d.ts +2 -2
- package/dist/types/math/src/range.d.ts +1 -3
- package/dist/types/math/src/segment.d.ts +3 -3
- package/dist/types/math/src/types.d.ts +25 -1
- package/dist/types/utils/src/export.d.ts +5 -5
- package/dist/types/utils/src/index.d.ts +1 -2
- package/dist/types/utils/src/shape.d.ts +6 -6
- package/package.json +7 -1
- package/dist/types/common/src/visualdebug.d.ts +0 -41
- 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/InitializeApp.d.ts +0 -10
- package/dist/types/excalidraw/components/TTDDialog/TTDDialogTrigger.d.ts +0 -8
- package/dist/types/excalidraw/components/footer/FooterCenter.d.ts +0 -8
- package/dist/types/excalidraw/components/live-collaboration/LiveCollaborationTrigger.d.ts +0 -22
- 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/data/reconcile.d.ts +0 -7
- package/dist/types/excalidraw/index.d.ts +0 -46
- package/dist/types/excalidraw/polyfill.d.ts +0 -2
- package/dist/types/excalidraw/scene/scroll.d.ts +0 -23
- 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
|
@@ -363,173 +363,1061 @@ var BinaryHeap = class {
|
|
|
363
363
|
}
|
|
364
364
|
};
|
|
365
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
|
+
|
|
366
370
|
// src/colors.ts
|
|
367
371
|
init_define_import_meta_env();
|
|
368
372
|
|
|
369
|
-
// ../../node_modules/
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
"
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
"
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
"
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
"#
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
"
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
"
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
"#
|
|
522
|
-
|
|
523
|
-
"
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
373
|
+
// ../../node_modules/tinycolor2/esm/tinycolor.js
|
|
374
|
+
init_define_import_meta_env();
|
|
375
|
+
function _typeof(obj) {
|
|
376
|
+
"@babel/helpers - typeof";
|
|
377
|
+
return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(obj2) {
|
|
378
|
+
return typeof obj2;
|
|
379
|
+
} : function(obj2) {
|
|
380
|
+
return obj2 && "function" == typeof Symbol && obj2.constructor === Symbol && obj2 !== Symbol.prototype ? "symbol" : typeof obj2;
|
|
381
|
+
}, _typeof(obj);
|
|
382
|
+
}
|
|
383
|
+
var trimLeft = /^\s+/;
|
|
384
|
+
var trimRight = /\s+$/;
|
|
385
|
+
function tinycolor(color, opts) {
|
|
386
|
+
color = color ? color : "";
|
|
387
|
+
opts = opts || {};
|
|
388
|
+
if (color instanceof tinycolor) {
|
|
389
|
+
return color;
|
|
390
|
+
}
|
|
391
|
+
if (!(this instanceof tinycolor)) {
|
|
392
|
+
return new tinycolor(color, opts);
|
|
393
|
+
}
|
|
394
|
+
var rgb = inputToRGB(color);
|
|
395
|
+
this._originalInput = color, this._r = rgb.r, this._g = rgb.g, this._b = rgb.b, this._a = rgb.a, this._roundA = Math.round(100 * this._a) / 100, this._format = opts.format || rgb.format;
|
|
396
|
+
this._gradientType = opts.gradientType;
|
|
397
|
+
if (this._r < 1)
|
|
398
|
+
this._r = Math.round(this._r);
|
|
399
|
+
if (this._g < 1)
|
|
400
|
+
this._g = Math.round(this._g);
|
|
401
|
+
if (this._b < 1)
|
|
402
|
+
this._b = Math.round(this._b);
|
|
403
|
+
this._ok = rgb.ok;
|
|
404
|
+
}
|
|
405
|
+
tinycolor.prototype = {
|
|
406
|
+
isDark: function isDark() {
|
|
407
|
+
return this.getBrightness() < 128;
|
|
408
|
+
},
|
|
409
|
+
isLight: function isLight() {
|
|
410
|
+
return !this.isDark();
|
|
411
|
+
},
|
|
412
|
+
isValid: function isValid() {
|
|
413
|
+
return this._ok;
|
|
414
|
+
},
|
|
415
|
+
getOriginalInput: function getOriginalInput() {
|
|
416
|
+
return this._originalInput;
|
|
417
|
+
},
|
|
418
|
+
getFormat: function getFormat() {
|
|
419
|
+
return this._format;
|
|
420
|
+
},
|
|
421
|
+
getAlpha: function getAlpha() {
|
|
422
|
+
return this._a;
|
|
423
|
+
},
|
|
424
|
+
getBrightness: function getBrightness() {
|
|
425
|
+
var rgb = this.toRgb();
|
|
426
|
+
return (rgb.r * 299 + rgb.g * 587 + rgb.b * 114) / 1e3;
|
|
427
|
+
},
|
|
428
|
+
getLuminance: function getLuminance() {
|
|
429
|
+
var rgb = this.toRgb();
|
|
430
|
+
var RsRGB, GsRGB, BsRGB, R, G, B;
|
|
431
|
+
RsRGB = rgb.r / 255;
|
|
432
|
+
GsRGB = rgb.g / 255;
|
|
433
|
+
BsRGB = rgb.b / 255;
|
|
434
|
+
if (RsRGB <= 0.03928)
|
|
435
|
+
R = RsRGB / 12.92;
|
|
436
|
+
else
|
|
437
|
+
R = Math.pow((RsRGB + 0.055) / 1.055, 2.4);
|
|
438
|
+
if (GsRGB <= 0.03928)
|
|
439
|
+
G = GsRGB / 12.92;
|
|
440
|
+
else
|
|
441
|
+
G = Math.pow((GsRGB + 0.055) / 1.055, 2.4);
|
|
442
|
+
if (BsRGB <= 0.03928)
|
|
443
|
+
B = BsRGB / 12.92;
|
|
444
|
+
else
|
|
445
|
+
B = Math.pow((BsRGB + 0.055) / 1.055, 2.4);
|
|
446
|
+
return 0.2126 * R + 0.7152 * G + 0.0722 * B;
|
|
447
|
+
},
|
|
448
|
+
setAlpha: function setAlpha(value) {
|
|
449
|
+
this._a = boundAlpha(value);
|
|
450
|
+
this._roundA = Math.round(100 * this._a) / 100;
|
|
451
|
+
return this;
|
|
452
|
+
},
|
|
453
|
+
toHsv: function toHsv() {
|
|
454
|
+
var hsv = rgbToHsv(this._r, this._g, this._b);
|
|
455
|
+
return {
|
|
456
|
+
h: hsv.h * 360,
|
|
457
|
+
s: hsv.s,
|
|
458
|
+
v: hsv.v,
|
|
459
|
+
a: this._a
|
|
460
|
+
};
|
|
461
|
+
},
|
|
462
|
+
toHsvString: function toHsvString() {
|
|
463
|
+
var hsv = rgbToHsv(this._r, this._g, this._b);
|
|
464
|
+
var h = Math.round(hsv.h * 360), s = Math.round(hsv.s * 100), v = Math.round(hsv.v * 100);
|
|
465
|
+
return this._a == 1 ? "hsv(" + h + ", " + s + "%, " + v + "%)" : "hsva(" + h + ", " + s + "%, " + v + "%, " + this._roundA + ")";
|
|
466
|
+
},
|
|
467
|
+
toHsl: function toHsl() {
|
|
468
|
+
var hsl = rgbToHsl(this._r, this._g, this._b);
|
|
469
|
+
return {
|
|
470
|
+
h: hsl.h * 360,
|
|
471
|
+
s: hsl.s,
|
|
472
|
+
l: hsl.l,
|
|
473
|
+
a: this._a
|
|
474
|
+
};
|
|
475
|
+
},
|
|
476
|
+
toHslString: function toHslString() {
|
|
477
|
+
var hsl = rgbToHsl(this._r, this._g, this._b);
|
|
478
|
+
var h = Math.round(hsl.h * 360), s = Math.round(hsl.s * 100), l = Math.round(hsl.l * 100);
|
|
479
|
+
return this._a == 1 ? "hsl(" + h + ", " + s + "%, " + l + "%)" : "hsla(" + h + ", " + s + "%, " + l + "%, " + this._roundA + ")";
|
|
480
|
+
},
|
|
481
|
+
toHex: function toHex(allow3Char) {
|
|
482
|
+
return rgbToHex(this._r, this._g, this._b, allow3Char);
|
|
483
|
+
},
|
|
484
|
+
toHexString: function toHexString(allow3Char) {
|
|
485
|
+
return "#" + this.toHex(allow3Char);
|
|
486
|
+
},
|
|
487
|
+
toHex8: function toHex8(allow4Char) {
|
|
488
|
+
return rgbaToHex(this._r, this._g, this._b, this._a, allow4Char);
|
|
489
|
+
},
|
|
490
|
+
toHex8String: function toHex8String(allow4Char) {
|
|
491
|
+
return "#" + this.toHex8(allow4Char);
|
|
492
|
+
},
|
|
493
|
+
toRgb: function toRgb() {
|
|
494
|
+
return {
|
|
495
|
+
r: Math.round(this._r),
|
|
496
|
+
g: Math.round(this._g),
|
|
497
|
+
b: Math.round(this._b),
|
|
498
|
+
a: this._a
|
|
499
|
+
};
|
|
500
|
+
},
|
|
501
|
+
toRgbString: function toRgbString() {
|
|
502
|
+
return this._a == 1 ? "rgb(" + Math.round(this._r) + ", " + Math.round(this._g) + ", " + Math.round(this._b) + ")" : "rgba(" + Math.round(this._r) + ", " + Math.round(this._g) + ", " + Math.round(this._b) + ", " + this._roundA + ")";
|
|
503
|
+
},
|
|
504
|
+
toPercentageRgb: function toPercentageRgb() {
|
|
505
|
+
return {
|
|
506
|
+
r: Math.round(bound01(this._r, 255) * 100) + "%",
|
|
507
|
+
g: Math.round(bound01(this._g, 255) * 100) + "%",
|
|
508
|
+
b: Math.round(bound01(this._b, 255) * 100) + "%",
|
|
509
|
+
a: this._a
|
|
510
|
+
};
|
|
511
|
+
},
|
|
512
|
+
toPercentageRgbString: function toPercentageRgbString() {
|
|
513
|
+
return this._a == 1 ? "rgb(" + Math.round(bound01(this._r, 255) * 100) + "%, " + Math.round(bound01(this._g, 255) * 100) + "%, " + Math.round(bound01(this._b, 255) * 100) + "%)" : "rgba(" + Math.round(bound01(this._r, 255) * 100) + "%, " + Math.round(bound01(this._g, 255) * 100) + "%, " + Math.round(bound01(this._b, 255) * 100) + "%, " + this._roundA + ")";
|
|
514
|
+
},
|
|
515
|
+
toName: function toName() {
|
|
516
|
+
if (this._a === 0) {
|
|
517
|
+
return "transparent";
|
|
518
|
+
}
|
|
519
|
+
if (this._a < 1) {
|
|
520
|
+
return false;
|
|
521
|
+
}
|
|
522
|
+
return hexNames[rgbToHex(this._r, this._g, this._b, true)] || false;
|
|
523
|
+
},
|
|
524
|
+
toFilter: function toFilter(secondColor) {
|
|
525
|
+
var hex8String = "#" + rgbaToArgbHex(this._r, this._g, this._b, this._a);
|
|
526
|
+
var secondHex8String = hex8String;
|
|
527
|
+
var gradientType = this._gradientType ? "GradientType = 1, " : "";
|
|
528
|
+
if (secondColor) {
|
|
529
|
+
var s = tinycolor(secondColor);
|
|
530
|
+
secondHex8String = "#" + rgbaToArgbHex(s._r, s._g, s._b, s._a);
|
|
531
|
+
}
|
|
532
|
+
return "progid:DXImageTransform.Microsoft.gradient(" + gradientType + "startColorstr=" + hex8String + ",endColorstr=" + secondHex8String + ")";
|
|
533
|
+
},
|
|
534
|
+
toString: function toString(format) {
|
|
535
|
+
var formatSet = !!format;
|
|
536
|
+
format = format || this._format;
|
|
537
|
+
var formattedString = false;
|
|
538
|
+
var hasAlpha = this._a < 1 && this._a >= 0;
|
|
539
|
+
var needsAlphaFormat = !formatSet && hasAlpha && (format === "hex" || format === "hex6" || format === "hex3" || format === "hex4" || format === "hex8" || format === "name");
|
|
540
|
+
if (needsAlphaFormat) {
|
|
541
|
+
if (format === "name" && this._a === 0) {
|
|
542
|
+
return this.toName();
|
|
543
|
+
}
|
|
544
|
+
return this.toRgbString();
|
|
545
|
+
}
|
|
546
|
+
if (format === "rgb") {
|
|
547
|
+
formattedString = this.toRgbString();
|
|
548
|
+
}
|
|
549
|
+
if (format === "prgb") {
|
|
550
|
+
formattedString = this.toPercentageRgbString();
|
|
551
|
+
}
|
|
552
|
+
if (format === "hex" || format === "hex6") {
|
|
553
|
+
formattedString = this.toHexString();
|
|
554
|
+
}
|
|
555
|
+
if (format === "hex3") {
|
|
556
|
+
formattedString = this.toHexString(true);
|
|
557
|
+
}
|
|
558
|
+
if (format === "hex4") {
|
|
559
|
+
formattedString = this.toHex8String(true);
|
|
560
|
+
}
|
|
561
|
+
if (format === "hex8") {
|
|
562
|
+
formattedString = this.toHex8String();
|
|
563
|
+
}
|
|
564
|
+
if (format === "name") {
|
|
565
|
+
formattedString = this.toName();
|
|
566
|
+
}
|
|
567
|
+
if (format === "hsl") {
|
|
568
|
+
formattedString = this.toHslString();
|
|
569
|
+
}
|
|
570
|
+
if (format === "hsv") {
|
|
571
|
+
formattedString = this.toHsvString();
|
|
572
|
+
}
|
|
573
|
+
return formattedString || this.toHexString();
|
|
574
|
+
},
|
|
575
|
+
clone: function clone() {
|
|
576
|
+
return tinycolor(this.toString());
|
|
577
|
+
},
|
|
578
|
+
_applyModification: function _applyModification(fn, args) {
|
|
579
|
+
var color = fn.apply(null, [this].concat([].slice.call(args)));
|
|
580
|
+
this._r = color._r;
|
|
581
|
+
this._g = color._g;
|
|
582
|
+
this._b = color._b;
|
|
583
|
+
this.setAlpha(color._a);
|
|
584
|
+
return this;
|
|
585
|
+
},
|
|
586
|
+
lighten: function lighten() {
|
|
587
|
+
return this._applyModification(_lighten, arguments);
|
|
588
|
+
},
|
|
589
|
+
brighten: function brighten() {
|
|
590
|
+
return this._applyModification(_brighten, arguments);
|
|
591
|
+
},
|
|
592
|
+
darken: function darken() {
|
|
593
|
+
return this._applyModification(_darken, arguments);
|
|
594
|
+
},
|
|
595
|
+
desaturate: function desaturate() {
|
|
596
|
+
return this._applyModification(_desaturate, arguments);
|
|
597
|
+
},
|
|
598
|
+
saturate: function saturate() {
|
|
599
|
+
return this._applyModification(_saturate, arguments);
|
|
600
|
+
},
|
|
601
|
+
greyscale: function greyscale() {
|
|
602
|
+
return this._applyModification(_greyscale, arguments);
|
|
603
|
+
},
|
|
604
|
+
spin: function spin() {
|
|
605
|
+
return this._applyModification(_spin, arguments);
|
|
606
|
+
},
|
|
607
|
+
_applyCombination: function _applyCombination(fn, args) {
|
|
608
|
+
return fn.apply(null, [this].concat([].slice.call(args)));
|
|
609
|
+
},
|
|
610
|
+
analogous: function analogous() {
|
|
611
|
+
return this._applyCombination(_analogous, arguments);
|
|
612
|
+
},
|
|
613
|
+
complement: function complement() {
|
|
614
|
+
return this._applyCombination(_complement, arguments);
|
|
615
|
+
},
|
|
616
|
+
monochromatic: function monochromatic() {
|
|
617
|
+
return this._applyCombination(_monochromatic, arguments);
|
|
618
|
+
},
|
|
619
|
+
splitcomplement: function splitcomplement() {
|
|
620
|
+
return this._applyCombination(_splitcomplement, arguments);
|
|
621
|
+
},
|
|
622
|
+
// Disabled until https://github.com/bgrins/TinyColor/issues/254
|
|
623
|
+
// polyad: function (number) {
|
|
624
|
+
// return this._applyCombination(polyad, [number]);
|
|
625
|
+
// },
|
|
626
|
+
triad: function triad() {
|
|
627
|
+
return this._applyCombination(polyad, [3]);
|
|
628
|
+
},
|
|
629
|
+
tetrad: function tetrad() {
|
|
630
|
+
return this._applyCombination(polyad, [4]);
|
|
631
|
+
}
|
|
632
|
+
};
|
|
633
|
+
tinycolor.fromRatio = function(color, opts) {
|
|
634
|
+
if (_typeof(color) == "object") {
|
|
635
|
+
var newColor = {};
|
|
636
|
+
for (var i in color) {
|
|
637
|
+
if (color.hasOwnProperty(i)) {
|
|
638
|
+
if (i === "a") {
|
|
639
|
+
newColor[i] = color[i];
|
|
640
|
+
} else {
|
|
641
|
+
newColor[i] = convertToPercentage(color[i]);
|
|
642
|
+
}
|
|
643
|
+
}
|
|
644
|
+
}
|
|
645
|
+
color = newColor;
|
|
646
|
+
}
|
|
647
|
+
return tinycolor(color, opts);
|
|
648
|
+
};
|
|
649
|
+
function inputToRGB(color) {
|
|
650
|
+
var rgb = {
|
|
651
|
+
r: 0,
|
|
652
|
+
g: 0,
|
|
653
|
+
b: 0
|
|
654
|
+
};
|
|
655
|
+
var a = 1;
|
|
656
|
+
var s = null;
|
|
657
|
+
var v = null;
|
|
658
|
+
var l = null;
|
|
659
|
+
var ok = false;
|
|
660
|
+
var format = false;
|
|
661
|
+
if (typeof color == "string") {
|
|
662
|
+
color = stringInputToObject(color);
|
|
663
|
+
}
|
|
664
|
+
if (_typeof(color) == "object") {
|
|
665
|
+
if (isValidCSSUnit(color.r) && isValidCSSUnit(color.g) && isValidCSSUnit(color.b)) {
|
|
666
|
+
rgb = rgbToRgb(color.r, color.g, color.b);
|
|
667
|
+
ok = true;
|
|
668
|
+
format = String(color.r).substr(-1) === "%" ? "prgb" : "rgb";
|
|
669
|
+
} else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.v)) {
|
|
670
|
+
s = convertToPercentage(color.s);
|
|
671
|
+
v = convertToPercentage(color.v);
|
|
672
|
+
rgb = hsvToRgb(color.h, s, v);
|
|
673
|
+
ok = true;
|
|
674
|
+
format = "hsv";
|
|
675
|
+
} else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.l)) {
|
|
676
|
+
s = convertToPercentage(color.s);
|
|
677
|
+
l = convertToPercentage(color.l);
|
|
678
|
+
rgb = hslToRgb(color.h, s, l);
|
|
679
|
+
ok = true;
|
|
680
|
+
format = "hsl";
|
|
681
|
+
}
|
|
682
|
+
if (color.hasOwnProperty("a")) {
|
|
683
|
+
a = color.a;
|
|
684
|
+
}
|
|
685
|
+
}
|
|
686
|
+
a = boundAlpha(a);
|
|
687
|
+
return {
|
|
688
|
+
ok,
|
|
689
|
+
format: color.format || format,
|
|
690
|
+
r: Math.min(255, Math.max(rgb.r, 0)),
|
|
691
|
+
g: Math.min(255, Math.max(rgb.g, 0)),
|
|
692
|
+
b: Math.min(255, Math.max(rgb.b, 0)),
|
|
693
|
+
a
|
|
694
|
+
};
|
|
695
|
+
}
|
|
696
|
+
function rgbToRgb(r, g, b) {
|
|
697
|
+
return {
|
|
698
|
+
r: bound01(r, 255) * 255,
|
|
699
|
+
g: bound01(g, 255) * 255,
|
|
700
|
+
b: bound01(b, 255) * 255
|
|
701
|
+
};
|
|
702
|
+
}
|
|
703
|
+
function rgbToHsl(r, g, b) {
|
|
704
|
+
r = bound01(r, 255);
|
|
705
|
+
g = bound01(g, 255);
|
|
706
|
+
b = bound01(b, 255);
|
|
707
|
+
var max = Math.max(r, g, b), min = Math.min(r, g, b);
|
|
708
|
+
var h, s, l = (max + min) / 2;
|
|
709
|
+
if (max == min) {
|
|
710
|
+
h = s = 0;
|
|
711
|
+
} else {
|
|
712
|
+
var d = max - min;
|
|
713
|
+
s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
|
|
714
|
+
switch (max) {
|
|
715
|
+
case r:
|
|
716
|
+
h = (g - b) / d + (g < b ? 6 : 0);
|
|
717
|
+
break;
|
|
718
|
+
case g:
|
|
719
|
+
h = (b - r) / d + 2;
|
|
720
|
+
break;
|
|
721
|
+
case b:
|
|
722
|
+
h = (r - g) / d + 4;
|
|
723
|
+
break;
|
|
724
|
+
}
|
|
725
|
+
h /= 6;
|
|
726
|
+
}
|
|
727
|
+
return {
|
|
728
|
+
h,
|
|
729
|
+
s,
|
|
730
|
+
l
|
|
731
|
+
};
|
|
732
|
+
}
|
|
733
|
+
function hslToRgb(h, s, l) {
|
|
734
|
+
var r, g, b;
|
|
735
|
+
h = bound01(h, 360);
|
|
736
|
+
s = bound01(s, 100);
|
|
737
|
+
l = bound01(l, 100);
|
|
738
|
+
function hue2rgb(p2, q2, t) {
|
|
739
|
+
if (t < 0)
|
|
740
|
+
t += 1;
|
|
741
|
+
if (t > 1)
|
|
742
|
+
t -= 1;
|
|
743
|
+
if (t < 1 / 6)
|
|
744
|
+
return p2 + (q2 - p2) * 6 * t;
|
|
745
|
+
if (t < 1 / 2)
|
|
746
|
+
return q2;
|
|
747
|
+
if (t < 2 / 3)
|
|
748
|
+
return p2 + (q2 - p2) * (2 / 3 - t) * 6;
|
|
749
|
+
return p2;
|
|
750
|
+
}
|
|
751
|
+
if (s === 0) {
|
|
752
|
+
r = g = b = l;
|
|
753
|
+
} else {
|
|
754
|
+
var q = l < 0.5 ? l * (1 + s) : l + s - l * s;
|
|
755
|
+
var p = 2 * l - q;
|
|
756
|
+
r = hue2rgb(p, q, h + 1 / 3);
|
|
757
|
+
g = hue2rgb(p, q, h);
|
|
758
|
+
b = hue2rgb(p, q, h - 1 / 3);
|
|
759
|
+
}
|
|
760
|
+
return {
|
|
761
|
+
r: r * 255,
|
|
762
|
+
g: g * 255,
|
|
763
|
+
b: b * 255
|
|
764
|
+
};
|
|
765
|
+
}
|
|
766
|
+
function rgbToHsv(r, g, b) {
|
|
767
|
+
r = bound01(r, 255);
|
|
768
|
+
g = bound01(g, 255);
|
|
769
|
+
b = bound01(b, 255);
|
|
770
|
+
var max = Math.max(r, g, b), min = Math.min(r, g, b);
|
|
771
|
+
var h, s, v = max;
|
|
772
|
+
var d = max - min;
|
|
773
|
+
s = max === 0 ? 0 : d / max;
|
|
774
|
+
if (max == min) {
|
|
775
|
+
h = 0;
|
|
776
|
+
} else {
|
|
777
|
+
switch (max) {
|
|
778
|
+
case r:
|
|
779
|
+
h = (g - b) / d + (g < b ? 6 : 0);
|
|
780
|
+
break;
|
|
781
|
+
case g:
|
|
782
|
+
h = (b - r) / d + 2;
|
|
783
|
+
break;
|
|
784
|
+
case b:
|
|
785
|
+
h = (r - g) / d + 4;
|
|
786
|
+
break;
|
|
787
|
+
}
|
|
788
|
+
h /= 6;
|
|
789
|
+
}
|
|
790
|
+
return {
|
|
791
|
+
h,
|
|
792
|
+
s,
|
|
793
|
+
v
|
|
794
|
+
};
|
|
795
|
+
}
|
|
796
|
+
function hsvToRgb(h, s, v) {
|
|
797
|
+
h = bound01(h, 360) * 6;
|
|
798
|
+
s = bound01(s, 100);
|
|
799
|
+
v = bound01(v, 100);
|
|
800
|
+
var i = Math.floor(h), f = h - i, p = v * (1 - s), q = v * (1 - f * s), t = v * (1 - (1 - f) * s), mod = i % 6, r = [v, q, p, p, t, v][mod], g = [t, v, v, q, p, p][mod], b = [p, p, t, v, v, q][mod];
|
|
801
|
+
return {
|
|
802
|
+
r: r * 255,
|
|
803
|
+
g: g * 255,
|
|
804
|
+
b: b * 255
|
|
805
|
+
};
|
|
806
|
+
}
|
|
807
|
+
function rgbToHex(r, g, b, allow3Char) {
|
|
808
|
+
var hex = [pad2(Math.round(r).toString(16)), pad2(Math.round(g).toString(16)), pad2(Math.round(b).toString(16))];
|
|
809
|
+
if (allow3Char && hex[0].charAt(0) == hex[0].charAt(1) && hex[1].charAt(0) == hex[1].charAt(1) && hex[2].charAt(0) == hex[2].charAt(1)) {
|
|
810
|
+
return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0);
|
|
811
|
+
}
|
|
812
|
+
return hex.join("");
|
|
813
|
+
}
|
|
814
|
+
function rgbaToHex(r, g, b, a, allow4Char) {
|
|
815
|
+
var hex = [pad2(Math.round(r).toString(16)), pad2(Math.round(g).toString(16)), pad2(Math.round(b).toString(16)), pad2(convertDecimalToHex(a))];
|
|
816
|
+
if (allow4Char && hex[0].charAt(0) == hex[0].charAt(1) && hex[1].charAt(0) == hex[1].charAt(1) && hex[2].charAt(0) == hex[2].charAt(1) && hex[3].charAt(0) == hex[3].charAt(1)) {
|
|
817
|
+
return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0) + hex[3].charAt(0);
|
|
818
|
+
}
|
|
819
|
+
return hex.join("");
|
|
820
|
+
}
|
|
821
|
+
function rgbaToArgbHex(r, g, b, a) {
|
|
822
|
+
var hex = [pad2(convertDecimalToHex(a)), pad2(Math.round(r).toString(16)), pad2(Math.round(g).toString(16)), pad2(Math.round(b).toString(16))];
|
|
823
|
+
return hex.join("");
|
|
824
|
+
}
|
|
825
|
+
tinycolor.equals = function(color1, color2) {
|
|
826
|
+
if (!color1 || !color2)
|
|
827
|
+
return false;
|
|
828
|
+
return tinycolor(color1).toRgbString() == tinycolor(color2).toRgbString();
|
|
829
|
+
};
|
|
830
|
+
tinycolor.random = function() {
|
|
831
|
+
return tinycolor.fromRatio({
|
|
832
|
+
r: Math.random(),
|
|
833
|
+
g: Math.random(),
|
|
834
|
+
b: Math.random()
|
|
835
|
+
});
|
|
529
836
|
};
|
|
837
|
+
function _desaturate(color, amount) {
|
|
838
|
+
amount = amount === 0 ? 0 : amount || 10;
|
|
839
|
+
var hsl = tinycolor(color).toHsl();
|
|
840
|
+
hsl.s -= amount / 100;
|
|
841
|
+
hsl.s = clamp01(hsl.s);
|
|
842
|
+
return tinycolor(hsl);
|
|
843
|
+
}
|
|
844
|
+
function _saturate(color, amount) {
|
|
845
|
+
amount = amount === 0 ? 0 : amount || 10;
|
|
846
|
+
var hsl = tinycolor(color).toHsl();
|
|
847
|
+
hsl.s += amount / 100;
|
|
848
|
+
hsl.s = clamp01(hsl.s);
|
|
849
|
+
return tinycolor(hsl);
|
|
850
|
+
}
|
|
851
|
+
function _greyscale(color) {
|
|
852
|
+
return tinycolor(color).desaturate(100);
|
|
853
|
+
}
|
|
854
|
+
function _lighten(color, amount) {
|
|
855
|
+
amount = amount === 0 ? 0 : amount || 10;
|
|
856
|
+
var hsl = tinycolor(color).toHsl();
|
|
857
|
+
hsl.l += amount / 100;
|
|
858
|
+
hsl.l = clamp01(hsl.l);
|
|
859
|
+
return tinycolor(hsl);
|
|
860
|
+
}
|
|
861
|
+
function _brighten(color, amount) {
|
|
862
|
+
amount = amount === 0 ? 0 : amount || 10;
|
|
863
|
+
var rgb = tinycolor(color).toRgb();
|
|
864
|
+
rgb.r = Math.max(0, Math.min(255, rgb.r - Math.round(255 * -(amount / 100))));
|
|
865
|
+
rgb.g = Math.max(0, Math.min(255, rgb.g - Math.round(255 * -(amount / 100))));
|
|
866
|
+
rgb.b = Math.max(0, Math.min(255, rgb.b - Math.round(255 * -(amount / 100))));
|
|
867
|
+
return tinycolor(rgb);
|
|
868
|
+
}
|
|
869
|
+
function _darken(color, amount) {
|
|
870
|
+
amount = amount === 0 ? 0 : amount || 10;
|
|
871
|
+
var hsl = tinycolor(color).toHsl();
|
|
872
|
+
hsl.l -= amount / 100;
|
|
873
|
+
hsl.l = clamp01(hsl.l);
|
|
874
|
+
return tinycolor(hsl);
|
|
875
|
+
}
|
|
876
|
+
function _spin(color, amount) {
|
|
877
|
+
var hsl = tinycolor(color).toHsl();
|
|
878
|
+
var hue = (hsl.h + amount) % 360;
|
|
879
|
+
hsl.h = hue < 0 ? 360 + hue : hue;
|
|
880
|
+
return tinycolor(hsl);
|
|
881
|
+
}
|
|
882
|
+
function _complement(color) {
|
|
883
|
+
var hsl = tinycolor(color).toHsl();
|
|
884
|
+
hsl.h = (hsl.h + 180) % 360;
|
|
885
|
+
return tinycolor(hsl);
|
|
886
|
+
}
|
|
887
|
+
function polyad(color, number) {
|
|
888
|
+
if (isNaN(number) || number <= 0) {
|
|
889
|
+
throw new Error("Argument to polyad must be a positive number");
|
|
890
|
+
}
|
|
891
|
+
var hsl = tinycolor(color).toHsl();
|
|
892
|
+
var result = [tinycolor(color)];
|
|
893
|
+
var step = 360 / number;
|
|
894
|
+
for (var i = 1; i < number; i++) {
|
|
895
|
+
result.push(tinycolor({
|
|
896
|
+
h: (hsl.h + i * step) % 360,
|
|
897
|
+
s: hsl.s,
|
|
898
|
+
l: hsl.l
|
|
899
|
+
}));
|
|
900
|
+
}
|
|
901
|
+
return result;
|
|
902
|
+
}
|
|
903
|
+
function _splitcomplement(color) {
|
|
904
|
+
var hsl = tinycolor(color).toHsl();
|
|
905
|
+
var h = hsl.h;
|
|
906
|
+
return [tinycolor(color), tinycolor({
|
|
907
|
+
h: (h + 72) % 360,
|
|
908
|
+
s: hsl.s,
|
|
909
|
+
l: hsl.l
|
|
910
|
+
}), tinycolor({
|
|
911
|
+
h: (h + 216) % 360,
|
|
912
|
+
s: hsl.s,
|
|
913
|
+
l: hsl.l
|
|
914
|
+
})];
|
|
915
|
+
}
|
|
916
|
+
function _analogous(color, results, slices) {
|
|
917
|
+
results = results || 6;
|
|
918
|
+
slices = slices || 30;
|
|
919
|
+
var hsl = tinycolor(color).toHsl();
|
|
920
|
+
var part = 360 / slices;
|
|
921
|
+
var ret = [tinycolor(color)];
|
|
922
|
+
for (hsl.h = (hsl.h - (part * results >> 1) + 720) % 360; --results; ) {
|
|
923
|
+
hsl.h = (hsl.h + part) % 360;
|
|
924
|
+
ret.push(tinycolor(hsl));
|
|
925
|
+
}
|
|
926
|
+
return ret;
|
|
927
|
+
}
|
|
928
|
+
function _monochromatic(color, results) {
|
|
929
|
+
results = results || 6;
|
|
930
|
+
var hsv = tinycolor(color).toHsv();
|
|
931
|
+
var h = hsv.h, s = hsv.s, v = hsv.v;
|
|
932
|
+
var ret = [];
|
|
933
|
+
var modification = 1 / results;
|
|
934
|
+
while (results--) {
|
|
935
|
+
ret.push(tinycolor({
|
|
936
|
+
h,
|
|
937
|
+
s,
|
|
938
|
+
v
|
|
939
|
+
}));
|
|
940
|
+
v = (v + modification) % 1;
|
|
941
|
+
}
|
|
942
|
+
return ret;
|
|
943
|
+
}
|
|
944
|
+
tinycolor.mix = function(color1, color2, amount) {
|
|
945
|
+
amount = amount === 0 ? 0 : amount || 50;
|
|
946
|
+
var rgb1 = tinycolor(color1).toRgb();
|
|
947
|
+
var rgb2 = tinycolor(color2).toRgb();
|
|
948
|
+
var p = amount / 100;
|
|
949
|
+
var rgba = {
|
|
950
|
+
r: (rgb2.r - rgb1.r) * p + rgb1.r,
|
|
951
|
+
g: (rgb2.g - rgb1.g) * p + rgb1.g,
|
|
952
|
+
b: (rgb2.b - rgb1.b) * p + rgb1.b,
|
|
953
|
+
a: (rgb2.a - rgb1.a) * p + rgb1.a
|
|
954
|
+
};
|
|
955
|
+
return tinycolor(rgba);
|
|
956
|
+
};
|
|
957
|
+
tinycolor.readability = function(color1, color2) {
|
|
958
|
+
var c1 = tinycolor(color1);
|
|
959
|
+
var c2 = tinycolor(color2);
|
|
960
|
+
return (Math.max(c1.getLuminance(), c2.getLuminance()) + 0.05) / (Math.min(c1.getLuminance(), c2.getLuminance()) + 0.05);
|
|
961
|
+
};
|
|
962
|
+
tinycolor.isReadable = function(color1, color2, wcag2) {
|
|
963
|
+
var readability = tinycolor.readability(color1, color2);
|
|
964
|
+
var wcag2Parms, out;
|
|
965
|
+
out = false;
|
|
966
|
+
wcag2Parms = validateWCAG2Parms(wcag2);
|
|
967
|
+
switch (wcag2Parms.level + wcag2Parms.size) {
|
|
968
|
+
case "AAsmall":
|
|
969
|
+
case "AAAlarge":
|
|
970
|
+
out = readability >= 4.5;
|
|
971
|
+
break;
|
|
972
|
+
case "AAlarge":
|
|
973
|
+
out = readability >= 3;
|
|
974
|
+
break;
|
|
975
|
+
case "AAAsmall":
|
|
976
|
+
out = readability >= 7;
|
|
977
|
+
break;
|
|
978
|
+
}
|
|
979
|
+
return out;
|
|
980
|
+
};
|
|
981
|
+
tinycolor.mostReadable = function(baseColor, colorList, args) {
|
|
982
|
+
var bestColor = null;
|
|
983
|
+
var bestScore = 0;
|
|
984
|
+
var readability;
|
|
985
|
+
var includeFallbackColors, level, size;
|
|
986
|
+
args = args || {};
|
|
987
|
+
includeFallbackColors = args.includeFallbackColors;
|
|
988
|
+
level = args.level;
|
|
989
|
+
size = args.size;
|
|
990
|
+
for (var i = 0; i < colorList.length; i++) {
|
|
991
|
+
readability = tinycolor.readability(baseColor, colorList[i]);
|
|
992
|
+
if (readability > bestScore) {
|
|
993
|
+
bestScore = readability;
|
|
994
|
+
bestColor = tinycolor(colorList[i]);
|
|
995
|
+
}
|
|
996
|
+
}
|
|
997
|
+
if (tinycolor.isReadable(baseColor, bestColor, {
|
|
998
|
+
level,
|
|
999
|
+
size
|
|
1000
|
+
}) || !includeFallbackColors) {
|
|
1001
|
+
return bestColor;
|
|
1002
|
+
} else {
|
|
1003
|
+
args.includeFallbackColors = false;
|
|
1004
|
+
return tinycolor.mostReadable(baseColor, ["#fff", "#000"], args);
|
|
1005
|
+
}
|
|
1006
|
+
};
|
|
1007
|
+
var names = tinycolor.names = {
|
|
1008
|
+
aliceblue: "f0f8ff",
|
|
1009
|
+
antiquewhite: "faebd7",
|
|
1010
|
+
aqua: "0ff",
|
|
1011
|
+
aquamarine: "7fffd4",
|
|
1012
|
+
azure: "f0ffff",
|
|
1013
|
+
beige: "f5f5dc",
|
|
1014
|
+
bisque: "ffe4c4",
|
|
1015
|
+
black: "000",
|
|
1016
|
+
blanchedalmond: "ffebcd",
|
|
1017
|
+
blue: "00f",
|
|
1018
|
+
blueviolet: "8a2be2",
|
|
1019
|
+
brown: "a52a2a",
|
|
1020
|
+
burlywood: "deb887",
|
|
1021
|
+
burntsienna: "ea7e5d",
|
|
1022
|
+
cadetblue: "5f9ea0",
|
|
1023
|
+
chartreuse: "7fff00",
|
|
1024
|
+
chocolate: "d2691e",
|
|
1025
|
+
coral: "ff7f50",
|
|
1026
|
+
cornflowerblue: "6495ed",
|
|
1027
|
+
cornsilk: "fff8dc",
|
|
1028
|
+
crimson: "dc143c",
|
|
1029
|
+
cyan: "0ff",
|
|
1030
|
+
darkblue: "00008b",
|
|
1031
|
+
darkcyan: "008b8b",
|
|
1032
|
+
darkgoldenrod: "b8860b",
|
|
1033
|
+
darkgray: "a9a9a9",
|
|
1034
|
+
darkgreen: "006400",
|
|
1035
|
+
darkgrey: "a9a9a9",
|
|
1036
|
+
darkkhaki: "bdb76b",
|
|
1037
|
+
darkmagenta: "8b008b",
|
|
1038
|
+
darkolivegreen: "556b2f",
|
|
1039
|
+
darkorange: "ff8c00",
|
|
1040
|
+
darkorchid: "9932cc",
|
|
1041
|
+
darkred: "8b0000",
|
|
1042
|
+
darksalmon: "e9967a",
|
|
1043
|
+
darkseagreen: "8fbc8f",
|
|
1044
|
+
darkslateblue: "483d8b",
|
|
1045
|
+
darkslategray: "2f4f4f",
|
|
1046
|
+
darkslategrey: "2f4f4f",
|
|
1047
|
+
darkturquoise: "00ced1",
|
|
1048
|
+
darkviolet: "9400d3",
|
|
1049
|
+
deeppink: "ff1493",
|
|
1050
|
+
deepskyblue: "00bfff",
|
|
1051
|
+
dimgray: "696969",
|
|
1052
|
+
dimgrey: "696969",
|
|
1053
|
+
dodgerblue: "1e90ff",
|
|
1054
|
+
firebrick: "b22222",
|
|
1055
|
+
floralwhite: "fffaf0",
|
|
1056
|
+
forestgreen: "228b22",
|
|
1057
|
+
fuchsia: "f0f",
|
|
1058
|
+
gainsboro: "dcdcdc",
|
|
1059
|
+
ghostwhite: "f8f8ff",
|
|
1060
|
+
gold: "ffd700",
|
|
1061
|
+
goldenrod: "daa520",
|
|
1062
|
+
gray: "808080",
|
|
1063
|
+
green: "008000",
|
|
1064
|
+
greenyellow: "adff2f",
|
|
1065
|
+
grey: "808080",
|
|
1066
|
+
honeydew: "f0fff0",
|
|
1067
|
+
hotpink: "ff69b4",
|
|
1068
|
+
indianred: "cd5c5c",
|
|
1069
|
+
indigo: "4b0082",
|
|
1070
|
+
ivory: "fffff0",
|
|
1071
|
+
khaki: "f0e68c",
|
|
1072
|
+
lavender: "e6e6fa",
|
|
1073
|
+
lavenderblush: "fff0f5",
|
|
1074
|
+
lawngreen: "7cfc00",
|
|
1075
|
+
lemonchiffon: "fffacd",
|
|
1076
|
+
lightblue: "add8e6",
|
|
1077
|
+
lightcoral: "f08080",
|
|
1078
|
+
lightcyan: "e0ffff",
|
|
1079
|
+
lightgoldenrodyellow: "fafad2",
|
|
1080
|
+
lightgray: "d3d3d3",
|
|
1081
|
+
lightgreen: "90ee90",
|
|
1082
|
+
lightgrey: "d3d3d3",
|
|
1083
|
+
lightpink: "ffb6c1",
|
|
1084
|
+
lightsalmon: "ffa07a",
|
|
1085
|
+
lightseagreen: "20b2aa",
|
|
1086
|
+
lightskyblue: "87cefa",
|
|
1087
|
+
lightslategray: "789",
|
|
1088
|
+
lightslategrey: "789",
|
|
1089
|
+
lightsteelblue: "b0c4de",
|
|
1090
|
+
lightyellow: "ffffe0",
|
|
1091
|
+
lime: "0f0",
|
|
1092
|
+
limegreen: "32cd32",
|
|
1093
|
+
linen: "faf0e6",
|
|
1094
|
+
magenta: "f0f",
|
|
1095
|
+
maroon: "800000",
|
|
1096
|
+
mediumaquamarine: "66cdaa",
|
|
1097
|
+
mediumblue: "0000cd",
|
|
1098
|
+
mediumorchid: "ba55d3",
|
|
1099
|
+
mediumpurple: "9370db",
|
|
1100
|
+
mediumseagreen: "3cb371",
|
|
1101
|
+
mediumslateblue: "7b68ee",
|
|
1102
|
+
mediumspringgreen: "00fa9a",
|
|
1103
|
+
mediumturquoise: "48d1cc",
|
|
1104
|
+
mediumvioletred: "c71585",
|
|
1105
|
+
midnightblue: "191970",
|
|
1106
|
+
mintcream: "f5fffa",
|
|
1107
|
+
mistyrose: "ffe4e1",
|
|
1108
|
+
moccasin: "ffe4b5",
|
|
1109
|
+
navajowhite: "ffdead",
|
|
1110
|
+
navy: "000080",
|
|
1111
|
+
oldlace: "fdf5e6",
|
|
1112
|
+
olive: "808000",
|
|
1113
|
+
olivedrab: "6b8e23",
|
|
1114
|
+
orange: "ffa500",
|
|
1115
|
+
orangered: "ff4500",
|
|
1116
|
+
orchid: "da70d6",
|
|
1117
|
+
palegoldenrod: "eee8aa",
|
|
1118
|
+
palegreen: "98fb98",
|
|
1119
|
+
paleturquoise: "afeeee",
|
|
1120
|
+
palevioletred: "db7093",
|
|
1121
|
+
papayawhip: "ffefd5",
|
|
1122
|
+
peachpuff: "ffdab9",
|
|
1123
|
+
peru: "cd853f",
|
|
1124
|
+
pink: "ffc0cb",
|
|
1125
|
+
plum: "dda0dd",
|
|
1126
|
+
powderblue: "b0e0e6",
|
|
1127
|
+
purple: "800080",
|
|
1128
|
+
rebeccapurple: "663399",
|
|
1129
|
+
red: "f00",
|
|
1130
|
+
rosybrown: "bc8f8f",
|
|
1131
|
+
royalblue: "4169e1",
|
|
1132
|
+
saddlebrown: "8b4513",
|
|
1133
|
+
salmon: "fa8072",
|
|
1134
|
+
sandybrown: "f4a460",
|
|
1135
|
+
seagreen: "2e8b57",
|
|
1136
|
+
seashell: "fff5ee",
|
|
1137
|
+
sienna: "a0522d",
|
|
1138
|
+
silver: "c0c0c0",
|
|
1139
|
+
skyblue: "87ceeb",
|
|
1140
|
+
slateblue: "6a5acd",
|
|
1141
|
+
slategray: "708090",
|
|
1142
|
+
slategrey: "708090",
|
|
1143
|
+
snow: "fffafa",
|
|
1144
|
+
springgreen: "00ff7f",
|
|
1145
|
+
steelblue: "4682b4",
|
|
1146
|
+
tan: "d2b48c",
|
|
1147
|
+
teal: "008080",
|
|
1148
|
+
thistle: "d8bfd8",
|
|
1149
|
+
tomato: "ff6347",
|
|
1150
|
+
turquoise: "40e0d0",
|
|
1151
|
+
violet: "ee82ee",
|
|
1152
|
+
wheat: "f5deb3",
|
|
1153
|
+
white: "fff",
|
|
1154
|
+
whitesmoke: "f5f5f5",
|
|
1155
|
+
yellow: "ff0",
|
|
1156
|
+
yellowgreen: "9acd32"
|
|
1157
|
+
};
|
|
1158
|
+
var hexNames = tinycolor.hexNames = flip(names);
|
|
1159
|
+
function flip(o) {
|
|
1160
|
+
var flipped = {};
|
|
1161
|
+
for (var i in o) {
|
|
1162
|
+
if (o.hasOwnProperty(i)) {
|
|
1163
|
+
flipped[o[i]] = i;
|
|
1164
|
+
}
|
|
1165
|
+
}
|
|
1166
|
+
return flipped;
|
|
1167
|
+
}
|
|
1168
|
+
function boundAlpha(a) {
|
|
1169
|
+
a = parseFloat(a);
|
|
1170
|
+
if (isNaN(a) || a < 0 || a > 1) {
|
|
1171
|
+
a = 1;
|
|
1172
|
+
}
|
|
1173
|
+
return a;
|
|
1174
|
+
}
|
|
1175
|
+
function bound01(n, max) {
|
|
1176
|
+
if (isOnePointZero(n))
|
|
1177
|
+
n = "100%";
|
|
1178
|
+
var processPercent = isPercentage(n);
|
|
1179
|
+
n = Math.min(max, Math.max(0, parseFloat(n)));
|
|
1180
|
+
if (processPercent) {
|
|
1181
|
+
n = parseInt(n * max, 10) / 100;
|
|
1182
|
+
}
|
|
1183
|
+
if (Math.abs(n - max) < 1e-6) {
|
|
1184
|
+
return 1;
|
|
1185
|
+
}
|
|
1186
|
+
return n % max / parseFloat(max);
|
|
1187
|
+
}
|
|
1188
|
+
function clamp01(val) {
|
|
1189
|
+
return Math.min(1, Math.max(0, val));
|
|
1190
|
+
}
|
|
1191
|
+
function parseIntFromHex(val) {
|
|
1192
|
+
return parseInt(val, 16);
|
|
1193
|
+
}
|
|
1194
|
+
function isOnePointZero(n) {
|
|
1195
|
+
return typeof n == "string" && n.indexOf(".") != -1 && parseFloat(n) === 1;
|
|
1196
|
+
}
|
|
1197
|
+
function isPercentage(n) {
|
|
1198
|
+
return typeof n === "string" && n.indexOf("%") != -1;
|
|
1199
|
+
}
|
|
1200
|
+
function pad2(c) {
|
|
1201
|
+
return c.length == 1 ? "0" + c : "" + c;
|
|
1202
|
+
}
|
|
1203
|
+
function convertToPercentage(n) {
|
|
1204
|
+
if (n <= 1) {
|
|
1205
|
+
n = n * 100 + "%";
|
|
1206
|
+
}
|
|
1207
|
+
return n;
|
|
1208
|
+
}
|
|
1209
|
+
function convertDecimalToHex(d) {
|
|
1210
|
+
return Math.round(parseFloat(d) * 255).toString(16);
|
|
1211
|
+
}
|
|
1212
|
+
function convertHexToDecimal(h) {
|
|
1213
|
+
return parseIntFromHex(h) / 255;
|
|
1214
|
+
}
|
|
1215
|
+
var matchers = function() {
|
|
1216
|
+
var CSS_INTEGER = "[-\\+]?\\d+%?";
|
|
1217
|
+
var CSS_NUMBER = "[-\\+]?\\d*\\.\\d+%?";
|
|
1218
|
+
var CSS_UNIT = "(?:" + CSS_NUMBER + ")|(?:" + CSS_INTEGER + ")";
|
|
1219
|
+
var PERMISSIVE_MATCH3 = "[\\s|\\(]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")\\s*\\)?";
|
|
1220
|
+
var PERMISSIVE_MATCH4 = "[\\s|\\(]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")\\s*\\)?";
|
|
1221
|
+
return {
|
|
1222
|
+
CSS_UNIT: new RegExp(CSS_UNIT),
|
|
1223
|
+
rgb: new RegExp("rgb" + PERMISSIVE_MATCH3),
|
|
1224
|
+
rgba: new RegExp("rgba" + PERMISSIVE_MATCH4),
|
|
1225
|
+
hsl: new RegExp("hsl" + PERMISSIVE_MATCH3),
|
|
1226
|
+
hsla: new RegExp("hsla" + PERMISSIVE_MATCH4),
|
|
1227
|
+
hsv: new RegExp("hsv" + PERMISSIVE_MATCH3),
|
|
1228
|
+
hsva: new RegExp("hsva" + PERMISSIVE_MATCH4),
|
|
1229
|
+
hex3: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,
|
|
1230
|
+
hex6: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,
|
|
1231
|
+
hex4: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,
|
|
1232
|
+
hex8: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/
|
|
1233
|
+
};
|
|
1234
|
+
}();
|
|
1235
|
+
function isValidCSSUnit(color) {
|
|
1236
|
+
return !!matchers.CSS_UNIT.exec(color);
|
|
1237
|
+
}
|
|
1238
|
+
function stringInputToObject(color) {
|
|
1239
|
+
color = color.replace(trimLeft, "").replace(trimRight, "").toLowerCase();
|
|
1240
|
+
var named = false;
|
|
1241
|
+
if (names[color]) {
|
|
1242
|
+
color = names[color];
|
|
1243
|
+
named = true;
|
|
1244
|
+
} else if (color == "transparent") {
|
|
1245
|
+
return {
|
|
1246
|
+
r: 0,
|
|
1247
|
+
g: 0,
|
|
1248
|
+
b: 0,
|
|
1249
|
+
a: 0,
|
|
1250
|
+
format: "name"
|
|
1251
|
+
};
|
|
1252
|
+
}
|
|
1253
|
+
var match;
|
|
1254
|
+
if (match = matchers.rgb.exec(color)) {
|
|
1255
|
+
return {
|
|
1256
|
+
r: match[1],
|
|
1257
|
+
g: match[2],
|
|
1258
|
+
b: match[3]
|
|
1259
|
+
};
|
|
1260
|
+
}
|
|
1261
|
+
if (match = matchers.rgba.exec(color)) {
|
|
1262
|
+
return {
|
|
1263
|
+
r: match[1],
|
|
1264
|
+
g: match[2],
|
|
1265
|
+
b: match[3],
|
|
1266
|
+
a: match[4]
|
|
1267
|
+
};
|
|
1268
|
+
}
|
|
1269
|
+
if (match = matchers.hsl.exec(color)) {
|
|
1270
|
+
return {
|
|
1271
|
+
h: match[1],
|
|
1272
|
+
s: match[2],
|
|
1273
|
+
l: match[3]
|
|
1274
|
+
};
|
|
1275
|
+
}
|
|
1276
|
+
if (match = matchers.hsla.exec(color)) {
|
|
1277
|
+
return {
|
|
1278
|
+
h: match[1],
|
|
1279
|
+
s: match[2],
|
|
1280
|
+
l: match[3],
|
|
1281
|
+
a: match[4]
|
|
1282
|
+
};
|
|
1283
|
+
}
|
|
1284
|
+
if (match = matchers.hsv.exec(color)) {
|
|
1285
|
+
return {
|
|
1286
|
+
h: match[1],
|
|
1287
|
+
s: match[2],
|
|
1288
|
+
v: match[3]
|
|
1289
|
+
};
|
|
1290
|
+
}
|
|
1291
|
+
if (match = matchers.hsva.exec(color)) {
|
|
1292
|
+
return {
|
|
1293
|
+
h: match[1],
|
|
1294
|
+
s: match[2],
|
|
1295
|
+
v: match[3],
|
|
1296
|
+
a: match[4]
|
|
1297
|
+
};
|
|
1298
|
+
}
|
|
1299
|
+
if (match = matchers.hex8.exec(color)) {
|
|
1300
|
+
return {
|
|
1301
|
+
r: parseIntFromHex(match[1]),
|
|
1302
|
+
g: parseIntFromHex(match[2]),
|
|
1303
|
+
b: parseIntFromHex(match[3]),
|
|
1304
|
+
a: convertHexToDecimal(match[4]),
|
|
1305
|
+
format: named ? "name" : "hex8"
|
|
1306
|
+
};
|
|
1307
|
+
}
|
|
1308
|
+
if (match = matchers.hex6.exec(color)) {
|
|
1309
|
+
return {
|
|
1310
|
+
r: parseIntFromHex(match[1]),
|
|
1311
|
+
g: parseIntFromHex(match[2]),
|
|
1312
|
+
b: parseIntFromHex(match[3]),
|
|
1313
|
+
format: named ? "name" : "hex"
|
|
1314
|
+
};
|
|
1315
|
+
}
|
|
1316
|
+
if (match = matchers.hex4.exec(color)) {
|
|
1317
|
+
return {
|
|
1318
|
+
r: parseIntFromHex(match[1] + "" + match[1]),
|
|
1319
|
+
g: parseIntFromHex(match[2] + "" + match[2]),
|
|
1320
|
+
b: parseIntFromHex(match[3] + "" + match[3]),
|
|
1321
|
+
a: convertHexToDecimal(match[4] + "" + match[4]),
|
|
1322
|
+
format: named ? "name" : "hex8"
|
|
1323
|
+
};
|
|
1324
|
+
}
|
|
1325
|
+
if (match = matchers.hex3.exec(color)) {
|
|
1326
|
+
return {
|
|
1327
|
+
r: parseIntFromHex(match[1] + "" + match[1]),
|
|
1328
|
+
g: parseIntFromHex(match[2] + "" + match[2]),
|
|
1329
|
+
b: parseIntFromHex(match[3] + "" + match[3]),
|
|
1330
|
+
format: named ? "name" : "hex"
|
|
1331
|
+
};
|
|
1332
|
+
}
|
|
1333
|
+
return false;
|
|
1334
|
+
}
|
|
1335
|
+
function validateWCAG2Parms(parms) {
|
|
1336
|
+
var level, size;
|
|
1337
|
+
parms = parms || {
|
|
1338
|
+
level: "AA",
|
|
1339
|
+
size: "small"
|
|
1340
|
+
};
|
|
1341
|
+
level = (parms.level || "AA").toUpperCase();
|
|
1342
|
+
size = (parms.size || "small").toLowerCase();
|
|
1343
|
+
if (level !== "AA" && level !== "AAA") {
|
|
1344
|
+
level = "AA";
|
|
1345
|
+
}
|
|
1346
|
+
if (size !== "small" && size !== "large") {
|
|
1347
|
+
size = "small";
|
|
1348
|
+
}
|
|
1349
|
+
return {
|
|
1350
|
+
level,
|
|
1351
|
+
size
|
|
1352
|
+
};
|
|
1353
|
+
}
|
|
530
1354
|
|
|
531
1355
|
// src/colors.ts
|
|
532
|
-
|
|
1356
|
+
import { clamp } from "@excalidraw/math";
|
|
1357
|
+
import { degreesToRadians } from "@excalidraw/math";
|
|
1358
|
+
var DARK_MODE_COLORS_CACHE = typeof window !== "undefined" ? /* @__PURE__ */ new Map() : null;
|
|
1359
|
+
function cssHueRotate(red, green, blue, degrees) {
|
|
1360
|
+
const r = red / 255;
|
|
1361
|
+
const g = green / 255;
|
|
1362
|
+
const b = blue / 255;
|
|
1363
|
+
const a = degreesToRadians(degrees);
|
|
1364
|
+
const c = Math.cos(a);
|
|
1365
|
+
const s = Math.sin(a);
|
|
1366
|
+
const matrix = [
|
|
1367
|
+
0.213 + c * 0.787 - s * 0.213,
|
|
1368
|
+
0.715 - c * 0.715 - s * 0.715,
|
|
1369
|
+
0.072 - c * 0.072 + s * 0.928,
|
|
1370
|
+
0.213 - c * 0.213 + s * 0.143,
|
|
1371
|
+
0.715 + c * 0.285 + s * 0.14,
|
|
1372
|
+
0.072 - c * 0.072 - s * 0.283,
|
|
1373
|
+
0.213 - c * 0.213 - s * 0.787,
|
|
1374
|
+
0.715 - c * 0.715 + s * 0.715,
|
|
1375
|
+
0.072 + c * 0.928 + s * 0.072
|
|
1376
|
+
];
|
|
1377
|
+
const newR = r * matrix[0] + g * matrix[1] + b * matrix[2];
|
|
1378
|
+
const newG = r * matrix[3] + g * matrix[4] + b * matrix[5];
|
|
1379
|
+
const newB = r * matrix[6] + g * matrix[7] + b * matrix[8];
|
|
1380
|
+
return {
|
|
1381
|
+
r: Math.round(Math.max(0, Math.min(1, newR)) * 255),
|
|
1382
|
+
g: Math.round(Math.max(0, Math.min(1, newG)) * 255),
|
|
1383
|
+
b: Math.round(Math.max(0, Math.min(1, newB)) * 255)
|
|
1384
|
+
};
|
|
1385
|
+
}
|
|
1386
|
+
var cssInvert = (r, g, b, percent) => {
|
|
1387
|
+
const p = clamp(percent, 0, 100) / 100;
|
|
1388
|
+
const invertComponent = (color) => {
|
|
1389
|
+
const inverted = color * (1 - p) + (255 - color) * p;
|
|
1390
|
+
return Math.round(clamp(inverted, 0, 255));
|
|
1391
|
+
};
|
|
1392
|
+
const invertedR = invertComponent(r);
|
|
1393
|
+
const invertedG = invertComponent(g);
|
|
1394
|
+
const invertedB = invertComponent(b);
|
|
1395
|
+
return { r: invertedR, g: invertedG, b: invertedB };
|
|
1396
|
+
};
|
|
1397
|
+
var applyDarkModeFilter = (color, enable = true) => {
|
|
1398
|
+
if (!enable) {
|
|
1399
|
+
return color;
|
|
1400
|
+
}
|
|
1401
|
+
const cached = DARK_MODE_COLORS_CACHE?.get(color);
|
|
1402
|
+
if (cached) {
|
|
1403
|
+
return cached;
|
|
1404
|
+
}
|
|
1405
|
+
const tc = tinycolor(color);
|
|
1406
|
+
const alpha = tc.getAlpha();
|
|
1407
|
+
const rgb = tc.toRgb();
|
|
1408
|
+
const inverted = cssInvert(rgb.r, rgb.g, rgb.b, 93);
|
|
1409
|
+
const rotated = cssHueRotate(
|
|
1410
|
+
inverted.r,
|
|
1411
|
+
inverted.g,
|
|
1412
|
+
inverted.b,
|
|
1413
|
+
180
|
|
1414
|
+
);
|
|
1415
|
+
const result = rgbToHex2(rotated.r, rotated.g, rotated.b, alpha);
|
|
1416
|
+
if (DARK_MODE_COLORS_CACHE) {
|
|
1417
|
+
DARK_MODE_COLORS_CACHE.set(color, result);
|
|
1418
|
+
}
|
|
1419
|
+
return result;
|
|
1420
|
+
};
|
|
533
1421
|
var pick = (source, keys) => {
|
|
534
1422
|
return keys.reduce((acc, key) => {
|
|
535
1423
|
if (key in source) {
|
|
@@ -543,28 +1431,24 @@ var COLORS_PER_ROW = 5;
|
|
|
543
1431
|
var DEFAULT_CHART_COLOR_INDEX = 4;
|
|
544
1432
|
var DEFAULT_ELEMENT_STROKE_COLOR_INDEX = 4;
|
|
545
1433
|
var DEFAULT_ELEMENT_BACKGROUND_COLOR_INDEX = 1;
|
|
546
|
-
var ELEMENTS_PALETTE_SHADE_INDEXES = [0, 2, 4, 6, 8];
|
|
547
|
-
var CANVAS_PALETTE_SHADE_INDEXES = [0, 1, 2, 3, 4];
|
|
548
|
-
var getSpecificColorShades = (color, indexArr) => {
|
|
549
|
-
return indexArr.map((index) => open_color_default[color][index]);
|
|
550
|
-
};
|
|
551
1434
|
var COLOR_PALETTE = {
|
|
552
1435
|
transparent: "transparent",
|
|
553
1436
|
black: "#1e1e1e",
|
|
554
1437
|
white: "#ffffff",
|
|
555
|
-
// open-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
1438
|
+
// open-color from https://github.com/yeun/open-color/blob/master/open-color.js
|
|
1439
|
+
// corresponds to indexes [0,2,4,6,8] (weights: 50, 200, 400, 600, 800)
|
|
1440
|
+
gray: ["#f8f9fa", "#e9ecef", "#ced4da", "#868e96", "#343a40"],
|
|
1441
|
+
red: ["#fff5f5", "#ffc9c9", "#ff8787", "#fa5252", "#e03131"],
|
|
1442
|
+
pink: ["#fff0f6", "#fcc2d7", "#f783ac", "#e64980", "#c2255c"],
|
|
1443
|
+
grape: ["#f8f0fc", "#eebefa", "#da77f2", "#be4bdb", "#9c36b5"],
|
|
1444
|
+
violet: ["#f3f0ff", "#d0bfff", "#9775fa", "#7950f2", "#6741d9"],
|
|
1445
|
+
blue: ["#e7f5ff", "#a5d8ff", "#4dabf7", "#228be6", "#1971c2"],
|
|
1446
|
+
cyan: ["#e3fafc", "#99e9f2", "#3bc9db", "#15aabf", "#0c8599"],
|
|
1447
|
+
teal: ["#e6fcf5", "#96f2d7", "#38d9a9", "#12b886", "#099268"],
|
|
1448
|
+
green: ["#ebfbee", "#b2f2bb", "#69db7c", "#40c057", "#2f9e44"],
|
|
1449
|
+
yellow: ["#fff9db", "#ffec99", "#ffd43b", "#fab005", "#f08c00"],
|
|
1450
|
+
orange: ["#fff4e6", "#ffd8a8", "#ffa94d", "#fd7e14", "#e8590c"],
|
|
1451
|
+
// radix bronze shades [3,5,7,9,11]
|
|
568
1452
|
bronze: ["#f8f1ee", "#eaddd7", "#d2bab0", "#a18072", "#846358"]
|
|
569
1453
|
};
|
|
570
1454
|
var COMMON_ELEMENT_SHADES = pick(COLOR_PALETTE, [
|
|
@@ -636,7 +1520,58 @@ var getAllColorsSpecificShade = (index) => [
|
|
|
636
1520
|
COLOR_PALETTE.orange[index],
|
|
637
1521
|
COLOR_PALETTE.red[index]
|
|
638
1522
|
];
|
|
639
|
-
var
|
|
1523
|
+
var rgbToHex2 = (r, g, b, a) => {
|
|
1524
|
+
const hex6 = `#${((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1)}`;
|
|
1525
|
+
if (a !== void 0 && a < 1) {
|
|
1526
|
+
const alphaHex = Math.round(a * 255).toString(16).padStart(2, "0");
|
|
1527
|
+
return `${hex6}${alphaHex}`;
|
|
1528
|
+
}
|
|
1529
|
+
return hex6;
|
|
1530
|
+
};
|
|
1531
|
+
var colorToHex = (color) => {
|
|
1532
|
+
const tc = tinycolor(color);
|
|
1533
|
+
if (!tc.isValid()) {
|
|
1534
|
+
return null;
|
|
1535
|
+
}
|
|
1536
|
+
const { r, g, b, a } = tc.toRgb();
|
|
1537
|
+
return rgbToHex2(r, g, b, a);
|
|
1538
|
+
};
|
|
1539
|
+
var isTransparent = (color) => {
|
|
1540
|
+
return tinycolor(color).getAlpha() === 0;
|
|
1541
|
+
};
|
|
1542
|
+
var COLOR_OUTLINE_CONTRAST_THRESHOLD = 240;
|
|
1543
|
+
var calculateContrast = (r, g, b) => {
|
|
1544
|
+
const yiq = (r * 299 + g * 587 + b * 114) / 1e3;
|
|
1545
|
+
return yiq;
|
|
1546
|
+
};
|
|
1547
|
+
var isColorDark = (color, threshold = 160) => {
|
|
1548
|
+
if (!color) {
|
|
1549
|
+
return true;
|
|
1550
|
+
}
|
|
1551
|
+
if (isTransparent(color)) {
|
|
1552
|
+
return false;
|
|
1553
|
+
}
|
|
1554
|
+
const tc = tinycolor(color);
|
|
1555
|
+
if (!tc.isValid()) {
|
|
1556
|
+
return true;
|
|
1557
|
+
}
|
|
1558
|
+
const { r, g, b } = tc.toRgb();
|
|
1559
|
+
return calculateContrast(r, g, b) < threshold;
|
|
1560
|
+
};
|
|
1561
|
+
var normalizeInputColor = (color) => {
|
|
1562
|
+
color = color.trim();
|
|
1563
|
+
if (isTransparent(color)) {
|
|
1564
|
+
return color;
|
|
1565
|
+
}
|
|
1566
|
+
const tc = tinycolor(color);
|
|
1567
|
+
if (tc.isValid()) {
|
|
1568
|
+
if (["hex", "hex8"].includes(tc.getFormat()) && !color.startsWith("#")) {
|
|
1569
|
+
return `#${color}`;
|
|
1570
|
+
}
|
|
1571
|
+
return color;
|
|
1572
|
+
}
|
|
1573
|
+
return null;
|
|
1574
|
+
};
|
|
640
1575
|
|
|
641
1576
|
// src/constants.ts
|
|
642
1577
|
init_define_import_meta_env();
|
|
@@ -727,7 +1662,14 @@ var CLASSES = {
|
|
|
727
1662
|
SEARCH_MENU_INPUT_WRAPPER: "layer-ui__search-inputWrapper",
|
|
728
1663
|
CONVERT_ELEMENT_TYPE_POPUP: "ConvertElementTypePopup",
|
|
729
1664
|
SHAPE_ACTIONS_THEME_SCOPE: "shape-actions-theme-scope",
|
|
730
|
-
FRAME_NAME: "frame-name"
|
|
1665
|
+
FRAME_NAME: "frame-name",
|
|
1666
|
+
DROPDOWN_MENU_EVENT_WRAPPER: "dropdown-menu-event-wrapper"
|
|
1667
|
+
};
|
|
1668
|
+
var FONT_SIZES = {
|
|
1669
|
+
sm: 16,
|
|
1670
|
+
md: 20,
|
|
1671
|
+
lg: 28,
|
|
1672
|
+
xl: 36
|
|
731
1673
|
};
|
|
732
1674
|
var CJK_HAND_DRAWN_FALLBACK_FONT = "Xiaolai";
|
|
733
1675
|
var WINDOWS_EMOJI_FALLBACK_FONT = "Segoe UI Emoji";
|
|
@@ -780,6 +1722,7 @@ var THEME = {
|
|
|
780
1722
|
LIGHT: "light",
|
|
781
1723
|
DARK: "dark"
|
|
782
1724
|
};
|
|
1725
|
+
var DARK_THEME_FILTER = "invert(93%) hue-rotate(180deg)";
|
|
783
1726
|
var FRAME_STYLE = {
|
|
784
1727
|
strokeColor: "#bbb",
|
|
785
1728
|
strokeWidth: 2,
|
|
@@ -828,6 +1771,7 @@ var STRING_MIME_TYPES = {
|
|
|
828
1771
|
json: "application/json",
|
|
829
1772
|
// excalidraw data
|
|
830
1773
|
excalidraw: "application/vnd.excalidraw+json",
|
|
1774
|
+
excalidrawClipboard: "application/vnd.excalidraw.clipboard+json",
|
|
831
1775
|
// LEGACY: fully-qualified library JSON data
|
|
832
1776
|
excalidrawlib: "application/vnd.excalidrawlib+json",
|
|
833
1777
|
// list of excalidraw library item ids
|
|
@@ -872,7 +1816,6 @@ var MAX_ZOOM = 30;
|
|
|
872
1816
|
var HYPERLINK_TOOLTIP_DELAY = 300;
|
|
873
1817
|
var IDLE_THRESHOLD = 6e4;
|
|
874
1818
|
var ACTIVE_THRESHOLD = 3e3;
|
|
875
|
-
var THEME_FILTER = "invert(93%) hue-rotate(180deg)";
|
|
876
1819
|
var URL_QUERY_KEYS = {
|
|
877
1820
|
addLibrary: "addLibrary"
|
|
878
1821
|
};
|
|
@@ -896,8 +1839,10 @@ var DEFAULT_UI_OPTIONS = {
|
|
|
896
1839
|
var MAX_DECIMALS_FOR_SVG_EXPORT = 2;
|
|
897
1840
|
var EXPORT_SCALES = [1, 2, 3];
|
|
898
1841
|
var DEFAULT_EXPORT_PADDING = 10;
|
|
899
|
-
var
|
|
900
|
-
|
|
1842
|
+
var DEFAULT_IMAGE_OPTIONS = {
|
|
1843
|
+
maxWidthOrHeight: 1440,
|
|
1844
|
+
maxFileSizeBytes: 4 * 1024 * 1024
|
|
1845
|
+
};
|
|
901
1846
|
var SVG_NS = "http://www.w3.org/2000/svg";
|
|
902
1847
|
var SVG_DOCUMENT_PREAMBLE = `<?xml version="1.0" standalone="no"?>
|
|
903
1848
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
|
@@ -944,16 +1889,34 @@ var ROUGHNESS = {
|
|
|
944
1889
|
artist: 1,
|
|
945
1890
|
cartoonist: 2
|
|
946
1891
|
};
|
|
1892
|
+
var STROKE_WIDTH_KEYS = [
|
|
1893
|
+
"thin",
|
|
1894
|
+
"medium",
|
|
1895
|
+
"bold"
|
|
1896
|
+
];
|
|
947
1897
|
var STROKE_WIDTH = {
|
|
948
1898
|
thin: 1,
|
|
1899
|
+
medium: 2,
|
|
1900
|
+
bold: 4,
|
|
1901
|
+
extraBold: 8
|
|
1902
|
+
// unused (may be introduced in the future)
|
|
1903
|
+
};
|
|
1904
|
+
var FREEDRAW_STROKE_WIDTH = {
|
|
1905
|
+
thin: 0.5,
|
|
1906
|
+
medium: 1,
|
|
949
1907
|
bold: 2,
|
|
950
1908
|
extraBold: 4
|
|
1909
|
+
// legacy (may be used again in the future)
|
|
1910
|
+
};
|
|
1911
|
+
var getStrokeWidthByKey = (elementType, strokeWidthKey) => {
|
|
1912
|
+
return elementType === "freedraw" ? FREEDRAW_STROKE_WIDTH[strokeWidthKey] : STROKE_WIDTH[strokeWidthKey];
|
|
951
1913
|
};
|
|
1914
|
+
var DEFAULT_ELEMENT_STROKE_WIDTH_KEY = "medium";
|
|
952
1915
|
var DEFAULT_ELEMENT_PROPS = {
|
|
953
1916
|
strokeColor: COLOR_PALETTE.black,
|
|
954
1917
|
backgroundColor: COLOR_PALETTE.transparent,
|
|
955
1918
|
fillStyle: "solid",
|
|
956
|
-
strokeWidth:
|
|
1919
|
+
strokeWidth: STROKE_WIDTH[DEFAULT_ELEMENT_STROKE_WIDTH_KEY],
|
|
957
1920
|
strokeStyle: "solid",
|
|
958
1921
|
roughness: ROUGHNESS.artist,
|
|
959
1922
|
opacity: 100,
|
|
@@ -1017,6 +1980,8 @@ var BIND_MODE_TIMEOUT = 700;
|
|
|
1017
1980
|
var MOBILE_ACTION_BUTTON_BG = {
|
|
1018
1981
|
background: "var(--mobile-action-button-bg)"
|
|
1019
1982
|
};
|
|
1983
|
+
var DEFAULT_STROKE_STREAMLINE = 0.5;
|
|
1984
|
+
var DEFAULT_STROKE_STREAMLINE_PRECISE = 0.2;
|
|
1020
1985
|
|
|
1021
1986
|
// src/font-metadata.ts
|
|
1022
1987
|
init_define_import_meta_env();
|
|
@@ -1180,7 +2145,7 @@ var MQ_MAX_MOBILE = 599;
|
|
|
1180
2145
|
var MQ_MAX_WIDTH_LANDSCAPE = 1e3;
|
|
1181
2146
|
var MQ_MAX_HEIGHT_LANDSCAPE = 500;
|
|
1182
2147
|
var MQ_MIN_TABLET = MQ_MAX_MOBILE + 1;
|
|
1183
|
-
var MQ_MAX_TABLET =
|
|
2148
|
+
var MQ_MAX_TABLET = 1180;
|
|
1184
2149
|
var MQ_MIN_WIDTH_DESKTOP = 1440;
|
|
1185
2150
|
var MQ_RIGHT_SIDEBAR_MIN_WIDTH = 1229;
|
|
1186
2151
|
var isDarwin = /Mac|iPod|iPhone|iPad/.test(navigator.platform);
|
|
@@ -1544,7 +2509,7 @@ var isInteractive = (target) => {
|
|
|
1544
2509
|
return isInputLike(target) || target instanceof Element && !!target.closest("label, button");
|
|
1545
2510
|
};
|
|
1546
2511
|
var isWritableElement = (target) => target instanceof HTMLElement && target.dataset.type === "wysiwyg" || target instanceof HTMLBRElement || // newline in wysiwyg
|
|
1547
|
-
target instanceof HTMLTextAreaElement || target instanceof HTMLInputElement && (target.type === "text" || target.type === "number" || target.type === "password" || target.type === "search");
|
|
2512
|
+
target instanceof HTMLTextAreaElement || target instanceof HTMLInputElement && (target.type === "text" || target.type === "number" || target.type === "password" || target.type === "search") || target instanceof HTMLElement && target.closest(".cm-editor") !== null;
|
|
1548
2513
|
var getFontFamilyString = ({
|
|
1549
2514
|
fontFamily
|
|
1550
2515
|
}) => {
|
|
@@ -1589,32 +2554,23 @@ var debounce = (fn, timeout) => {
|
|
|
1589
2554
|
};
|
|
1590
2555
|
return ret;
|
|
1591
2556
|
};
|
|
1592
|
-
var throttleRAF = (fn
|
|
2557
|
+
var throttleRAF = (fn) => {
|
|
1593
2558
|
let timerId = null;
|
|
1594
2559
|
let lastArgs = null;
|
|
1595
|
-
|
|
1596
|
-
const scheduleFunc = (args) => {
|
|
2560
|
+
const scheduleFunc = () => {
|
|
1597
2561
|
timerId = window.requestAnimationFrame(() => {
|
|
1598
2562
|
timerId = null;
|
|
1599
|
-
|
|
2563
|
+
const args = lastArgs;
|
|
1600
2564
|
lastArgs = null;
|
|
1601
|
-
if (
|
|
1602
|
-
|
|
1603
|
-
lastArgsTrailing = null;
|
|
1604
|
-
scheduleFunc(lastArgs);
|
|
2565
|
+
if (args) {
|
|
2566
|
+
fn(...args);
|
|
1605
2567
|
}
|
|
1606
2568
|
});
|
|
1607
2569
|
};
|
|
1608
2570
|
const ret = (...args) => {
|
|
1609
|
-
if (isTestEnv()) {
|
|
1610
|
-
fn(...args);
|
|
1611
|
-
return;
|
|
1612
|
-
}
|
|
1613
2571
|
lastArgs = args;
|
|
1614
2572
|
if (timerId === null) {
|
|
1615
|
-
scheduleFunc(
|
|
1616
|
-
} else if (opts?.trailing) {
|
|
1617
|
-
lastArgsTrailing = args;
|
|
2573
|
+
scheduleFunc();
|
|
1618
2574
|
}
|
|
1619
2575
|
};
|
|
1620
2576
|
ret.flush = () => {
|
|
@@ -1623,12 +2579,12 @@ var throttleRAF = (fn, opts) => {
|
|
|
1623
2579
|
timerId = null;
|
|
1624
2580
|
}
|
|
1625
2581
|
if (lastArgs) {
|
|
1626
|
-
fn(...
|
|
1627
|
-
lastArgs =
|
|
2582
|
+
fn(...lastArgs);
|
|
2583
|
+
lastArgs = null;
|
|
1628
2584
|
}
|
|
1629
2585
|
};
|
|
1630
2586
|
ret.cancel = () => {
|
|
1631
|
-
lastArgs =
|
|
2587
|
+
lastArgs = null;
|
|
1632
2588
|
if (timerId !== null) {
|
|
1633
2589
|
cancelAnimationFrame(timerId);
|
|
1634
2590
|
timerId = null;
|
|
@@ -1639,67 +2595,6 @@ var throttleRAF = (fn, opts) => {
|
|
|
1639
2595
|
var easeOut = (k) => {
|
|
1640
2596
|
return 1 - Math.pow(1 - k, 4);
|
|
1641
2597
|
};
|
|
1642
|
-
var easeOutInterpolate = (from, to, progress) => {
|
|
1643
|
-
return (to - from) * easeOut(progress) + from;
|
|
1644
|
-
};
|
|
1645
|
-
var easeToValuesRAF = ({
|
|
1646
|
-
fromValues,
|
|
1647
|
-
toValues,
|
|
1648
|
-
onStep,
|
|
1649
|
-
duration = 250,
|
|
1650
|
-
interpolateValue,
|
|
1651
|
-
onStart,
|
|
1652
|
-
onEnd,
|
|
1653
|
-
onCancel
|
|
1654
|
-
}) => {
|
|
1655
|
-
let canceled = false;
|
|
1656
|
-
let frameId = 0;
|
|
1657
|
-
let startTime;
|
|
1658
|
-
function step(timestamp) {
|
|
1659
|
-
if (canceled) {
|
|
1660
|
-
return;
|
|
1661
|
-
}
|
|
1662
|
-
if (startTime === void 0) {
|
|
1663
|
-
startTime = timestamp;
|
|
1664
|
-
onStart?.();
|
|
1665
|
-
}
|
|
1666
|
-
const elapsed = Math.min(timestamp - startTime, duration);
|
|
1667
|
-
const factor = easeOut(elapsed / duration);
|
|
1668
|
-
const newValues = {};
|
|
1669
|
-
Object.keys(fromValues).forEach((key) => {
|
|
1670
|
-
const _key = key;
|
|
1671
|
-
const result = (toValues[_key] - fromValues[_key]) * factor + fromValues[_key];
|
|
1672
|
-
newValues[_key] = result;
|
|
1673
|
-
});
|
|
1674
|
-
onStep(newValues);
|
|
1675
|
-
if (elapsed < duration) {
|
|
1676
|
-
const progress = elapsed / duration;
|
|
1677
|
-
const newValues2 = {};
|
|
1678
|
-
Object.keys(fromValues).forEach((key) => {
|
|
1679
|
-
const _key = key;
|
|
1680
|
-
const startValue = fromValues[_key];
|
|
1681
|
-
const endValue = toValues[_key];
|
|
1682
|
-
let result;
|
|
1683
|
-
result = interpolateValue ? interpolateValue(startValue, endValue, progress, _key) : easeOutInterpolate(startValue, endValue, progress);
|
|
1684
|
-
if (result == null) {
|
|
1685
|
-
result = easeOutInterpolate(startValue, endValue, progress);
|
|
1686
|
-
}
|
|
1687
|
-
newValues2[_key] = result;
|
|
1688
|
-
});
|
|
1689
|
-
onStep(newValues2);
|
|
1690
|
-
frameId = window.requestAnimationFrame(step);
|
|
1691
|
-
} else {
|
|
1692
|
-
onStep(toValues);
|
|
1693
|
-
onEnd?.();
|
|
1694
|
-
}
|
|
1695
|
-
}
|
|
1696
|
-
frameId = window.requestAnimationFrame(step);
|
|
1697
|
-
return () => {
|
|
1698
|
-
onCancel?.();
|
|
1699
|
-
canceled = true;
|
|
1700
|
-
window.cancelAnimationFrame(frameId);
|
|
1701
|
-
};
|
|
1702
|
-
};
|
|
1703
2598
|
var chunk = (array, size) => {
|
|
1704
2599
|
if (!array.length || size < 1) {
|
|
1705
2600
|
return [];
|
|
@@ -1825,11 +2720,6 @@ var mapFind = (collection, iteratee) => {
|
|
|
1825
2720
|
}
|
|
1826
2721
|
return void 0;
|
|
1827
2722
|
};
|
|
1828
|
-
var isTransparent = (color) => {
|
|
1829
|
-
const isRGBTransparent = color.length === 5 && color.substr(4, 1) === "0";
|
|
1830
|
-
const isRRGGBBTransparent = color.length === 9 && color.substr(7, 2) === "00";
|
|
1831
|
-
return isRGBTransparent || isRRGGBBTransparent || color === COLOR_PALETTE.transparent;
|
|
1832
|
-
};
|
|
1833
2723
|
var resolvablePromise = () => {
|
|
1834
2724
|
let resolve;
|
|
1835
2725
|
let reject;
|
|
@@ -2150,9 +3040,9 @@ function getSvgPathFromStroke(points, closed = true) {
|
|
|
2150
3040
|
var normalizeEOL = (str) => {
|
|
2151
3041
|
return str.replace(/\r?\n|\r/g, "\n");
|
|
2152
3042
|
};
|
|
2153
|
-
|
|
3043
|
+
function toBrandedType(value) {
|
|
2154
3044
|
return value;
|
|
2155
|
-
}
|
|
3045
|
+
}
|
|
2156
3046
|
var promiseTry = async (fn, ...args) => {
|
|
2157
3047
|
return new Promise((resolve) => {
|
|
2158
3048
|
resolve(fn(...args));
|
|
@@ -2224,6 +3114,9 @@ var setFeatureFlag = (flag, value) => {
|
|
|
2224
3114
|
console.error("unable to set feature flag", e);
|
|
2225
3115
|
}
|
|
2226
3116
|
};
|
|
3117
|
+
var oneOf = (needle, haystack) => {
|
|
3118
|
+
return haystack.includes(needle);
|
|
3119
|
+
};
|
|
2227
3120
|
|
|
2228
3121
|
// src/random.ts
|
|
2229
3122
|
var random = new Random(Date.now());
|
|
@@ -2298,106 +3191,297 @@ var Emitter = class {
|
|
|
2298
3191
|
}
|
|
2299
3192
|
};
|
|
2300
3193
|
|
|
2301
|
-
// src/
|
|
3194
|
+
// src/appEventBus.ts
|
|
2302
3195
|
init_define_import_meta_env();
|
|
2303
|
-
|
|
2304
|
-
|
|
2305
|
-
|
|
2306
|
-
|
|
2307
|
-
|
|
2308
|
-
|
|
2309
|
-
|
|
2310
|
-
|
|
2311
|
-
|
|
2312
|
-
|
|
2313
|
-
|
|
2314
|
-
|
|
2315
|
-
};
|
|
2316
|
-
var debugDrawLine = (segment, opts) => {
|
|
2317
|
-
const segments = isLineSegment(segment) ? [segment] : segment;
|
|
2318
|
-
segments.forEach(
|
|
2319
|
-
(data) => addToCurrentFrame({
|
|
2320
|
-
color: opts?.color ?? "red",
|
|
2321
|
-
data,
|
|
2322
|
-
permanent: !!opts?.permanent
|
|
2323
|
-
})
|
|
2324
|
-
);
|
|
2325
|
-
};
|
|
2326
|
-
var debugDrawPoint = (p, opts) => {
|
|
2327
|
-
const xOffset = opts?.fuzzy ? Math.random() * 3 : 0;
|
|
2328
|
-
const yOffset = opts?.fuzzy ? Math.random() * 3 : 0;
|
|
2329
|
-
debugDrawLine(
|
|
2330
|
-
lineSegment(
|
|
2331
|
-
pointFrom(p[0] + xOffset - 10, p[1] + yOffset - 10),
|
|
2332
|
-
pointFrom(p[0] + xOffset + 10, p[1] + yOffset + 10)
|
|
2333
|
-
),
|
|
2334
|
-
{
|
|
2335
|
-
color: opts?.color ?? "cyan",
|
|
2336
|
-
permanent: opts?.permanent
|
|
3196
|
+
var AppEventBus = class {
|
|
3197
|
+
constructor(behavior) {
|
|
3198
|
+
this.behavior = behavior;
|
|
3199
|
+
}
|
|
3200
|
+
emitters = /* @__PURE__ */ new Map();
|
|
3201
|
+
lastPayload = /* @__PURE__ */ new Map();
|
|
3202
|
+
emittedOnce = /* @__PURE__ */ new Set();
|
|
3203
|
+
getEmitter(name) {
|
|
3204
|
+
let emitter = this.emitters.get(name);
|
|
3205
|
+
if (!emitter) {
|
|
3206
|
+
emitter = new Emitter();
|
|
3207
|
+
this.emitters.set(name, emitter);
|
|
2337
3208
|
}
|
|
2338
|
-
|
|
2339
|
-
|
|
2340
|
-
|
|
2341
|
-
|
|
2342
|
-
|
|
2343
|
-
|
|
2344
|
-
|
|
2345
|
-
|
|
2346
|
-
|
|
3209
|
+
return emitter;
|
|
3210
|
+
}
|
|
3211
|
+
toPromiseValue(args) {
|
|
3212
|
+
return args.length === 1 ? args[0] : args;
|
|
3213
|
+
}
|
|
3214
|
+
on(name, callback) {
|
|
3215
|
+
const eventBehavior = this.behavior[name];
|
|
3216
|
+
const cachedPayload = this.lastPayload.get(name);
|
|
3217
|
+
if (callback) {
|
|
3218
|
+
if (eventBehavior.replay === "last" && cachedPayload) {
|
|
3219
|
+
queueMicrotask(() => callback(...cachedPayload));
|
|
3220
|
+
if (eventBehavior.cardinality === "once") {
|
|
3221
|
+
return () => {
|
|
3222
|
+
};
|
|
3223
|
+
}
|
|
3224
|
+
}
|
|
3225
|
+
return this.getEmitter(name).on(callback);
|
|
2347
3226
|
}
|
|
2348
|
-
|
|
2349
|
-
};
|
|
2350
|
-
|
|
2351
|
-
|
|
2352
|
-
|
|
2353
|
-
|
|
2354
|
-
|
|
2355
|
-
|
|
2356
|
-
|
|
2357
|
-
|
|
2358
|
-
|
|
2359
|
-
|
|
2360
|
-
|
|
2361
|
-
|
|
2362
|
-
|
|
2363
|
-
|
|
2364
|
-
|
|
2365
|
-
|
|
2366
|
-
|
|
2367
|
-
|
|
2368
|
-
pointFrom(bbox[0], bbox[1])
|
|
2369
|
-
)
|
|
2370
|
-
],
|
|
2371
|
-
{
|
|
2372
|
-
color: opts?.color ?? "green",
|
|
2373
|
-
permanent: !!opts?.permanent
|
|
3227
|
+
if (eventBehavior.cardinality !== "once" || eventBehavior.replay !== "last") {
|
|
3228
|
+
throw new Error(`Event "${String(name)}" requires a callback`);
|
|
3229
|
+
}
|
|
3230
|
+
if (cachedPayload) {
|
|
3231
|
+
return Promise.resolve(this.toPromiseValue(cachedPayload));
|
|
3232
|
+
}
|
|
3233
|
+
return new Promise((resolve) => {
|
|
3234
|
+
this.getEmitter(name).once((...args) => {
|
|
3235
|
+
resolve(this.toPromiseValue(args));
|
|
3236
|
+
});
|
|
3237
|
+
});
|
|
3238
|
+
}
|
|
3239
|
+
emit(name, ...args) {
|
|
3240
|
+
const eventBehavior = this.behavior[name];
|
|
3241
|
+
if (!isProdEnv()) {
|
|
3242
|
+
if (eventBehavior.cardinality === "once") {
|
|
3243
|
+
if (this.emittedOnce.has(name)) {
|
|
3244
|
+
throw new Error(`Event "${String(name)}" can only be emitted once`);
|
|
3245
|
+
}
|
|
3246
|
+
this.emittedOnce.add(name);
|
|
2374
3247
|
}
|
|
2375
|
-
|
|
2376
|
-
|
|
2377
|
-
|
|
2378
|
-
|
|
2379
|
-
|
|
2380
|
-
|
|
2381
|
-
|
|
2382
|
-
|
|
2383
|
-
|
|
2384
|
-
|
|
2385
|
-
|
|
2386
|
-
}
|
|
2387
|
-
|
|
2388
|
-
|
|
3248
|
+
}
|
|
3249
|
+
if (eventBehavior.replay === "last") {
|
|
3250
|
+
this.lastPayload.set(name, args);
|
|
3251
|
+
}
|
|
3252
|
+
try {
|
|
3253
|
+
this.getEmitter(name).trigger(...args);
|
|
3254
|
+
} finally {
|
|
3255
|
+
if (eventBehavior.cardinality === "once") {
|
|
3256
|
+
this.getEmitter(name).clear();
|
|
3257
|
+
}
|
|
3258
|
+
}
|
|
3259
|
+
}
|
|
3260
|
+
clear() {
|
|
3261
|
+
this.lastPayload.clear();
|
|
3262
|
+
this.emittedOnce.clear();
|
|
3263
|
+
for (const emitter of this.emitters.values()) {
|
|
3264
|
+
emitter.clear();
|
|
3265
|
+
}
|
|
3266
|
+
this.emitters.clear();
|
|
3267
|
+
}
|
|
2389
3268
|
};
|
|
2390
|
-
|
|
2391
|
-
|
|
2392
|
-
|
|
3269
|
+
|
|
3270
|
+
// src/versionedSnapshotStore.ts
|
|
3271
|
+
init_define_import_meta_env();
|
|
3272
|
+
var VersionedSnapshotStore = class {
|
|
3273
|
+
constructor(initialValue, isEqual = Object.is) {
|
|
3274
|
+
this.isEqual = isEqual;
|
|
3275
|
+
this.value = initialValue;
|
|
3276
|
+
}
|
|
3277
|
+
version = 0;
|
|
3278
|
+
value;
|
|
3279
|
+
waiters = /* @__PURE__ */ new Set();
|
|
3280
|
+
subscribers = /* @__PURE__ */ new Set();
|
|
3281
|
+
getSnapshot() {
|
|
3282
|
+
return { version: this.version, value: this.value };
|
|
3283
|
+
}
|
|
3284
|
+
set(nextValue) {
|
|
3285
|
+
if (this.isEqual(this.value, nextValue)) {
|
|
3286
|
+
return false;
|
|
3287
|
+
}
|
|
3288
|
+
this.value = nextValue;
|
|
3289
|
+
this.version += 1;
|
|
3290
|
+
const snapshot = this.getSnapshot();
|
|
3291
|
+
for (const subscriber of this.subscribers) {
|
|
3292
|
+
subscriber(snapshot);
|
|
3293
|
+
}
|
|
3294
|
+
for (const waiter of this.waiters) {
|
|
3295
|
+
waiter(snapshot);
|
|
3296
|
+
}
|
|
3297
|
+
this.waiters.clear();
|
|
3298
|
+
return true;
|
|
3299
|
+
}
|
|
3300
|
+
update(updater) {
|
|
3301
|
+
return this.set(updater(this.value));
|
|
3302
|
+
}
|
|
3303
|
+
subscribe(subscriber) {
|
|
3304
|
+
this.subscribers.add(subscriber);
|
|
3305
|
+
return () => {
|
|
3306
|
+
this.subscribers.delete(subscriber);
|
|
3307
|
+
};
|
|
3308
|
+
}
|
|
3309
|
+
pull(sinceVersion = -1) {
|
|
3310
|
+
if (this.version !== sinceVersion) {
|
|
3311
|
+
return Promise.resolve(this.getSnapshot());
|
|
3312
|
+
}
|
|
3313
|
+
return new Promise((resolve) => {
|
|
3314
|
+
this.waiters.add(resolve);
|
|
3315
|
+
});
|
|
2393
3316
|
}
|
|
2394
3317
|
};
|
|
2395
|
-
|
|
2396
|
-
|
|
2397
|
-
|
|
3318
|
+
|
|
3319
|
+
// debug.ts
|
|
3320
|
+
init_define_import_meta_env();
|
|
3321
|
+
var lessPrecise = (num, precision = 5) => parseFloat(num.toPrecision(precision));
|
|
3322
|
+
var getAvgFrameTime = (times) => lessPrecise(times.reduce((a, b) => a + b) / times.length);
|
|
3323
|
+
var Debug = class _Debug {
|
|
3324
|
+
static DEBUG_LOG_TIMES = true;
|
|
3325
|
+
static TIMES_AGGR = {};
|
|
3326
|
+
static TIMES_AVG = {};
|
|
3327
|
+
static LAST_DEBUG_LOG_CALL = 0;
|
|
3328
|
+
static DEBUG_LOG_INTERVAL_ID = null;
|
|
3329
|
+
static LAST_FRAME_TIMESTAMP = 0;
|
|
3330
|
+
static FRAME_COUNT = 0;
|
|
3331
|
+
static ANIMATION_FRAME_ID = null;
|
|
3332
|
+
static scheduleAnimationFrame = () => {
|
|
3333
|
+
if (_Debug.DEBUG_LOG_INTERVAL_ID !== null) {
|
|
3334
|
+
_Debug.ANIMATION_FRAME_ID = requestAnimationFrame((timestamp) => {
|
|
3335
|
+
if (_Debug.LAST_FRAME_TIMESTAMP !== timestamp) {
|
|
3336
|
+
_Debug.LAST_FRAME_TIMESTAMP = timestamp;
|
|
3337
|
+
_Debug.FRAME_COUNT++;
|
|
3338
|
+
}
|
|
3339
|
+
if (_Debug.DEBUG_LOG_INTERVAL_ID !== null) {
|
|
3340
|
+
_Debug.scheduleAnimationFrame();
|
|
3341
|
+
}
|
|
3342
|
+
});
|
|
3343
|
+
}
|
|
3344
|
+
};
|
|
3345
|
+
static setupInterval = () => {
|
|
3346
|
+
if (_Debug.DEBUG_LOG_INTERVAL_ID === null) {
|
|
3347
|
+
console.info("%c(starting perf recording)", "color: lime");
|
|
3348
|
+
_Debug.DEBUG_LOG_INTERVAL_ID = window.setInterval(_Debug.debugLogger, 1e3);
|
|
3349
|
+
_Debug.scheduleAnimationFrame();
|
|
3350
|
+
}
|
|
3351
|
+
_Debug.LAST_DEBUG_LOG_CALL = Date.now();
|
|
3352
|
+
};
|
|
3353
|
+
static debugLogger = () => {
|
|
3354
|
+
if (_Debug.DEBUG_LOG_TIMES) {
|
|
3355
|
+
for (const [name, { t, times }] of Object.entries(_Debug.TIMES_AGGR)) {
|
|
3356
|
+
if (times.length) {
|
|
3357
|
+
console.info(
|
|
3358
|
+
name,
|
|
3359
|
+
lessPrecise(times.reduce((a, b) => a + b)),
|
|
3360
|
+
times.sort((a, b) => a - b).map((x) => lessPrecise(x))
|
|
3361
|
+
);
|
|
3362
|
+
_Debug.TIMES_AGGR[name] = { t, times: [] };
|
|
3363
|
+
}
|
|
3364
|
+
}
|
|
3365
|
+
for (const [name, { t, times, avg }] of Object.entries(_Debug.TIMES_AVG)) {
|
|
3366
|
+
if (times.length) {
|
|
3367
|
+
const totalTime = times.reduce((a, b) => a + b);
|
|
3368
|
+
const avgFrameTime = lessPrecise(totalTime / _Debug.FRAME_COUNT);
|
|
3369
|
+
console.info(
|
|
3370
|
+
name,
|
|
3371
|
+
`- ${times.length} calls - ${avgFrameTime}ms/frame across ${_Debug.FRAME_COUNT} frames (${lessPrecise(
|
|
3372
|
+
avgFrameTime / 16.67 * 100,
|
|
3373
|
+
1
|
|
3374
|
+
)}% of frame budget)`
|
|
3375
|
+
);
|
|
3376
|
+
_Debug.TIMES_AVG[name] = {
|
|
3377
|
+
t,
|
|
3378
|
+
times: [],
|
|
3379
|
+
avg: avg != null ? getAvgFrameTime([avg, avgFrameTime]) : avgFrameTime
|
|
3380
|
+
};
|
|
3381
|
+
}
|
|
3382
|
+
}
|
|
3383
|
+
}
|
|
3384
|
+
_Debug.FRAME_COUNT = 0;
|
|
3385
|
+
if (Date.now() - _Debug.LAST_DEBUG_LOG_CALL > 600 && _Debug.DEBUG_LOG_INTERVAL_ID !== null) {
|
|
3386
|
+
console.info("%c(stopping perf recording)", "color: red");
|
|
3387
|
+
window.clearInterval(_Debug.DEBUG_LOG_INTERVAL_ID);
|
|
3388
|
+
window.cancelAnimationFrame(_Debug.ANIMATION_FRAME_ID);
|
|
3389
|
+
_Debug.ANIMATION_FRAME_ID = null;
|
|
3390
|
+
_Debug.FRAME_COUNT = 0;
|
|
3391
|
+
_Debug.LAST_FRAME_TIMESTAMP = 0;
|
|
3392
|
+
_Debug.DEBUG_LOG_INTERVAL_ID = null;
|
|
3393
|
+
_Debug.TIMES_AGGR = {};
|
|
3394
|
+
_Debug.TIMES_AVG = {};
|
|
3395
|
+
}
|
|
3396
|
+
};
|
|
3397
|
+
static logTime = (time, name = "default") => {
|
|
3398
|
+
_Debug.setupInterval();
|
|
3399
|
+
const now = performance.now();
|
|
3400
|
+
const { t, times } = _Debug.TIMES_AGGR[name] = _Debug.TIMES_AGGR[name] || {
|
|
3401
|
+
t: 0,
|
|
3402
|
+
times: []
|
|
3403
|
+
};
|
|
3404
|
+
if (t) {
|
|
3405
|
+
times.push(time != null ? time : now - t);
|
|
3406
|
+
}
|
|
3407
|
+
_Debug.TIMES_AGGR[name].t = now;
|
|
3408
|
+
};
|
|
3409
|
+
static logTimeAverage = (time, name = "default") => {
|
|
3410
|
+
_Debug.setupInterval();
|
|
3411
|
+
const now = performance.now();
|
|
3412
|
+
const { t, times } = _Debug.TIMES_AVG[name] = _Debug.TIMES_AVG[name] || {
|
|
3413
|
+
t: 0,
|
|
3414
|
+
times: []
|
|
3415
|
+
};
|
|
3416
|
+
if (t) {
|
|
3417
|
+
times.push(time != null ? time : now - t);
|
|
3418
|
+
}
|
|
3419
|
+
_Debug.TIMES_AVG[name].t = now;
|
|
3420
|
+
};
|
|
3421
|
+
static logWrapper = (type) => (fn, name = "default") => {
|
|
3422
|
+
return (...args) => {
|
|
3423
|
+
const t0 = performance.now();
|
|
3424
|
+
const ret = fn(...args);
|
|
3425
|
+
_Debug[type](performance.now() - t0, name);
|
|
3426
|
+
return ret;
|
|
3427
|
+
};
|
|
3428
|
+
};
|
|
3429
|
+
static logTimeWrap = _Debug.logWrapper("logTime");
|
|
3430
|
+
static logTimeAverageWrap = _Debug.logWrapper("logTimeAverage");
|
|
3431
|
+
static perfWrap = (fn, name = "default") => {
|
|
3432
|
+
return (...args) => {
|
|
3433
|
+
console.time(name);
|
|
3434
|
+
const ret = fn(...args);
|
|
3435
|
+
console.timeEnd(name);
|
|
3436
|
+
return ret;
|
|
3437
|
+
};
|
|
3438
|
+
};
|
|
3439
|
+
static CHANGED_CACHE = {};
|
|
3440
|
+
static logChanged(name, obj) {
|
|
3441
|
+
const prev = _Debug.CHANGED_CACHE[name];
|
|
3442
|
+
_Debug.CHANGED_CACHE[name] = obj;
|
|
3443
|
+
if (!prev) {
|
|
3444
|
+
return;
|
|
3445
|
+
}
|
|
3446
|
+
const allKeys = /* @__PURE__ */ new Set([...Object.keys(prev), ...Object.keys(obj)]);
|
|
3447
|
+
const changed = {};
|
|
3448
|
+
for (const key of allKeys) {
|
|
3449
|
+
const prevVal = prev[key];
|
|
3450
|
+
const nextVal = obj[key];
|
|
3451
|
+
if (!deepEqual(prevVal, nextVal)) {
|
|
3452
|
+
changed[key] = { prev: prevVal, next: nextVal };
|
|
3453
|
+
}
|
|
3454
|
+
}
|
|
3455
|
+
if (Object.keys(changed).length > 0) {
|
|
3456
|
+
console.info(`[${name}] changed:`, changed);
|
|
3457
|
+
}
|
|
2398
3458
|
}
|
|
2399
|
-
window.visualDebug?.data && window.visualDebug.data[window.visualDebug.data.length - 1].push(element);
|
|
2400
3459
|
};
|
|
3460
|
+
function deepEqual(a, b) {
|
|
3461
|
+
if (Object.is(a, b)) {
|
|
3462
|
+
return true;
|
|
3463
|
+
}
|
|
3464
|
+
if (a === null || b === null || typeof a !== "object" || typeof b !== "object") {
|
|
3465
|
+
return false;
|
|
3466
|
+
}
|
|
3467
|
+
if (Array.isArray(a) !== Array.isArray(b)) {
|
|
3468
|
+
return false;
|
|
3469
|
+
}
|
|
3470
|
+
const keysA = Object.keys(a);
|
|
3471
|
+
const keysB = Object.keys(b);
|
|
3472
|
+
if (keysA.length !== keysB.length) {
|
|
3473
|
+
return false;
|
|
3474
|
+
}
|
|
3475
|
+
for (const key of keysA) {
|
|
3476
|
+
if (!deepEqual(
|
|
3477
|
+
a[key],
|
|
3478
|
+
b[key]
|
|
3479
|
+
)) {
|
|
3480
|
+
return false;
|
|
3481
|
+
}
|
|
3482
|
+
}
|
|
3483
|
+
return true;
|
|
3484
|
+
}
|
|
2401
3485
|
export {
|
|
2402
3486
|
ACTIVE_THRESHOLD,
|
|
2403
3487
|
ALLOWED_PASTE_MIME_TYPES,
|
|
@@ -2405,11 +3489,11 @@ export {
|
|
|
2405
3489
|
ARROW_LABEL_FONT_SIZE_TO_MIN_WIDTH_RATIO,
|
|
2406
3490
|
ARROW_LABEL_WIDTH_FRACTION,
|
|
2407
3491
|
ARROW_TYPE,
|
|
3492
|
+
AppEventBus,
|
|
2408
3493
|
BIND_MODE_TIMEOUT,
|
|
2409
3494
|
BOUND_TEXT_PADDING,
|
|
2410
3495
|
BinaryHeap,
|
|
2411
3496
|
CANVAS_ONLY_ACTIONS,
|
|
2412
|
-
CANVAS_PALETTE_SHADE_INDEXES,
|
|
2413
3497
|
CANVAS_SEARCH_TAB,
|
|
2414
3498
|
CJK_HAND_DRAWN_FALLBACK_FONT,
|
|
2415
3499
|
CLASSES,
|
|
@@ -2421,6 +3505,7 @@ export {
|
|
|
2421
3505
|
COLOR_VOICE_CALL,
|
|
2422
3506
|
COLOR_WHITE,
|
|
2423
3507
|
CURSOR_TYPE,
|
|
3508
|
+
DARK_THEME_FILTER,
|
|
2424
3509
|
DEFAULT_ADAPTIVE_RADIUS,
|
|
2425
3510
|
DEFAULT_CANVAS_BACKGROUND_PICKS,
|
|
2426
3511
|
DEFAULT_CHART_COLOR_INDEX,
|
|
@@ -2432,17 +3517,20 @@ export {
|
|
|
2432
3517
|
DEFAULT_ELEMENT_STROKE_COLOR_INDEX,
|
|
2433
3518
|
DEFAULT_ELEMENT_STROKE_COLOR_PALETTE,
|
|
2434
3519
|
DEFAULT_ELEMENT_STROKE_PICKS,
|
|
3520
|
+
DEFAULT_ELEMENT_STROKE_WIDTH_KEY,
|
|
2435
3521
|
DEFAULT_EXPORT_PADDING,
|
|
2436
3522
|
DEFAULT_FILENAME,
|
|
2437
3523
|
DEFAULT_FONT_FAMILY,
|
|
2438
3524
|
DEFAULT_FONT_SIZE,
|
|
2439
3525
|
DEFAULT_GRID_SIZE,
|
|
2440
3526
|
DEFAULT_GRID_STEP,
|
|
3527
|
+
DEFAULT_IMAGE_OPTIONS,
|
|
2441
3528
|
DEFAULT_LASER_COLOR,
|
|
2442
|
-
DEFAULT_MAX_IMAGE_WIDTH_OR_HEIGHT,
|
|
2443
3529
|
DEFAULT_PROPORTIONAL_RADIUS,
|
|
2444
3530
|
DEFAULT_REDUCED_GLOBAL_ALPHA,
|
|
2445
3531
|
DEFAULT_SIDEBAR,
|
|
3532
|
+
DEFAULT_STROKE_STREAMLINE,
|
|
3533
|
+
DEFAULT_STROKE_STREAMLINE_PRECISE,
|
|
2446
3534
|
DEFAULT_TEXT_ALIGN,
|
|
2447
3535
|
DEFAULT_TRANSFORM_HANDLE_SPACING,
|
|
2448
3536
|
DEFAULT_UI_OPTIONS,
|
|
@@ -2450,8 +3538,8 @@ export {
|
|
|
2450
3538
|
DEFAULT_VERTICAL_ALIGN,
|
|
2451
3539
|
DOUBLE_TAP_POSITION_THRESHOLD,
|
|
2452
3540
|
DRAGGING_THRESHOLD,
|
|
3541
|
+
Debug,
|
|
2453
3542
|
EDITOR_LS_KEYS,
|
|
2454
|
-
ELEMENTS_PALETTE_SHADE_INDEXES,
|
|
2455
3543
|
ELEMENT_LINK_KEY,
|
|
2456
3544
|
ELEMENT_READY_TO_ERASE_OPACITY,
|
|
2457
3545
|
ELEMENT_SHIFT_TRANSLATE_AMOUNT,
|
|
@@ -2468,7 +3556,9 @@ export {
|
|
|
2468
3556
|
FONT_FAMILY_FALLBACKS,
|
|
2469
3557
|
FONT_FAMILY_GENERIC_FALLBACKS,
|
|
2470
3558
|
FONT_METADATA,
|
|
3559
|
+
FONT_SIZES,
|
|
2471
3560
|
FRAME_STYLE,
|
|
3561
|
+
FREEDRAW_STROKE_WIDTH,
|
|
2472
3562
|
GOOGLE_FONTS_RANGES,
|
|
2473
3563
|
HYPERLINK_TOOLTIP_DELAY,
|
|
2474
3564
|
IDLE_THRESHOLD,
|
|
@@ -2481,7 +3571,6 @@ export {
|
|
|
2481
3571
|
LINE_CONFIRM_THRESHOLD,
|
|
2482
3572
|
LINE_POLYGON_POINT_MERGE_DISTANCE,
|
|
2483
3573
|
LOCAL_FONT_PROTOCOL,
|
|
2484
|
-
MAX_ALLOWED_FILE_BYTES,
|
|
2485
3574
|
MAX_CUSTOM_COLORS_USED_IN_CANVAS,
|
|
2486
3575
|
MAX_DECIMALS_FOR_SVG_EXPORT,
|
|
2487
3576
|
MAX_ZOOM,
|
|
@@ -2513,6 +3602,7 @@ export {
|
|
|
2513
3602
|
STATS_PANELS,
|
|
2514
3603
|
STRING_MIME_TYPES,
|
|
2515
3604
|
STROKE_WIDTH,
|
|
3605
|
+
STROKE_WIDTH_KEYS,
|
|
2516
3606
|
SVG_DOCUMENT_PREAMBLE,
|
|
2517
3607
|
SVG_NS,
|
|
2518
3608
|
TAP_TWICE_TIMEOUT,
|
|
@@ -2520,7 +3610,6 @@ export {
|
|
|
2520
3610
|
TEXT_AUTOWRAP_THRESHOLD,
|
|
2521
3611
|
TEXT_TO_CENTER_SNAP_THRESHOLD,
|
|
2522
3612
|
THEME,
|
|
2523
|
-
THEME_FILTER,
|
|
2524
3613
|
TITLE_TIMEOUT,
|
|
2525
3614
|
TOOL_TYPE,
|
|
2526
3615
|
TOUCH_CTX_MENU_TIMEOUT,
|
|
@@ -2530,11 +3619,13 @@ export {
|
|
|
2530
3619
|
VERSIONS,
|
|
2531
3620
|
VERSION_TIMEOUT,
|
|
2532
3621
|
VERTICAL_ALIGN,
|
|
3622
|
+
VersionedSnapshotStore,
|
|
2533
3623
|
WINDOWS_EMOJI_FALLBACK_FONT,
|
|
2534
3624
|
YOUTUBE_STATES,
|
|
2535
3625
|
ZOOM_STEP,
|
|
2536
3626
|
addEventListener,
|
|
2537
3627
|
allowFullScreen,
|
|
3628
|
+
applyDarkModeFilter,
|
|
2538
3629
|
arrayToList,
|
|
2539
3630
|
arrayToMap,
|
|
2540
3631
|
arrayToMapWithIndex,
|
|
@@ -2545,20 +3636,13 @@ export {
|
|
|
2545
3636
|
castArray,
|
|
2546
3637
|
chunk,
|
|
2547
3638
|
cloneJSON,
|
|
3639
|
+
colorToHex,
|
|
2548
3640
|
composeEventHandlers,
|
|
2549
3641
|
createUserAgentDescriptor,
|
|
2550
3642
|
debounce,
|
|
2551
|
-
debugClear,
|
|
2552
|
-
debugCloseFrame,
|
|
2553
|
-
debugDrawBounds,
|
|
2554
|
-
debugDrawCubicBezier,
|
|
2555
|
-
debugDrawLine,
|
|
2556
|
-
debugDrawPoint,
|
|
2557
|
-
debugDrawPoints,
|
|
2558
3643
|
deriveStylesPanelMode,
|
|
2559
3644
|
distance,
|
|
2560
3645
|
easeOut,
|
|
2561
|
-
easeToValuesRAF,
|
|
2562
3646
|
escapeDoubleQuotes,
|
|
2563
3647
|
exitFullScreen,
|
|
2564
3648
|
findIndex,
|
|
@@ -2579,7 +3663,7 @@ export {
|
|
|
2579
3663
|
getLineHeight,
|
|
2580
3664
|
getNearestScrollableContainer,
|
|
2581
3665
|
getSizeFromPoints,
|
|
2582
|
-
|
|
3666
|
+
getStrokeWidthByKey,
|
|
2583
3667
|
getSvgPathFromStroke,
|
|
2584
3668
|
getUpdatedTimestamp,
|
|
2585
3669
|
getVersion,
|
|
@@ -2588,8 +3672,10 @@ export {
|
|
|
2588
3672
|
isAndroid,
|
|
2589
3673
|
isAnyTrue,
|
|
2590
3674
|
isArrowKey,
|
|
3675
|
+
isBounds,
|
|
2591
3676
|
isBrave,
|
|
2592
3677
|
isChrome,
|
|
3678
|
+
isColorDark,
|
|
2593
3679
|
isDarwin,
|
|
2594
3680
|
isDevEnv,
|
|
2595
3681
|
isFirefox,
|
|
@@ -2625,7 +3711,9 @@ export {
|
|
|
2625
3711
|
nFormatter,
|
|
2626
3712
|
nextAnimationFrame,
|
|
2627
3713
|
normalizeEOL,
|
|
3714
|
+
normalizeInputColor,
|
|
2628
3715
|
normalizeLink,
|
|
3716
|
+
oneOf,
|
|
2629
3717
|
preventUnload,
|
|
2630
3718
|
promiseTry,
|
|
2631
3719
|
queryFocusableElements,
|
|
@@ -2636,7 +3724,7 @@ export {
|
|
|
2636
3724
|
rescalePoints,
|
|
2637
3725
|
reseed,
|
|
2638
3726
|
resolvablePromise,
|
|
2639
|
-
rgbToHex,
|
|
3727
|
+
rgbToHex2 as rgbToHex,
|
|
2640
3728
|
safelyParseJSON,
|
|
2641
3729
|
sceneCoordsToViewportCoords,
|
|
2642
3730
|
selectNode,
|