diff --git a/.obsidian/plugins/obsidian-excalidraw-plugin/data.json b/.obsidian/plugins/obsidian-excalidraw-plugin/data.json index a4082108..f1e7bc46 100644 --- a/.obsidian/plugins/obsidian-excalidraw-plugin/data.json +++ b/.obsidian/plugins/obsidian-excalidraw-plugin/data.json @@ -1,4 +1,7 @@ { + "copyLinkToElemenetAnchorTo100": false, + "copyFrameLinkByName": false, + "disableDoubleClickTextEditing": false, "folder": "attachments", "cropFolder": "", "annotateFolder": "", @@ -21,7 +24,9 @@ "drawingFilnameEmbedPostfix": " ", "drawingFilenameDateTime": "YYYY-MM-DD HH.mm.ss", "useExcalidrawExtension": true, + "cropSuffix": "", "cropPrefix": "cropped_", + "annotateSuffix": "", "annotatePrefix": "annotated_", "annotatePreserveSize": false, "previewImageType": "SVGIMG", @@ -35,6 +40,8 @@ "overrideObsidianFontSize": false, "dynamicStyling": "colorful", "isLeftHanded": false, + "desktopUIMode": "tray", + "tabletUIMode": "compact", "iframeMatchExcalidrawTheme": true, "matchTheme": false, "matchThemeAlways": false, @@ -44,6 +51,7 @@ "penModeDoubleTapEraser": true, "penModeSingleFingerPanning": true, "penModeCrosshairVisible": true, + "panWithRightMouseButton": false, "renderImageInMarkdownReadingMode": false, "renderImageInHoverPreviewForMDNotes": false, "renderImageInMarkdownToPDF": false, @@ -52,6 +60,9 @@ "zoomToFitOnOpen": true, "zoomToFitOnResize": true, "zoomToFitMaxLevel": 2, + "zoomStep": 0.05, + "zoomMin": 0.1, + "zoomMax": 30, "linkPrefix": "📍", "urlPrefix": "🌐", "parseTODO": false, @@ -64,6 +75,7 @@ "focusOnFileTab": true, "openInMainWorkspace": true, "showLinkBrackets": true, + "syncElementLinkWithText": false, "allowCtrlClick": true, "forceWrap": false, "pageTransclusionCharLimit": 200, @@ -111,15 +123,16 @@ "mdBorderColor": "Black", "mdCSS": "", "scriptEngineSettings": {}, - "defaultTrayMode": true, - "previousRelease": "2.10.1", + "previousRelease": "2.20.3", "showReleaseNotes": true, + "compareManifestToPluginVersion": true, "showNewVersionNotification": true, "latexBoilerplate": "\\color{blue}", "latexPreambleLocation": "preamble.sty", "taskboneEnabled": false, "taskboneAPIkey": "", "pinnedScripts": [], + "sidepanelTabs": [], "customPens": [ { "type": "default", @@ -467,8 +480,10 @@ "markdownNodeOneClickEditing": false, "canvasImmersiveEmbed": true, "startupScriptPath": "", + "aiEnabled": true, "openAIAPIToken": "", "openAIDefaultTextModel": "gpt-3.5-turbo-1106", + "openAIDefaultTextModelMaxTokens": 4096, "openAIDefaultVisionModel": "gpt-4o", "openAIDefaultImageGenerationModel": "dall-e-3", "openAIURL": "https://api.openai.com/v1/chat/completions", @@ -795,5 +810,7 @@ "customPaperColor": "#ffffff", "alignment": "center", "margin": "normal" - } + }, + "disableContextMenu": false, + "defaultTrayMode": true } \ No newline at end of file diff --git a/.obsidian/plugins/obsidian-excalidraw-plugin/main.js b/.obsidian/plugins/obsidian-excalidraw-plugin/main.js index 4d99b975..7a7ee55c 100644 --- a/.obsidian/plugins/obsidian-excalidraw-plugin/main.js +++ b/.obsidian/plugins/obsidian-excalidraw-plugin/main.js @@ -1,54398 +1,10 @@ -'use strict' -var obsidian_module = require('obsidian'), - state = require('@codemirror/state'), - view = require('@codemirror/view') -const INITIAL_TIMESTAMP = Date.now() -var LZString = (function () { - var r = String.fromCharCode, - o = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=', - n = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-$', - e = {} - function t(r, o) { - if (!e[r]) { - e[r] = {} - for (var n = 0; n < r.length; n++) e[r][r.charAt(n)] = n - } - return e[r][o] - } - var i = { - compressToBase64: function (r) { - if (null == r) return '' - var n = i._compress(r, 6, function (r) { - return o.charAt(r) - }) - switch (n.length % 4) { - default: - case 0: - return n - case 1: - return n + '===' - case 2: - return n + '==' - case 3: - return n + '=' - } - }, - decompressFromBase64: function (r) { - return null == r - ? '' - : '' == r - ? null - : i._decompress(r.length, 32, function (n) { - return t(o, r.charAt(n)) - }) - }, - compressToUTF16: function (o) { - return null == o - ? '' - : i._compress(o, 15, function (o) { - return r(o + 32) - }) + ' ' - }, - decompressFromUTF16: function (r) { - return null == r - ? '' - : '' == r - ? null - : i._decompress(r.length, 16384, function (o) { - return r.charCodeAt(o) - 32 - }) - }, - compressToUint8Array: function (r) { - for ( - var o = i.compress(r), - n = new Uint8Array(2 * o.length), - e = 0, - t = o.length; - e < t; - e++ - ) { - var s = o.charCodeAt(e) - ;((n[2 * e] = s >>> 8), (n[2 * e + 1] = s % 256)) - } - return n - }, - decompressFromUint8Array: function (o) { - if (null == o) return i.decompress(o) - for (var n = new Array(o.length / 2), e = 0, t = n.length; e < t; e++) - n[e] = 256 * o[2 * e] + o[2 * e + 1] - var s = [] - return ( - n.forEach(function (o) { - s.push(r(o)) - }), - i.decompress(s.join('')) - ) - }, - compressToEncodedURIComponent: function (r) { - return null == r - ? '' - : i._compress(r, 6, function (r) { - return n.charAt(r) - }) - }, - decompressFromEncodedURIComponent: function (r) { - return null == r - ? '' - : '' == r - ? null - : ((r = r.replace(/ /g, '+')), - i._decompress(r.length, 32, function (o) { - return t(n, r.charAt(o)) - })) - }, - compress: function (o) { - return i._compress(o, 16, function (o) { - return r(o) - }) - }, - _compress: function (r, o, n) { - if (null == r) return '' - var e, - t, - i, - s = {}, - u = {}, - a = '', - p = '', - c = '', - l = 2, - f = 3, - h = 2, - d = [], - m = 0, - v = 0 - for (i = 0; i < r.length; i += 1) - if ( - ((a = r.charAt(i)), - Object.prototype.hasOwnProperty.call(s, a) || - ((s[a] = f++), (u[a] = !0)), - (p = c + a), - Object.prototype.hasOwnProperty.call(s, p)) - ) - c = p - else { - if (Object.prototype.hasOwnProperty.call(u, c)) { - if (c.charCodeAt(0) < 256) { - for (e = 0; e < h; e++) - ((m <<= 1), v == o - 1 ? ((v = 0), d.push(n(m)), (m = 0)) : v++) - for (t = c.charCodeAt(0), e = 0; e < 8; e++) - ((m = (m << 1) | (1 & t)), - v == o - 1 ? ((v = 0), d.push(n(m)), (m = 0)) : v++, - (t >>= 1)) - } else { - for (t = 1, e = 0; e < h; e++) - ((m = (m << 1) | t), - v == o - 1 ? ((v = 0), d.push(n(m)), (m = 0)) : v++, - (t = 0)) - for (t = c.charCodeAt(0), e = 0; e < 16; e++) - ((m = (m << 1) | (1 & t)), - v == o - 1 ? ((v = 0), d.push(n(m)), (m = 0)) : v++, - (t >>= 1)) - } - ;(0 == --l && ((l = Math.pow(2, h)), h++), delete u[c]) - } else - for (t = s[c], e = 0; e < h; e++) - ((m = (m << 1) | (1 & t)), - v == o - 1 ? ((v = 0), d.push(n(m)), (m = 0)) : v++, - (t >>= 1)) - ;(0 == --l && ((l = Math.pow(2, h)), h++), - (s[p] = f++), - (c = String(a))) - } - if ('' !== c) { - if (Object.prototype.hasOwnProperty.call(u, c)) { - if (c.charCodeAt(0) < 256) { - for (e = 0; e < h; e++) - ((m <<= 1), v == o - 1 ? ((v = 0), d.push(n(m)), (m = 0)) : v++) - for (t = c.charCodeAt(0), e = 0; e < 8; e++) - ((m = (m << 1) | (1 & t)), - v == o - 1 ? ((v = 0), d.push(n(m)), (m = 0)) : v++, - (t >>= 1)) - } else { - for (t = 1, e = 0; e < h; e++) - ((m = (m << 1) | t), - v == o - 1 ? ((v = 0), d.push(n(m)), (m = 0)) : v++, - (t = 0)) - for (t = c.charCodeAt(0), e = 0; e < 16; e++) - ((m = (m << 1) | (1 & t)), - v == o - 1 ? ((v = 0), d.push(n(m)), (m = 0)) : v++, - (t >>= 1)) - } - ;(0 == --l && ((l = Math.pow(2, h)), h++), delete u[c]) - } else - for (t = s[c], e = 0; e < h; e++) - ((m = (m << 1) | (1 & t)), - v == o - 1 ? ((v = 0), d.push(n(m)), (m = 0)) : v++, - (t >>= 1)) - 0 == --l && ((l = Math.pow(2, h)), h++) - } - for (t = 2, e = 0; e < h; e++) - ((m = (m << 1) | (1 & t)), - v == o - 1 ? ((v = 0), d.push(n(m)), (m = 0)) : v++, - (t >>= 1)) - for (;;) { - if (((m <<= 1), v == o - 1)) { - d.push(n(m)) - break - } - v++ - } - return d.join('') - }, - decompress: function (r) { - return null == r - ? '' - : '' == r - ? null - : i._decompress(r.length, 32768, function (o) { - return r.charCodeAt(o) - }) - }, - _decompress: function (o, n, e) { - var t, - i, - s, - u, - a, - p, - c, - l = [], - f = 4, - h = 4, - d = 3, - m = '', - v = [], - g = { val: e(0), position: n, index: 1 } - for (t = 0; t < 3; t += 1) l[t] = t - for (s = 0, a = Math.pow(2, 2), p = 1; p != a; ) - ((u = g.val & g.position), - (g.position >>= 1), - 0 == g.position && ((g.position = n), (g.val = e(g.index++))), - (s |= (u > 0 ? 1 : 0) * p), - (p <<= 1)) - switch (s) { - case 0: - for (s = 0, a = Math.pow(2, 8), p = 1; p != a; ) - ((u = g.val & g.position), - (g.position >>= 1), - 0 == g.position && ((g.position = n), (g.val = e(g.index++))), - (s |= (u > 0 ? 1 : 0) * p), - (p <<= 1)) - c = r(s) - break - case 1: - for (s = 0, a = Math.pow(2, 16), p = 1; p != a; ) - ((u = g.val & g.position), - (g.position >>= 1), - 0 == g.position && ((g.position = n), (g.val = e(g.index++))), - (s |= (u > 0 ? 1 : 0) * p), - (p <<= 1)) - c = r(s) - break - case 2: - return '' - } - for (l[3] = c, i = c, v.push(c); ; ) { - if (g.index > o) return '' - for (s = 0, a = Math.pow(2, d), p = 1; p != a; ) - ((u = g.val & g.position), - (g.position >>= 1), - 0 == g.position && ((g.position = n), (g.val = e(g.index++))), - (s |= (u > 0 ? 1 : 0) * p), - (p <<= 1)) - switch ((c = s)) { - case 0: - for (s = 0, a = Math.pow(2, 8), p = 1; p != a; ) - ((u = g.val & g.position), - (g.position >>= 1), - 0 == g.position && ((g.position = n), (g.val = e(g.index++))), - (s |= (u > 0 ? 1 : 0) * p), - (p <<= 1)) - ;((l[h++] = r(s)), (c = h - 1), f--) - break - case 1: - for (s = 0, a = Math.pow(2, 16), p = 1; p != a; ) - ((u = g.val & g.position), - (g.position >>= 1), - 0 == g.position && ((g.position = n), (g.val = e(g.index++))), - (s |= (u > 0 ? 1 : 0) * p), - (p <<= 1)) - ;((l[h++] = r(s)), (c = h - 1), f--) - break - case 2: - return v.join('') - } - if ((0 == f && ((f = Math.pow(2, d)), d++), l[c])) m = l[c] - else { - if (c !== h) return null - m = i + i.charAt(0) - } - ;(v.push(m), - (l[h++] = i + m.charAt(0)), - (i = m), - 0 == --f && ((f = Math.pow(2, d)), d++)) - } - }, - } - return i -})() -'function' == typeof define && define.amd - ? define(function () { - return LZString - }) - : 'undefined' != typeof module && null != module - ? (module.exports = LZString) - : 'undefined' != typeof angular && - null != angular && - angular.module('LZString', []).factory('LZString', function () { - return LZString - }) -let REACT_PACKAGES = `!function(){var e,t;e=this,t=function(e){function M(e){return null!==e&&"object"==typeof e&&"function"==typeof(e=ee&&e[ee]||e["@@iterator"])?e:null}function t(e,t,n){this.props=e,this.context=t,this.refs=re,this.updater=n||te}function n(){}function r(e,t,n){this.props=e,this.context=t,this.refs=re,this.updater=n||te}function o(e,t,n){var r,o={},u=null,a=null;if(null!=t)for(r in void 0!==t.ref&&(a=t.ref),void 0!==t.key&&(u=""+t.key),t)ue.call(t,r)&&!ae.hasOwnProperty(r)&&(o[r]=t[r]);var i=arguments.length-2;if(1===i)o.children=n;else if(1>>1,o=e[r];if(!(0
>>1;rt)||e&&!q());){var r,o=R.callback;"function"==typeof o?(R.callback=null,P=R.priorityLevel,r=o(R.expirationTime<=t),t=v(),"function"==typeof r?R.callback=r:R===i(C)&&l(C),y(t)):l(C),R=i(C)}var u,a=null!==R||(null!==(u=i(E))&&_(d,u.startTime-t),!1);return a}finally{R=null,P=n,$=!1}}function q(){return!(v()-ye Click this link for the date and time format reference. \n To improve Obsidian's startup time and manage the large CJK font family, \n I've moved the CJK fonts out of the plugin's \n If you prefer to keep Obsidian 100% local or experience performance issues, you can download the font assets.\n \n Ensure Obsidian Sync is set to synchronize "All other file types" or download and unzip the file on all devices.\n \n If you find this process cumbersome, please submit a feature request to Obsidian.md for supporting assets in the plugin folder. \n Currently, only a single Click this link for the date and time format reference. \n To improve Obsidian's startup time and manage the large CJK font family, \n I've moved the CJK fonts out of the plugin's \n If you prefer to keep Obsidian 100% local or experience performance issues, you can download the font assets.\n \n Ensure Obsidian Sync is set to synchronize "All other file types" or download and unzip the file on all devices.\n \n If you find this process cumbersome, please submit a feature request to Obsidian.md for supporting assets in the plugin folder. \n Currently, only a single
For markdown-page images follow this format when editing your link: filename#^blockref|WIDTHxMAXHEIGHT
You can anchor Excalidraw images to 100% of their size by adding |100% to the end of the link.
You can change the PDF page by changing #page=1 to #page=2 etc.
PDF rect crop values are: left, bottom, right, top. Eg.: #rect=0,0,500,500
',
- FRAME_CLIPPING_ENABLED: 'Frame Rendering: Enabled',
- FRAME_CLIPPING_DISABLED: 'Frame Rendering: Disabled',
- ARROW_BINDING_INVERSE_MODE:
- 'Inverted Mode: Default arrow binding is now disabled. Use CTRL/CMD to temporarily enable binding when needed.',
- ARROW_BINDING_NORMAL_MODE:
- 'Normal Mode: Arrow binding is now enabled. Use CTRL/CMD to temporarily disable binding when needed.',
- EXPORT_FILENAME_PROMPT: 'Please provide filename',
- EXPORT_FILENAME_PROMPT_PLACEHOLDER: 'filename, leave blank to cancel action',
- WARNING_SERIOUS_ERROR:
- 'WARNING: Excalidraw ran into an unknown problem!\n\nThere is a risk that your most recent changes cannot be saved.\n\nTo be on the safe side...\n1) Please select your drawing using CTRL/CMD+A and make a copy with CTRL/CMD+C.\n2) Then create an empty drawing in a new pane by CTRL/CMD+clicking the Excalidraw ribbon button,\n3) and paste your work to the new document with CTRL/CMD+V.',
- ARIA_LABEL_TRAY_MODE: 'Tray-mode offers an alternative, more spacious canvas',
- MASK_FILE_NOTICE:
- 'This is a mask file. It is used to crop images and mask out parts of the image. Press and hold notice to open the help video.',
- INSTALL_SCRIPT_BUTTON: 'Install or update Excalidraw Scripts',
- OPEN_AS_MD: 'Open as Markdown',
- EXPORT_IMAGE: 'Export Image',
- OPEN_LINK: 'Open selected text as link\n(SHIFT+CLICK to open in a new pane)',
- EXPORT_EXCALIDRAW: 'Export to an .Excalidraw file',
- LINK_BUTTON_CLICK_NO_TEXT:
- 'Select an element that contains an internal or external link.\n',
- LINEAR_ELEMENT_LINK_CLICK_ERROR:
- 'Arrow- and Line-Element links cannot be navigated by ' +
- labelCTRL() +
- ' + CLICKing on the element because that also activates the line editor.\nUse the right-click context menu to open the link, or click the link indicator in the top right corner of the element.\n',
- FILENAME_INVALID_CHARS:
- 'File name cannot contain any of the following characters: * " \\ < > : | ? #',
- FORCE_SAVE: 'Save (will also update transclusions)',
- RAW: 'Change to PREVIEW mode (only affects text-elements with links or transclusions)',
- PARSED:
- 'Change to RAW mode (only affects text-elements with links or transclusions)',
- NOFILE: 'Excalidraw (no file)',
- COMPATIBILITY_MODE:
- '*.excalidraw file opened in compatibility mode. Convert to new format for full plugin functionality.',
- CONVERT_FILE: 'Convert to new format',
- BACKUP_AVAILABLE:
- 'We encountered an error while loading your drawing. This might have occurred if Obsidian unexpectedly closed during a save operation. For example, if you accidentally closed Obsidian on your mobile device while saving.
GOOD NEWS: Fortunately, a local backup is available. However, please note that if you last modified this drawing on a different device (e.g., tablet) and you are now on your desktop, that other device likely has a more recent backup.
I recommend trying to open the drawing on your other device first and restore the backup from its local storage.
Would you like to load the backup?',
- BACKUP_RESTORED: 'Backup restored',
- CACHE_NOT_READY:
- "I apologize for the inconvenience, but an error occurred while loading your file.
Having a little patience can save you a lot of time...
The plugin has a backup cache, but it appears that you have just started Obsidian. Initializing the Backup Cache may take some time, usually up to a minute or more depending on your device's performance. You will receive a notification in the top right corner when the cache initialization is complete.
Please press OK to attempt loading the file again and check if the cache has finished initializing. If you see a completely empty file behind this message, I recommend waiting until the backup cache is ready before proceeding. Alternatively, you can choose Cancel to manually correct your file.
",
- OBSIDIAN_TOOLS_PANEL: 'Obsidian Tools Panel',
- ERROR_SAVING_IMAGE:
- 'Unknown error occurred while fetching the image. It could be that for some reason the image is not available or rejected the fetch request from Obsidian',
- WARNING_PASTING_ELEMENT_AS_TEXT:
- 'PASTING EXCALIDRAW ELEMENTS AS A TEXT ELEMENT IS NOT ALLOWED',
- USE_INSERT_FILE_MODAL: "Use 'Insert Any File' to embed a markdown note",
- RECURSIVE_INSERT_ERROR:
- 'You may not recursively insert part of an image into the same image as it would create an infinite loop',
- CONVERT_TO_MARKDOWN: 'Convert to file...',
- SELECT_TEXTELEMENT_ONLY: 'Select text element only (not container)',
- REMOVE_LINK: 'Remove text element link',
- LASER_ON: 'Enable laser pointer',
- LASER_OFF: 'Disable laser pointer',
- WELCOME_RANK_NEXT: 'more drawings until the next rank!',
- WELCOME_RANK_LEGENDARY: "You're at the top. Keep on being legendary!",
- WELCOME_COMMAND_PALETTE: 'Type "Excalidraw" in the Command Palette',
- WELCOME_OBSIDIAN_MENU: 'Explore the Obsidian Menu in the top right',
- WELCOME_SCRIPT_LIBRARY: 'Visit the Script Library',
- WELCOME_HELP_MENU: 'Find help in the hamburger-menu',
- WELCOME_YOUTUBE_ARIA: 'Visual PKM YouTube Channel',
- WELCOME_YOUTUBE_LINK: 'Check out the Visual PKM YouTube channel.',
- WELCOME_DISCORD_ARIA: 'Join the Discord Server',
- WELCOME_DISCORD_LINK: 'Join the Discord Server',
- WELCOME_TWITTER_ARIA: 'Follow me on Twitter',
- WELCOME_TWITTER_LINK: 'Follow me on Twitter',
- WELCOME_LEARN_ARIA: 'Learn Visual PKM',
- WELCOME_LEARN_LINK: 'Sign up for the Visual Thinking Workshop',
- WELCOME_DONATE_ARIA: 'Donate to support Excalidraw-Obsidian',
- WELCOME_DONATE_LINK: 'Say "Thank You" & support the plugin.',
- SAVE_IS_TAKING_LONG:
- 'Saving your previous file is taking a long time. Please wait...',
- SAVE_IS_TAKING_VERY_LONG:
- 'For better performance, consider splitting large drawings into several smaller files.',
- RELEASE_NOTES_NAME: 'Display Release Notes after update',
- RELEASE_NOTES_DESC:
- "Toggle ON: Display release notes each time you update Excalidraw to a newer version.
Toggle OFF: Silent mode. You can still read release notes on GitHub.",
- NEWVERSION_NOTIFICATION_NAME: 'Plugin update notification',
- NEWVERSION_NOTIFICATION_DESC:
- 'Toggle ON: Show a notification when a new version of the plugin is available.
Toggle OFF: Silent mode. You need to check for plugin updates in Community Plugins.',
- BASIC_HEAD: 'Basic',
- BASIC_DESC:
- 'In the "Basic" settings, you can configure options such as displaying release notes after updates, receiving plugin update notifications, setting the default location for new drawings, specifying the Excalidraw folder for embedding drawings into active documents, defining an Excalidraw template file, and designating an Excalidraw Automate script folder for managing automation scripts.',
- FOLDER_NAME: 'Excalidraw folder (CAsE sEnsITive!)',
- FOLDER_DESC:
- 'Default location for new drawings. If empty, drawings will be created in the Vault root.',
- CROP_PREFIX_NAME: 'Crop file prefix',
- CROP_PREFIX_DESC:
- "The first part of the filename for new drawings created when cropping an image. If empty the default 'cropped_' will be used.",
- ANNOTATE_PREFIX_NAME: 'Annotation file prefix',
- ANNOTATE_PREFIX_DESC:
- "The first part of the filename for new drawings created when annotating an image. If empty the default 'annotated_' will be used.",
- ANNOTATE_PRESERVE_SIZE_NAME: 'Preserve image size when annotating',
- ANNOTATE_PRESERVE_SIZE_DESC:
- 'When annotating an image in markdown the replacment image link will include the width of the original image.',
- CROP_FOLDER_NAME: 'Crop file folder (CaSE senSItive!)',
- CROP_FOLDER_DESC:
- 'Default location for new drawings created when cropping an image. If empty, drawings will be created following the Vault attachments settings.',
- ANNOTATE_FOLDER_NAME: 'Image annotation file folder (CaSe SeNSitIVe!)',
- ANNOTATE_FOLDER_DESC:
- 'Default location for new drawings created when annotating an image. If empty, drawings will be created following the Vault attachments settings.',
- FOLDER_EMBED_NAME:
- 'Use Excalidraw folder when embedding a drawing into the active document',
- FOLDER_EMBED_DESC:
- "Define which folder to place the newly inserted drawing into when using the command palette action: 'Create a new drawing and embed into active document'.
Toggle ON: Use Excalidraw folder
Toggle OFF: Use the attachments folder defined in Obsidian settings.",
- TEMPLATE_NAME: 'Excalidraw template file or folder (caSe SenSiTive!)',
- TEMPLATE_DESC:
- 'Full filepath or folderpath to the Excalidraw template.
Template File:E.g.: If your template is in the default Excalidraw folder and its name is Template.md, the setting would be: Excalidraw/Template.md (or just Excalidraw/Template - you may omit the .md file extension). If you are using Excalidraw in compatibility mode, then your template must be a legacy Excalidraw file as well such as Excalidraw/Template.excalidraw.
Template Folder: You can also set a folder as your template. In this case you will be prompted which tempalte to use when creating a new drawing.
Pro Tip: If you are using the Obsidian Templater plugin, you can add Templater code to your different Excalidraw templates to automate configuration of your drawings.',
- SCRIPT_FOLDER_NAME: 'Excalidraw Automate script folder (CASE SeNSitiVE!)',
- SCRIPT_FOLDER_DESC:
- 'The files you place in this folder will be treated as Excalidraw Automate scripts. You can access your scripts from Excalidraw via the Obsidian Command Palette. Assign hotkeys to your favorite scripts just like to any other Obsidian command. The folder may not be the root folder of your Vault. ',
- AI_HEAD: 'AI Settings - Experimental',
- AI_DESC:
- 'In the "AI" settings, you can configure options for using OpenAI\'s GPT API. While the OpenAI API is in beta, its use is strictly limited — as such we require you use your own API key. You can create an OpenAI account, add a small credit (5 USD minimum), and generate your own API key. Once API key is set, you can use the AI tools in Excalidraw.',
- AI_OPENAI_TOKEN_NAME: 'OpenAI API key',
- AI_OPENAI_TOKEN_DESC:
- "You can get your OpenAI API key from your OpenAI account.",
- AI_OPENAI_TOKEN_PLACEHOLDER: 'Enter your OpenAI API key here',
- AI_OPENAI_DEFAULT_MODEL_NAME: 'Default AI model',
- AI_OPENAI_DEFAULT_MODEL_DESC:
- "The default AI model to use when generating text. This is a freetext field, so you can enter any valid OpenAI model name. Find out more about the available models on the OpenAI website.",
- AI_OPENAI_DEFAULT_MODEL_PLACEHOLDER:
- 'Enter your default AI model here. e.g.: gpt-3.5-turbo-1106',
- AI_OPENAI_DEFAULT_IMAGE_MODEL_NAME: 'Default Image Generation AI model',
- AI_OPENAI_DEFAULT_IMAGE_MODEL_DESC:
- "The default AI model to use when generating images. Image editing and variations are only supported by dall-e-2 at this time by OpenAI, for this reason dall-e-2 will automatically be used in such cases regardless of this setting.
This is a freetext field, so you can enter any valid OpenAI model name. Find out more about the available models on the OpenAI website.",
- AI_OPENAI_DEFAULT_IMAGE_MODEL_PLACEHOLDER:
- 'Enter your default Image Generation AI model here e.g.: dall-e-3',
- AI_OPENAI_DEFAULT_VISION_MODEL_NAME: 'Default AI vision model',
- AI_OPENAI_DEFAULT_VISION_MODEL_DESC:
- "The default AI vision model to use when generating text from images. This is a freetext field, so you can enter any valid OpenAI model name. Find out more about the available models on the OpenAI website.",
- AI_OPENAI_DEFAULT_API_URL_NAME: 'OpenAI API URL',
- AI_OPENAI_DEFAULT_API_URL_DESC:
- 'The default OpenAI API URL. This is a freetext field, so you can enter any valid OpenAI API compatible URL. Excalidraw will use this URL when posting API requests to OpenAI. I am not doing any error handling on this field, so make sure you enter a valid URL and only change this if you know what you are doing. ',
- AI_OPENAI_DEFAULT_IMAGE_API_URL_NAME: 'OpenAI Image Generation API URL',
- AI_OPENAI_DEFAULT_VISION_MODEL_PLACEHOLDER:
- 'Enter your default AI vision model here. e.g.: gpt-4o',
- SAVING_HEAD: 'Saving',
- SAVING_DESC:
- "In the 'Saving' section of Excalidraw Settings, you can configure how your drawings are saved. This includes options for compressing Excalidraw JSON in Markdown, setting autosave intervals for both desktop and mobile, defining filename formats, and choosing whether to use the .excalidraw.md or .md file extension. ",
- COMPRESS_NAME: 'Compress Excalidraw JSON in Markdown',
- COMPRESS_DESC:
- "By enabling this feature Excalidraw will store the drawing JSON in a Base64 compressed format using the LZ-String algorithm. This will reduce the chance of Excalidraw JSON cluttering your search results in Obsidian. As a side effect, this will also reduce the filesize of Excalidraw drawings. When you switch an Excalidraw drawing to Markdown view, using the options menu in Excalidraw, the file will be saved without compression, so that you can read and edit the JSON string. The drawing will be compressed again once you switch back to Excalidraw view. The setting only has effect 'point forward', meaning, existing drawings will not be affected by the setting until you open them and save them.
Toggle ON: Compress drawing JSON
Toggle OFF: Leave drawing JSON uncompressed",
- DECOMPRESS_FOR_MD_NAME: 'Decompress Excalidraw JSON in Markdown View',
- DECOMPRESS_FOR_MD_DESC:
- "By enabling this feature Excalidraw will automatically decompress the drawing JSON when you switch to Markdown view. This will allow you to easily read and edit the JSON string. The drawing will be compressed again once you switch back to Excalidraw view and save the drawing (CTRL+S).
I recommend switching this feature off as it will result in smaller file sizes and avoiding unnecessary results in Obsidian search. You can always use the 'Excalidraw: Decompress current Excalidraw file' command from the command palette to manually decompress the drawing JSON when you need to read or edit it.",
- AUTOSAVE_INTERVAL_DESKTOP_NAME: 'Interval for autosave on Desktop',
- AUTOSAVE_INTERVAL_DESKTOP_DESC:
- 'The time interval between saves. Autosave will skip if there are no changes in the drawing. Excalidraw will also save the file when closing a workspace tab or navigating within Obsidian, but away from the active Excalidraw tab (i.e. clicking on the Obsidian ribbon or checking backlinks, etc.). Excalidraw will not be able to save your work when terminating Obsidian directly either by killing the Obsidian process, or clicking to close Obsidian altogether.',
- AUTOSAVE_INTERVAL_MOBILE_NAME: 'Interval for autosave on Mobile',
- AUTOSAVE_INTERVAL_MOBILE_DESC:
- 'I recommend a more frequent interval for Mobiles. Excalidraw will also save the file when closing a workspace tab or navigating within Obsidian, but away from the active Excalidraw tab (i.e. tapping on the Obsidian ribbon or checking backlinks, etc.). Excalidraw will not be able to save your work when terminating Obsidian directly (i.e. swiping it away). Also note, that when you switch apps on a Mobile device, sometimes Android and iOS closes Obsidian in the background to save system resources. In such a case Excalidraw will not be able to save the latest changes.',
- FILENAME_HEAD: 'Filename',
- FILENAME_DESC:
- "Create a new drawing and embed into active document?
Toggle ON: Yes, the filename of a new drawing should start with filename of the active document
Toggle OFF: No, filename of a new drawing should not include the filename of the active document',
- FILENAME_POSTFIX_NAME:
- "Custom text after markdown Note's name when embedding",
- FILENAME_POSTFIX_DESC:
- "Affects filename only when embedding into a markdown document. This text will be inserted after the note's name, but before the date.",
- FILENAME_DATE_NAME: 'Filename Date',
- FILENAME_DATE_DESC:
- 'The last part of the filename. Leave empty if you do not want a date.',
- FILENAME_EXCALIDRAW_EXTENSION_NAME: '.excalidraw.md or .md',
- FILENAME_EXCALIDRAW_EXTENSION_DESC:
- 'This setting does not apply if you use Excalidraw in compatibility mode, i.e. you are not using Excalidraw markdown files.
Toggle ON: filename ends with .excalidraw.md
Toggle OFF: filename ends with .md',
- DISPLAY_HEAD: 'Excalidraw appearance and behavior',
- DISPLAY_DESC:
- "In the 'appearance and behavior' section of Excalidraw Settings, you can fine-tune how Excalidraw appears and behaves. This includes options for dynamic styling, left-handed mode, matching Excalidraw and Obsidian themes, default modes, and more.",
- OVERRIDE_OBSIDIAN_FONT_SIZE_NAME: 'Limit Obsidian Font Size to Editor Text',
- OVERRIDE_OBSIDIAN_FONT_SIZE_DESC:
- "Obsidian's custom font size setting affects the entire interface, including Excalidraw and themes that depend on the default font size. Enabling this option restricts font size changes to editor text, which will improve the look of Excalidraw. If parts of the UI look incorrect after enabling, try turning this setting off.",
- DYNAMICSTYLE_NAME: 'Dynamic styling',
- DYNAMICSTYLE_DESC: 'Change Excalidraw UI colors to match the canvas color',
- LEFTHANDED_MODE_NAME: 'Left-handed mode',
- LEFTHANDED_MODE_DESC:
- 'Currently only has effect in tray-mode. If turned on, the tray will be on the right side.
Toggle ON: Left-handed mode.
Toggle OFF: Right-handed moded',
- IFRAME_MATCH_THEME_NAME: 'Markdown embeds to match Excalidraw theme',
- IFRAME_MATCH_THEME_DESC:
- 'Toggle ON: Set this to true if for example you are using Obsidian in dark-mode but use excalidraw with a light background. With this setting the embedded Obsidian markdown document will match the Excalidraw theme (i.e. light colors if Excalidraw is in light mode).
Toggle OFF: Set this to false if you want the embedded Obsidian markdown document to match the Obsidian theme (i.e. dark colors if Obsidian is in dark mode).',
- MATCH_THEME_NAME: 'New drawing to match Obsidian theme',
- MATCH_THEME_DESC:
- 'If theme is dark, new drawing will be created in dark mode. This does not apply when you use a template for new drawings. Also this will not affect when you open an existing drawing. Those will follow the theme of the template/drawing respectively.
Toggle ON: Follow Obsidian Theme
Toggle OFF: Follow theme defined in your template',
- MATCH_THEME_ALWAYS_NAME: 'Existing drawings to match Obsidian theme',
- MATCH_THEME_ALWAYS_DESC:
- 'If theme is dark, drawings will be opened in dark mode. If your theme is light, they will be opened in light mode.
Toggle ON: Match Obsidian theme
Toggle OFF: Open with the same theme as last saved',
- MATCH_THEME_TRIGGER_NAME: 'Excalidraw to follow when Obsidian Theme changes',
- MATCH_THEME_TRIGGER_DESC:
- 'If this option is enabled open Excalidraw pane will switch to light/dark mode when Obsidian theme changes.
Toggle ON: Follow theme changes
Toggle OFF: Drawings are not affected by Obsidian theme changes',
- DEFAULT_OPEN_MODE_NAME: 'Default mode when opening Excalidraw',
- DEFAULT_OPEN_MODE_DESC:
- 'Specifies the mode how Excalidraw opens: Normal, Zen, or View mode. You may also set this behavior on a file level by adding the excalidraw-default-mode frontmatter key with a value of: normal, view, or zen to your document.',
- DEFAULT_PEN_MODE_NAME: 'Pen mode',
- DEFAULT_PEN_MODE_DESC:
- 'Should pen mode be automatically enabled when opening Excalidraw?',
- DISABLE_DOUBLE_TAP_ERASER_NAME: 'Enable double-tap eraser in pen mode',
- DISABLE_SINGLE_FINGER_PANNING_NAME:
- 'Enable single-finger panning in pen mode',
- SHOW_PEN_MODE_FREEDRAW_CROSSHAIR_NAME: 'Show (+) crosshair in pen mode',
- SHOW_PEN_MODE_FREEDRAW_CROSSHAIR_DESC:
- 'Show crosshair in pen mode when using the freedraw tool. Toggle ON: SHOW Toggle OFF: HIDE
The effect depends on the device. Crosshair is typically visible on drawing tablets, MS Surface, but not on iOS.',
- SHOW_DRAWING_OR_MD_IN_HOVER_PREVIEW_NAME:
- 'Render Excalidraw file as an image in hover preview...',
- SHOW_DRAWING_OR_MD_IN_HOVER_PREVIEW_DESC:
- '...even if the file has the excalidraw-open-md: true frontmatter key.
When this setting is off and the file is set to open in md by default, the hover preview will show the markdown side of the document.',
- SHOW_DRAWING_OR_MD_IN_READING_MODE_NAME:
- 'Render as image when in markdown reading mode of an Excalidraw file',
- SHOW_DRAWING_OR_MD_IN_READING_MODE_DESC:
- "When you are in markdown reading mode (aka. reading the back side of the drawing) should the Excalidraw drawing be rendered as an image? This setting will not affect the display of the drawing when you are in Excalidraw mode or when you embed the drawing into a markdown document or when rendering hover preview.
You must close the active excalidraw/markdown file and reopen it for this change to take effect.",
- SHOW_DRAWING_OR_MD_IN_EXPORTPDF_NAME:
- 'Render Excalidraw as Image in Obsidian PDF Export',
- SHOW_DRAWING_OR_MD_IN_EXPORTPDF_DESC:
- "This setting controls how Excalidraw files are exported to PDF using Obsidian's built-in Export to PDF feature.
Note: This setting does not affect the PDF export feature within Excalidraw itself.
See the other related setting for Markdown Reading Mode under 'Appearance and Behavior' further above.
⚠️ You must close and reopen the Excalidraw/markdown file for changes to take effect. ⚠️",
- HOTKEY_OVERRIDE_HEAD: 'Hotkey overrides',
- HOTKEY_OVERRIDE_DESC: `Some of the Excalidraw hotkeys such as ${labelCTRL()}+Enter to edit text or ${labelCTRL()}+K to create an element link conflict with Obsidian hotkey settings. The hotkey combinations you add below will override Obsidian's hotkey settings while useing Excalidraw, thus you can add ${labelCTRL()}+G if you want to default to Group Object in Excalidraw instead of opening Graph View.`,
- THEME_HEAD: 'Theme and styling',
- ZOOM_HEAD: 'Zoom',
- DEFAULT_PINCHZOOM_NAME: 'Allow pinch zoom in pen mode',
- DEFAULT_PINCHZOOM_DESC:
- 'Pinch zoom in pen mode when using the freedraw tool is disabled by default to prevent unwanted accidental zooming with your palm.
Toggle ON: Enable pinch zoom in pen mode
Toggle OFF:Disable pinch zoom in pen mode',
- DEFAULT_WHEELZOOM_NAME: 'Mouse wheel to zoom by default',
- DEFAULT_WHEELZOOM_DESC: `Toggle ON: Mouse wheel to zoom; ${labelCTRL()} + mouse wheel to scrollToggle OFF:${labelCTRL()} + mouse wheel to zoom; Mouse wheel to scroll`,
- ZOOM_TO_FIT_NAME: 'Zoom to fit on view resize',
- ZOOM_TO_FIT_DESC:
- 'Zoom to fit drawing when the pane is resized
Toggle ON: Zoom to fit
Toggle OFF: Auto zoom disabled',
- ZOOM_TO_FIT_ONOPEN_NAME: 'Zoom to fit on file open',
- ZOOM_TO_FIT_ONOPEN_DESC:
- 'Zoom to fit drawing when the drawing is first opened
Toggle ON: Zoom to fit
Toggle OFF: Auto zoom disabled',
- ZOOM_TO_FIT_MAX_LEVEL_NAME: 'Zoom to fit max ZOOM level',
- ZOOM_TO_FIT_MAX_LEVEL_DESC:
- 'Set the maximum level to which zoom to fit will enlarge the drawing. Minimum is 0.5 (50%) and maximum is 10 (1000%).',
- PEN_HEAD: 'Pen',
- GRID_HEAD: 'Grid',
- GRID_DYNAMIC_COLOR_NAME: 'Dynamic grid color',
- GRID_DYNAMIC_COLOR_DESC:
- 'Toggle ON:Change grid color to match the canvas color
Toggle OFF:Use the color below as the grid color',
- GRID_COLOR_NAME: 'Grid color',
- GRID_OPACITY_NAME: 'Grid opacity',
- GRID_OPACITY_DESC:
- 'Grid opacity will also control the opacity of the binding box when binding an arrow to an element.
Set the opacity of the grid. 0 is transparent, 100 is opaque.',
- GRID_DIRECTION_NAME: 'Grid direction',
- GRID_DIRECTION_DESC:
- 'The first toggle shows/hides the horizontal grid, the second toggle shows/hides the vertical grid.',
- GRID_HORIZONTAL: 'Render horizontal grid',
- GRID_VERTICAL: 'Render vertical grid',
- LASER_HEAD: 'Laser pointer',
- LASER_COLOR: 'Laser pointer color',
- LASER_DECAY_TIME_NAME: 'Laser pointer decay time',
- LASER_DECAY_TIME_DESC:
- 'Laser pointer decay time in milliseconds. Default is 1000 (i.e. 1 second).',
- LASER_DECAY_LENGTH_NAME: 'Laser pointer decay length.',
- LASER_DECAY_LENGTH_DESC:
- 'Laser pointer decay length in line points. Default is 50.',
- LINKS_HEAD: 'Links, transclusion and TODOs',
- LINKS_HEAD_DESC:
- "In the 'Links, transclusion and TODOs' section of Excalidraw Settings, you can configure how Excalidraw handles links, transclusions, and TODO items. This includes options for opening links, managing panes, displaying links with brackets, customizing link prefixes, handling TODO items, and more. ",
- LINKS_DESC: `${labelCTRL()}+CLICK on [[Text Elements]] to open them as links. If the selected text has more than one [[valid Obsidian links]], only the first will be opened. If the text starts as a valid web link (i.e. https:// or http://), then the plugin will open it in a browser. When Obsidian files change, the matching [[link]] in your drawings will also change. If you don't want text accidentally changing in your drawings use [[links|with aliases]].`,
- DRAG_MODIFIER_NAME: 'Link Click and Drag&Drop Modifier Keys',
- DRAG_MODIFIER_DESC:
- "Modifier key behavior when clicking links and dragging and dropping elements. Excalidraw will not validate your configuration... pay attention to avoid conflicting settings. These settings are different for Apple and non-Apple. If you use Obsidian on multiple platforms, you'll need to make the settings separately. The toggles follow the order of " +
- (DEVICE.isIOS || DEVICE.isMacOS
- ? 'SHIFT, CMD, OPT, CONTROL.'
- : 'SHIFT, CTRL, ALT, META (Windows key).'),
- LONG_PRESS_DESKTOP_NAME: 'Long press to open desktop',
- LONG_PRESS_DESKTOP_DESC:
- 'Long press delay in milliseconds to open an Excalidraw Drawing embedded in a Markdown file. ',
- LONG_PRESS_MOBILE_NAME: 'Long press to open mobile',
- LONG_PRESS_MOBILE_DESC:
- 'Long press delay in milliseconds to open an Excalidraw Drawing embedded in a Markdown file. ',
- DOUBLE_CLICK_LINK_OPEN_VIEW_MODE:
- 'Allow double-click to open links in view mode',
- FOCUS_ON_EXISTING_TAB_NAME: 'Focus on Existing Tab',
- FOCUS_ON_EXISTING_TAB_DESC:
- "When opening a link, Excalidraw will focus on the existing tab if the file is already open. Enabling this setting overrides 'Reuse Adjacent Pane' when the file is already open.",
- SECOND_ORDER_LINKS_NAME: 'Show second-order links',
- SECOND_ORDER_LINKS_DESC:
- "Show links when clicking on a link in Excalidraw. Second-order link are backlinks pointing to the link being clicked. When using image icons to connect similar notes, second order links allow you to get to related notes in one click instead of two. See YT Short to understand.",
- ADJACENT_PANE_NAME: 'Reuse adjacent pane',
- ADJACENT_PANE_DESC: `When ${labelCTRL()}+${labelALT()} clicking a link in Excalidraw, by default the plugin will open the link in a new pane. Turning this setting on, Excalidraw will first look for an existing pane, and try to open the link there. Excalidraw will look for the other workspace pane based on your focus/navigation history, i.e. the workpane that was active before you activated Excalidraw.`,
- MAINWORKSPACE_PANE_NAME: 'Open in main workspace',
- MAINWORKSPACE_PANE_DESC: `When ${labelCTRL()}+${labelALT()} clicking a link in Excalidraw, by default the plugin will open the link in a new pane in the current active window. Turning this setting on, Excalidraw will open the link in an existing or new pane in the main workspace. `,
- LINK_BRACKETS_NAME: 'Show [[brackets]] around links',
- LINK_BRACKETS_DESC: `In PREVIEW mode, when parsing Text Elements, place brackets around links. You can override this setting for a specific drawing by adding ${FRONTMATTER_KEYS['link-brackets'].name}: true/false to the file's frontmatter.`,
- LINK_PREFIX_NAME: 'Link prefix',
- LINK_PREFIX_DESC: `In PREVIEW mode, if the Text Element contains a link, precede the text with these characters. You can override this setting for a specific drawing by adding ${FRONTMATTER_KEYS['link-prefix'].name}: "📍 " to the file's frontmatter.`,
- URL_PREFIX_NAME: 'URL prefix',
- URL_PREFIX_DESC: `In PREVIEW mode, if the Text Element contains a URL link, precede the text with these characters. You can override this setting for a specific drawing by adding ${FRONTMATTER_KEYS['url-prefix'].name}: "🌐 " to the file's frontmatter.`,
- PARSE_TODO_NAME: 'Parse todo',
- PARSE_TODO_DESC:
- "Convert '- [ ] ' and '- [x] ' to checkbox and tick in the box.",
- TODO_NAME: 'Open TODO icon',
- TODO_DESC: 'Icon to use for open TODO items',
- DONE_NAME: 'Completed TODO icon',
- DONE_DESC: 'Icon to use for completed TODO items',
- HOVERPREVIEW_NAME: `Hover preview without pressing the ${labelCTRL()} key`,
- HOVERPREVIEW_DESC: `Toggle ON: In Exalidraw view mode the hover preview for [[wiki links]] will be shown immediately, without the need to hold the ${labelCTRL()} key. In Excalidraw normal mode, the preview will be shown immediately only when hovering the blue link icon in the top right of the element.
Toggle OFF: Hover preview is shown only when you hold the ${labelCTRL()} key while hovering the link.`,
- LINKOPACITY_NAME: 'Opacity of link icon',
- LINKOPACITY_DESC:
- 'Opacity of the link indicator icon in the top right corner of an element. 1 is opaque, 0 is transparent.',
- LINK_CTRL_CLICK_NAME: `${labelCTRL()}+CLICK on text with [[links]] or [](links) to open them`,
- LINK_CTRL_CLICK_DESC: `You can turn this feature off if it interferes with default Excalidraw features you want to use. If this is turned off, you can either use ${labelCTRL()} + ${labelMETA()} or the link indicator in the top right of the element to open links.`,
- TRANSCLUSION_WRAP_NAME: 'Overflow wrap behavior of transcluded text',
- TRANSCLUSION_WRAP_DESC:
- 'Number specifies the character count where the text should be wrapped. Set the text wrapping behavior of transcluded text. Turn this ON to force-wrap text (i.e. no overflow), or OFF to soft-wrap text (at the nearest whitespace).',
- TRANSCLUSION_DEFAULT_WRAP_NAME: 'Transclusion word wrap default',
- TRANSCLUSION_DEFAULT_WRAP_DESC:
- 'You can manually set/override word wrapping length using the `![[page#^block]]{NUMBER}` format. Normally you will not want to set a default, because if you transclude text inside a sticky note, then Excalidraw will automatically take care of word wrapping. Set this value to `0` if you do not want to set a default. ',
- PAGE_TRANSCLUSION_CHARCOUNT_NAME: 'Page transclusion max char count',
- PAGE_TRANSCLUSION_CHARCOUNT_DESC:
- 'The maximum number of characters to display from the page when transcluding an entire page with the ![[markdown page]] format.',
- QUOTE_TRANSCLUSION_REMOVE_NAME:
- "Quote translusion: remove leading '> ' from each line",
- QUOTE_TRANSCLUSION_REMOVE_DESC:
- "Remove the leading '> ' from each line of the transclusion. This will improve readability of quotes in text only transclusions
Toggle ON: Remove leading '> '
Toggle OFF: Do not remove leading '> ' (note it will still be removed from the first row due to Obsidian API functionality)",
- GET_URL_TITLE_NAME: 'Use iframely to resolve page title',
- GET_URL_TITLE_DESC:
- 'Use the http://iframely.server.crestify.com/iframely?url= to get title of page when dropping a link into Excalidraw',
- PDF_TO_IMAGE: 'PDF to Image',
- PDF_TO_IMAGE_SCALE_NAME: 'PDF to Image conversion scale',
- PDF_TO_IMAGE_SCALE_DESC:
- 'Sets the resolution of the image that is generated from the PDF page. Higher resolution will result in bigger images in memory and consequently a higher load on your system (slower performance), but sharper imagee. Additionally, if you want to copy PDF pages (as images) to Excalidraw.com, the bigger image size may result in exceeding the 2MB limit on Excalidraw.com.',
- EMBED_TOEXCALIDRAW_HEAD: 'Embed files into Excalidraw',
- EMBED_TOEXCALIDRAW_DESC:
- 'In the Embed Files section of Excalidraw Settings, you can configure how various files are embedded into Excalidraw. This includes options for embedding interactive markdown files, PDFs, and markdown files as images.',
- MD_HEAD: 'Embed markdown into Excalidraw as image',
- MD_EMBED_CUSTOMDATA_HEAD_NAME: 'Interactive Markdown Files',
- MD_EMBED_CUSTOMDATA_HEAD_DESC:
- 'The below settings will only effect future embeds. Current embeds remain unchanged. The theme setting of embedded frames is under the "Excalidraw appearance and behavior" section.',
- MD_EMBED_SINGLECLICK_EDIT_NAME: 'Single click to edit embedded markdown',
- MD_EMBED_SINGLECLICK_EDIT_DESC:
- 'Single click on an embedded markdown file to edit it. When turned off, the markdown file will first open in preview mode, then switch to edit mode when you click on it again.',
- MD_TRANSCLUDE_WIDTH_NAME: 'Default width of a transcluded markdown document',
- MD_TRANSCLUDE_WIDTH_DESC:
- 'The width of the markdown page. This affects the word wrapping when transcluding longer paragraphs, and the width of the image element. You can override the default width of an embedded file using the [[filename#heading|WIDTHxMAXHEIGHT]] syntax in markdown view mode under embedded files.',
- MD_TRANSCLUDE_HEIGHT_NAME:
- 'Default maximum height of a transcluded markdown document',
- MD_TRANSCLUDE_HEIGHT_DESC:
- 'The embedded image will be as high as the markdown text requires, but not higher than this value. You can override this value by editing the embedded image link in markdown view mode with the following syntax [[filename#^blockref|WIDTHxMAXHEIGHT]].',
- MD_DEFAULT_FONT_NAME:
- 'The default font typeface to use for embedded markdown files.',
- MD_DEFAULT_FONT_DESC:
- 'Set this value to "Virgil" or "Cascadia" or the filename of a valid .ttf, .woff, or .woff2 font e.g. MyFont.woff2 You can override this setting by adding the following frontmatter-key to the embedded markdown file: excalidraw-font: font_or_filename',
- MD_DEFAULT_COLOR_NAME:
- 'The default font color to use for embedded markdown files.',
- MD_DEFAULT_COLOR_DESC:
- 'Set this to any valid css color name e.g. "steelblue" (color names), or a valid hexadecimal color e.g. "#e67700", or any other valid css color string. You can override this setting by adding the following frontmatter-key to the embedded markdown file: excalidraw-font-color: steelblue',
- MD_DEFAULT_BORDER_COLOR_NAME:
- 'The default border color to use for embedded markdown files.',
- MD_DEFAULT_BORDER_COLOR_DESC:
- 'Set this to any valid css color name e.g. "steelblue" (color names), or a valid hexadecimal color e.g. "#e67700", or any other valid css color string. You can override this setting by adding the following frontmatter-key to the embedded markdown file: excalidraw-border-color: gray. Leave empty if you don\'t want a border. ',
- MD_CSS_NAME: 'CSS file',
- MD_CSS_DESC: `The filename of the CSS to apply to markdown embeds. Provide the filename with extension (e.g. 'md-embed.css'). The css file may also be a plain markdown file (e.g. 'md-embed-css.md'), just make sure the content is written using valid css syntax. If you need to look at the HTML code you are applying the CSS to, then open Obsidian Developer Console (${DEVICE.isIOS || DEVICE.isMacOS ? 'CMD+OPT+i' : 'CTRL+SHIFT+i'}) and type in the following command: "ExcalidrawAutomate.mostRecentMarkdownSVG". This will display the most recent SVG generated by Excalidraw. Setting the font-family in the css is has limitations. By default only your operating system's standard fonts are available (see README for details). You can add one custom font beyond that using the setting above. You can override this css setting by adding the following frontmatter-key to the embedded markdown file: "excalidraw-css: css_file_in_vault|css-snippet".`,
- EMBED_HEAD: 'Embedding Excalidraw into your Notes and Exporting',
- EMBED_DESC:
- 'In the "Embed & Export" settings, you can configure how images and Excalidraw drawings are embedded and exported within your documents. Key settings include choosing the image type for markdown preview (such as Native SVG or PNG), specifying the type of file to insert into the document (original Excalidraw, PNG, or SVG), and managing image caching for embedding in markdown. You can also control image sizing, whether to embed drawings using wiki links or markdown links, and adjust settings related to image themes, background colors, and Obsidian integration. \n Additionally, there are settings for auto-export, which automatically generates SVG and/or PNG files to match the title of your Excalidraw drawings, keeping them in sync with file renames and deletions.',
- EMBED_CANVAS: 'Obsidian Canvas support',
- EMBED_CANVAS_NAME: 'Immersive embedding',
- EMBED_CANVAS_DESC:
- 'Hide canvas node border and background when embedding an Excalidraw drawing to Canvas. Note that for a full transparent background for your image, you will still need to configure Excalidraw to export images with transparent background.',
- EMBED_CACHING: 'Image caching and rendering optimization',
- RENDERING_CONCURRENCY_NAME: 'Image rendering concurrency',
- RENDERING_CONCURRENCY_DESC:
- 'Number of parallel workers to use for image rendering. Increasing this number will speed up the rendering process, but may slow down the rest of the system. The default value is 3. You can increase this number if you have a powerful system.',
- EXPORT_SUBHEAD: 'Export Settings',
- EMBED_SIZING: 'Image sizing',
- EMBED_THEME_BACKGROUND: 'Image theme and background color',
- EMBED_IMAGE_CACHE_NAME: 'Cache images for embedding in markdown',
- EMBED_IMAGE_CACHE_DESC:
- "Cache images for embedding in markdown. This will speed up the embedding process, but in case you compose images of several sub-component drawings, the embedded image in Markdown won't update until you open the drawing and save it to trigger an update of the cache.",
- SCENE_IMAGE_CACHE_NAME: 'Cache nested Excalidraws in Scene',
- SCENE_IMAGE_CACHE_DESC:
- 'Cache nested Excalidraws in the Scene for faster scene rendering. This will speed up the rendering process, especially if you have deeply nested Excalidraws in your scene. Excalidraw will try to intelligently identify if any children of a nested Excalidraw have changed and will update the cache accordingly. You may want to turn this off, in case you are suspecting that the cache is not updating properly.',
- EMBED_IMAGE_CACHE_CLEAR: 'Purge Cache',
- BACKUP_CACHE_CLEAR: 'Purge Backups',
- BACKUP_CACHE_CLEAR_CONFIRMATION:
- 'This action will delete all Excalidraw drawing backups. Backups are used as a safety measure in case your drawing file gets damaged. Each time you open Obsidian the plugin automatically deletes backups for files that no longer exist in your Vault. Are you sure you want to clear all backups?',
- EMBED_REUSE_EXPORTED_IMAGE_NAME:
- 'If found, use the already exported image for preview',
- EMBED_REUSE_EXPORTED_IMAGE_DESC:
- "This setting works in conjunction with the Auto-export SVG/PNG setting. If an exported image that matches the file name of the drawing is available, use that image instead of generating a preview image on the fly. This will result in faster previews especially when you have many embedded objects in the drawing, however, it may happen that your latest changes are not displayed and that the image will not automatically match your Obsidian theme in case you have changed the Obsidian theme since the export was created. This setting only applies to embedding images into markdown documents. For a number of reasons, the same approach cannot be used to expedite the loading of drawings with many embedded objects. See demonstration here.",
- EMBED_PREVIEW_IMAGETYPE_NAME: 'Image type in markdown preview',
- EMBED_PREVIEW_IMAGETYPE_DESC:
- "Native SVG: High Image Quality. Embedded Websites, YouTube videos, Obsidian Links, and external images embedded via a URL will all work. Embedded Obsidian pages will not
SVG Image: High Image Quality. Embedded elements and images embedded via URL only have placeholders, links don't work
PNG Image: Lower Image Quality, but in some cases better performance with large drawings. Embedded elements and images embedded via URL only have placeholders, links don't work. Also some of the image block referencing features do not work with PNG embeds.",
- PREVIEW_MATCH_OBSIDIAN_NAME: 'Excalidraw preview to match Obsidian theme',
- PREVIEW_MATCH_OBSIDIAN_DESC:
- "Image preview in documents should match the Obsidian theme. If enabled, when Obsidian is in dark mode, Excalidraw images will render in dark mode. When Obsidian is in light mode, Excalidraw will render light mode as well. You may want to switch 'Export image with background' off for a more Obsidian-integrated look and feel.",
- EMBED_WIDTH_NAME: 'Default width of embedded (transcluded) image',
- EMBED_WIDTH_DESC:
- 'The default width of an embedded drawing. This applies to live preview edit and reading mode, as well as to hover previews. You can specify a custom width when embedding an image using the ![[drawing.excalidraw|100]] or [[drawing.excalidraw|100x100]] format.',
- EMBED_HEIGHT_NAME: 'Default height of embedded (transcluded) image',
- EMBED_HEIGHT_DESC:
- 'The default height of an embedded drawing. This applies to live preview edit and reading mode, as well as to hover previews. You can specify a custom height when embedding an image using the ![[drawing.excalidraw|100]] or [[drawing.excalidraw|100x100]] format.',
- EMBED_TYPE_NAME: 'Type of file to insert into the document',
- EMBED_TYPE_DESC:
- "When you embed an image into a document using the command palette this setting will specify if Excalidraw should embed the original Excalidraw file or a PNG or an SVG copy. You need to enable auto-export PNG / SVG (see below under Export Settings) for those image types to be available in the dropdown. For drawings that do not have a a corresponding PNG or SVG readily available the command palette action will insert a broken link. You need to open the original drawing and initiate export manually. This option will not autogenerate PNG/SVG files, but will simply reference the already existing files.",
- EMBED_MARKDOWN_COMMENT_NAME: 'Embed link to drawing as comment',
- EMBED_MARKDOWN_COMMENT_DESC:
- "Embed the link to the original Excalidraw file as a markdown link under the image, e.g.:%%[[drawing.excalidraw]]%%.
Instead of adding a markdown comment you may also select the embedded SVG or PNG line and use the command palette action: 'Excalidraw: Open Excalidraw drawing' to open the drawing.",
- EMBED_WIKILINK_NAME: 'Embed Drawing using Wiki link',
- EMBED_WIKILINK_DESC:
- 'Toggle ON: Excalidraw will embed a [[wiki link]].
Toggle OFF: Excalidraw will embed a [markdown](link).',
- EXPORT_PNG_SCALE_NAME: 'PNG export image scale',
- EXPORT_PNG_SCALE_DESC: 'The size-scale of the exported PNG image',
- EXPORT_BACKGROUND_NAME: 'Export image with background',
- EXPORT_BACKGROUND_DESC:
- 'If turned off, the exported image will be transparent.',
- EXPORT_PADDING_NAME: 'Image Padding',
- EXPORT_PADDING_DESC:
- 'The padding (in pixels) around the exported SVG or PNG image. Padding is set to 0 for clippedFrame references.If you have curved lines close to the edge of the image they might get cropped during image export. You can increase this value to avoid cropping. You can also override this setting at a file level by adding the excalidraw-export-padding: 5 frontmatter key.',
- EXPORT_THEME_NAME: 'Export image with theme',
- EXPORT_THEME_DESC:
- 'Export the image matching the dark/light theme of your drawing. If turned off, drawings created in dark mode will appear as they would in light mode.',
- EXPORT_EMBED_SCENE_NAME: 'Embed scene in exported image',
- EXPORT_EMBED_SCENE_DESC:
- 'Embed Excalidraw scene in exported image. Can be overridden at a file level by adding the excalidraw-export-embed-scene: true/false frontmatter key. The setting only takes effect the next time you (re)open drawings.',
- PDF_EXPORT_SETTINGS: 'PDF Export Settings',
- EXPORT_HEAD: 'Auto-export Settings',
- EXPORT_SYNC_NAME:
- 'Keep the .SVG and/or .PNG filenames in sync with the drawing file',
- EXPORT_SYNC_DESC:
- 'When turned on, the plugin will automatically update the filename of the .SVG and/or .PNG files when the drawing in the same folder (and same name) is renamed. The plugin will also automatically delete the .SVG and/or .PNG files when the drawing in the same folder (and same name) is deleted. ',
- EXPORT_SVG_NAME: 'Auto-export SVG',
- EXPORT_SVG_DESC:
- 'Automatically create an SVG export of your drawing matching the title of your file. The plugin will save the *.SVG file in the same folder as the drawing. Embed the .svg file into your documents instead of Excalidraw making you embeds platform independent. While the auto-export switch is on, this file will get updated every time you edit the Excalidraw drawing with the matching name. You can override this setting on a file level by adding the excalidraw-autoexport frontmatter key. Valid values for this key are none,both,svg, and png.',
- EXPORT_PNG_NAME: 'Auto-export PNG',
- EXPORT_PNG_DESC: 'Same as the auto-export SVG, but for *.PNG',
- EXPORT_BOTH_DARK_AND_LIGHT_NAME: 'Export both dark- and light-themed image',
- EXPORT_BOTH_DARK_AND_LIGHT_DESC:
- 'When enabled, Excalidraw will export two files instead of one: filename.dark.png, filename.light.png and/or filename.dark.svg and filename.light.svg
Double files will be exported both if auto-export SVG or PNG (or both) are enabled, as well as when clicking export on a single image.',
- COMPATIBILITY_HEAD: 'Compatibility features',
- COMPATIBILITY_DESC:
- 'You should only enable these features if you have a strong reason for wanting to work with excalidraw.com files instead of markdown files. Many of the plugin features are not supported on legacy files. Typical usecase would be if you use set your vault up on top of a Visual Studio Code project folder and you have .excalidraw drawings you want to access from Visual Studio Code as well. Another usecase might be using Excalidraw in Logseq and Obsidian in parallel.',
- DUMMY_TEXT_ELEMENT_LINT_SUPPORT_NAME: 'Linter compatibility',
- DUMMY_TEXT_ELEMENT_LINT_SUPPORT_DESC:
- "Excalidraw is sensitive to the file structure below # Excalidraw Data. Automatic linting of documents can create errors in Excalidraw Data. While I've made some effort to make the data loading resilient to lint changes, this solution is not foolproof.
The best is to avoid liniting or otherwise automatically changing Excalidraw documents using different plugins.
Use this setting if for good reasons you have decided to ignore my recommendation and configured linting of Excalidraw files.
The ## Text Elements section is sensitive to empty lines. A common linting approach is to add an empty line after section headings. In case of Excalidraw this will break/change the first text element in your drawing. To overcome this, you can enable this setting. When enabled, Excalidraw will add a dummy element to the beginning of ## Text Elements that the linter can safely modify.",
- PRESERVE_TEXT_AFTER_DRAWING_NAME: 'Zotero and Footnotes compatibility',
- PRESERVE_TEXT_AFTER_DRAWING_DESC:
- 'Preserve text after the ## Drawing section of the markdown file. This may have a very slight performance impact when saving very large drawings.',
- DEBUGMODE_NAME: 'Enable debug messages',
- DEBUGMODE_DESC:
- "I recommend restarting Obsidian after enabling/disabling this setting. This enable debug messages in the console. This is useful for troubleshooting issues. If you are experiencing problems with the plugin, please enable this setting, reproduce the issue, and include the console log in the issue you raise on GitHub",
- SLIDING_PANES_NAME: 'Sliding panes plugin support',
- SLIDING_PANES_DESC:
- "Need to restart Obsidian for this change to take effect.
If you use the Sliding Panes plugin you can enable this setting to make Excalidraw drawings work with the Sliding Panes plugin.
Note, that Excalidraw Sliding Panes support causes compatibility issues with Obsidian Workspaces.
Note also, that the 'Stack Tabs' feature is now available in Obsidian, providing native support for most of the Sliding Panes functionality.",
- EXPORT_EXCALIDRAW_NAME: 'Auto-export Excalidraw',
- EXPORT_EXCALIDRAW_DESC: 'Same as the auto-export SVG, but for *.Excalidraw',
- SYNC_EXCALIDRAW_NAME:
- 'Sync *.excalidraw with *.md version of the same drawing',
- SYNC_EXCALIDRAW_DESC:
- 'If the modified date of the *.excalidraw file is more recent than the modified date of the *.md file then update the drawing in the .md file based on the .excalidraw file',
- COMPATIBILITY_MODE_NAME: 'New drawings as legacy files',
- COMPATIBILITY_MODE_DESC:
- '⚠️ Enable this only if you know what you are doing. In 99.9% of the cases you DO NOT want this on. By enabling this feature drawings you create with the ribbon icon, the command palette actions, and the file explorer are going to be all legacy *.excalidraw files. This setting will also turn off the reminder message when you open a legacy file for editing.',
- MATHJAX_NAME: 'MathJax (LaTeX) javascript library host',
- MATHJAX_DESC:
- 'If you are using LaTeX equations in Excalidraw, then the plugin needs to load a javascript library for that. Some users are unable to access certain host servers. If you are experiencing issues, try changing the host here. You may need to restart Obsidian after closing settings, for this change to take effect.',
- LATEX_DEFAULT_NAME: 'Default LaTeX formula for new equations',
- LATEX_DEFAULT_DESC:
- "Leave empty if you don't want a default formula. You can add default formatting here such as \\color{white}.",
- LATEX_PREAMBLE_NAME: 'LaTeX preamble file (CasE SEnSiTivE!)',
- LATEX_PREAMBLE_DESC:
- "Full filepath to the preamble file, leave empty for default. If the file doesn't exist this option will be ignored.
Important: Requires obsidian reload after change to take effect!",
- NONSTANDARD_HEAD: 'Non-Excalidraw.com supported features',
- NONSTANDARD_DESC:
- 'These settings in the "Non-Excalidraw.com Supported Features" section provide customization options beyond the default Excalidraw.com features. These features are not available on excalidraw.com. When exporting the drawing to Excalidraw.com these features will appear different.\n You can configure the number of custom pens displayed next to the Obsidian Menu on the canvas, allowing you to choose from a range of options. Additionally, you can enable a local font option, which adds a local font to the list of fonts on the element properties panel for text elements. ',
- RENDER_TWEAK_HEAD: 'Rendering tweaks',
- MAX_IMAGE_ZOOM_IN_NAME: 'Maximum image zoom in resolution',
- MAX_IMAGE_ZOOM_IN_DESC:
- "To save on memory and because Apple Safari (Obsidian on iOS) has some hard-coded limitations, Excalidraw.com limits the max resolution of images and large objects when zooming in. You can override this limitation using a multiplicator. This means you are multiplying the limit set by default in Excalidraw, the larger the multiplier the better the image zoom in resolution will be, and the more memory it will consume. I recommend playing with multiple values for this setting. You know you've hit the wall, when zooming in to a larger PNG image suddenly the image disappears from view. The default value is 1. The setting has no effect on iOS.",
- CUSTOM_PEN_HEAD: 'Custom pens',
- CUSTOM_PEN_NAME: 'Number of custom pens',
- CUSTOM_PEN_DESC:
- 'You will see these pens next to the Obsidian Menu on the canvas. You can customize the pens on the canvas by long-pressing the pen button.',
- EXPERIMENTAL_HEAD: 'Miscellaneous features',
- EXPERIMENTAL_DESC:
- 'These miscellaneous features in Excalidraw include options for setting default LaTeX formulas for new equations, enabling a Field Suggester for autocompletion, displaying type indicators for Excalidraw files, enabling immersive image embedding in live preview editing mode, and experimenting with Taskbone Optical Character Recognition for text extraction from images and drawings. Users can also enter a Taskbone API key for extended usage of the OCR service.',
- EA_HEAD: 'Excalidraw Automate',
- EA_DESC:
- "ExcalidrawAutomate is a scripting and automation API for Excalidraw. Unfortunately, the documentation of the API is sparse. I recommend reading the ExcalidrawAutomate.d.ts file, visiting the ExcalidrawAutomate How-to page - though the information here has not been updated for a long while -, and finally to enable the field suggester below. The field suggester will show you the available functions, their parameters and short description as you type. The field suggester is the most up-to-date documentation of the API.",
- FIELD_SUGGESTER_NAME: 'Enable Field Suggester',
- FIELD_SUGGESTER_DESC:
- 'Field Suggester borrowed from Breadcrumbs and Templater plugins. The Field Suggester will show an autocomplete menu when you type excalidraw- or ea. with function description as hints on the individual items in the list.',
- STARTUP_SCRIPT_NAME: 'Startup script',
- STARTUP_SCRIPT_DESC:
- 'If set, excalidraw will execute the script at plugin startup. This is useful if you want to set any of the Excalidraw Automate hooks. The startup script is a markdown file that should contain the javascript code you want to execute when Excalidraw starts.',
- STARTUP_SCRIPT_BUTTON_CREATE: 'Create startup script',
- STARTUP_SCRIPT_BUTTON_OPEN: 'Open startup script',
- STARTUP_SCRIPT_EXISTS: 'Startup script file already exists',
- FILETYPE_NAME: 'Display type (✏️) for excalidraw.md files in File Explorer',
- FILETYPE_DESC:
- 'Excalidraw files will receive an indicator using the emoji or text defined in the next setting.',
- FILETAG_NAME: 'Set the type indicator for excalidraw.md files',
- FILETAG_DESC: 'The text or emoji to display as type indicator.',
- INSERT_EMOJI: 'Insert an emoji',
- LIVEPREVIEW_NAME: 'Immersive image embedding in live preview editing mode',
- LIVEPREVIEW_DESC:
- 'Turn this on to support image embedding styles such as ![[drawing|width|style]] in live preview editing mode. The setting will not affect the currently open documents. You need close the open documents and re-open them for the change to take effect.',
- FADE_OUT_EXCALIDRAW_MARKUP_NAME: 'Fade out Excalidraw markup',
- FADE_OUT_EXCALIDRAW_MARKUP_DESC:
- "In Markdown view mode, the section after the markdown comment %% fades out. The text is still there, but the visual clutter is reduced. Note, you can place the %% in the line right above # Text Elements, in this case the entire drawing markdown will fade out including # Text Elements. The side effect is you won't be able to block reference text in other markdown notes, that is after the %% comment section. This is seldom an issue. Should you want to edit the Excalidraw markdown script, simply switch to markdown view mode and temporarily remove the %% comment.",
- EXCALIDRAW_PROPERTIES_NAME:
- 'Load Excalidraw Properties into Obsidian Suggester',
- EXCALIDRAW_PROPERTIES_DESC:
- "Toggle this setting to load Excalidraw document properties into Obsidian's property suggester at plugin startup. Enabling this feature simplifies the use of Excalidraw front matter properties, allowing you to leverage many powerful settings. If you prefer not to load these properties automatically, you can disable this feature, but you will need to manually remove any unwanted properties from the suggester. Note that turning on this setting requires restarting the plugin as properties are loaded at startup.",
- FONTS_HEAD: 'Fonts',
- FONTS_DESC:
- 'Configure local fontfaces and downloaded CJK fonts for Excalidraw.',
- CUSTOM_FONT_HEAD: 'Local font',
- ENABLE_FOURTH_FONT_NAME: 'Enable local font option',
- ENABLE_FOURTH_FONT_DESC:
- 'Enabling this option will add a local font to the font list in the properties panel for text elements. Be aware that using this local font may compromise platform independence. Files using the custom font might render differently when opened in a different vault or at a later time, depending on the font settings. Additionally, the 4th font will default to the system font on excalidraw.com or other Excalidraw versions.',
- FOURTH_FONT_NAME: 'Local font file',
- FOURTH_FONT_DESC:
- 'Select a .otf, .ttf, .woff, or .woff2 font file from your vault to use as the local font. If no file is selected, Excalidraw will default to the Virgil font. For optimal performance, it is recommended to use a .woff2 file, as Excalidraw will encode only the necessary glyphs when exporting images to SVG. Other font formats will embed the entire font in the exported file, potentially resulting in significantly larger file sizes.',
- OFFLINE_CJK_NAME: 'Offline CJK font support',
- OFFLINE_CJK_DESC:
- 'Changes you make here will only take effect after restarting Obsidian.
\n Excalidraw.com offers handwritten CJK fonts. By default these fonts are not included in the plugin locally, but are served from the Internet. \n If you prefer to keep Excalidraw fully local, allowing it to work without Internet access you can download the necessary font files from GitHub.\n After downloading, unzip the contents into a folder within your Vault.
\n Pre-loading fonts will impact startup performance. For this reason you can select which fonts to load.',
- CJK_ASSETS_FOLDER_NAME: 'CJK Font Folder (cAsE sENsiTIvE!)',
- CJK_ASSETS_FOLDER_DESC:
- 'You can set the location of the CJK fonts folder here. For example, you may choose to place it under Excalidraw/CJK Fonts.
\n Important: Do not set this folder to the Vault root! Do not put other fonts in this folder.
\n Note: If you\'re using Obsidian Sync and want to synchronize these font files across your devices, ensure that Obsidian Sync is set to synchronize "All other file types".',
- LOAD_CHINESE_FONTS_NAME: 'Load Chinese fonts from file at startup',
- LOAD_JAPANESE_FONTS_NAME: 'Load Japanese fonts from file at startup',
- LOAD_KOREAN_FONTS_NAME: 'Load Korean fonts frome file at startup',
- SCRIPT_SETTINGS_HEAD: 'Settings for installed Scripts',
- SCRIPT_SETTINGS_DESC:
- 'Some of the Excalidraw Automate Scripts include settings. Settings are organized by script. Settings will only become visible in this list after you have executed the newly downloaded script once.',
- TASKBONE_HEAD: 'Taskbone Optical Character Recogntion',
- TASKBONE_DESC:
- "This is an experimental integration of optical character recognition into Excalidraw. Please note, that taskbone is an independent external service not provided by Excalidraw, nor the Excalidraw-Obsidian plugin project. The OCR service will grab legible text from freedraw lines and embedded pictures on your canvas and place the recognized text in the frontmatter of your drawing as well as onto clipboard. Having the text in the frontmatter will enable you to search in Obsidian for the text contents of these. Note, that the process of extracting the text from the image is not done locally, but via an online API. The taskbone service stores the image on its servers only as long as necessary for the text extraction. However, if this is a dealbreaker, then please don't use this feature.",
- TASKBONE_ENABLE_NAME: 'Enable Taskbone',
- TASKBONE_ENABLE_DESC:
- "By enabling this service your agree to the Taskbone Terms and Conditions and the Privacy Policy.",
- TASKBONE_APIKEY_NAME: 'Taskbone API Key',
- TASKBONE_APIKEY_DESC:
- "Taskbone offers a free service with a reasonable number of scans per month. If you want to use this feature more frequently, or you want to supoprt the developer of Taskbone (as you can imagine, there is no such thing as 'free', providing this awesome OCR service costs some money to the developer of Taskbone), you can purchase a paid API key from taskbone.com. In case you have purchased a key, simply overwrite this auto generated free-tier API-key with your paid key.",
- HOTKEY_PRESS_COMBO_NANE: 'Press your hotkey combination',
- HOTKEY_PRESS_COMBO_DESC: 'Please press the desired key combination',
- HOTKEY_BUTTON_ADD_OVERRIDE: 'Add New Override',
- HOTKEY_BUTTON_REMOVE: 'Remove',
- SELECT_FILE: 'Select a file then press enter.',
- SELECT_COMMAND: 'Select a command then press enter.',
- SELECT_FILE_WITH_OPTION_TO_SCALE: `Select a file then press ENTER, or ${labelSHIFT()}+${labelMETA()}+ENTER to insert at 100% scale.`,
- NO_MATCH: 'No file matches your query.',
- NO_MATCHING_COMMAND: 'No command matches your query.',
- SELECT_FILE_TO_LINK: 'Select the file you want to insert the link for.',
- SELECT_COMMAND_PLACEHOLDER:
- 'Select the command you want to insert the link for.',
- SELECT_DRAWING: 'Select the image or drawing you want to insert',
- TYPE_FILENAME: 'Type name of drawing to select.',
- SELECT_FILE_OR_TYPE_NEW:
- 'Select existing drawing or type name of a new drawing then press Enter.',
- SELECT_TO_EMBED: 'Select the drawing to insert into active document.',
- SELECT_MD: 'Select the markdown document you want to insert',
- SELECT_PDF: 'Select the PDF document you want to insert',
- PDF_PAGES_HEADER: 'Pages to load?',
- PDF_PAGES_DESC: 'Format: 1, 3-5, 7, 9-11',
- TYPE_SECTION: 'Type section name to select.',
- SELECT_SECTION_OR_TYPE_NEW:
- 'Select existing section or type name of a new section then press Enter.',
- INVALID_SECTION_NAME: 'Invalid section name.',
- EMPTY_SECTION_MESSAGE:
- 'Type the Section Name and hit enter to create a new Section',
- INFINITE_LOOP_WARNING:
- 'EXCALIDRAW WARNING\nAborted loading embedded images due to infinite loop in file:\n',
- SCRIPT_EXECUTION_ERROR:
- 'Script execution error. Please find error message on the developer console.',
- LOAD_FROM_BACKUP: 'Excalidraw file was corrupted. Loading from backup file.',
- FONT_LOAD_SLOW:
- 'Loading Fonts...\n\n This is taking longer than expected. If this delay occurs regulary then you may download the fonts locally to your Vault. \n\n(click=dismiss, right-click=Info)',
- FONT_INFO_TITLE: 'Starting v2.5.3 fonts load from the Internet',
- FONT_INFO_DETAILED: `\n main.js. CJK fonts will be loaded from the internet by default.\n This typically shouldn't cause issues as Obsidian caches these files after first use.\n Instructions:
\n \n
\n Excalidraw/${CJK_FONTS}; folder names are cAse-senSITive).For Obsidian Sync Users:
\n Note:
\n main.js is supported, which leads to large files and slow startup times for complex plugins like Excalidraw. \n I apologize for the inconvenience.\n
For markdown-page images follow this format when editing your link: filename#^blockref|WIDTHxMAXHEIGHT
You can anchor Excalidraw images to 100% of their size by adding |100% to the end of the link.
You can change the PDF page by changing #page=1 to #page=2 etc.
PDF rect crop values are: left, bottom, right, top. Eg.: #rect=0,0,500,500
",FRAME_CLIPPING_ENABLED:"Frame Rendering: Enabled",FRAME_CLIPPING_DISABLED:"Frame Rendering: Disabled",ARROW_BINDING_INVERSE_MODE:"Inverted Mode: Default arrow binding is now disabled. Use CTRL/CMD to temporarily enable binding when needed.",ARROW_BINDING_NORMAL_MODE:"Normal Mode: Arrow binding is now enabled. Use CTRL/CMD to temporarily disable binding when needed.",EXPORT_FILENAME_PROMPT:"Please provide filename",EXPORT_FILENAME_PROMPT_PLACEHOLDER:"filename, leave blank to cancel action",WARNING_SERIOUS_ERROR:"WARNING: Excalidraw ran into an unknown problem!\n\nThere is a risk that your most recent changes cannot be saved.\n\nTo be on the safe side...\n1) Please select your drawing using CTRL/CMD+A and make a copy with CTRL/CMD+C.\n2) Then create an empty drawing in a new pane by CTRL/CMD+clicking the Excalidraw ribbon button,\n3) and paste your work to the new document with CTRL/CMD+V.",ARIA_LABEL_TRAY_MODE:"You can choose from 3 different desktop and tablet UI modes: Full, Compact, and Tray. On Phones only the Phone mode is available.",TRAY_TRAY_MODE:"Toggle UI-mode",TRAY_SCRIPT_LIBRARY:"Script Library",TRAY_SCRIPT_LIBRARY_ARIA:"Explore the Excalidraw Script Library",TRAY_EXPORT:"Export Image...",TRAY_EXPORT_ARIA:"Export image as PNG, SVG, or Excalidraw file",TRAY_SAVE:"Save",TRAY_SWITCH_TO_MD:"Open as Markdown",TRAY_SWITCH_TO_MD_ARIA:"Switch to markdown view",MASK_FILE_NOTICE:"This is a mask file. It is used to crop images and mask out parts of the image. Press and hold notice to open the help video.",INSTALL_SCRIPT_BUTTON:"Install or update Excalidraw Scripts",OPEN_AS_MD:"Open as Markdown",EXPORT_IMAGE:"Export Image",OPEN_LINK:"Open selected text as link\n(SHIFT+CLICK to open in a new pane)",EXCALIDRAW_SIDEPANEL:"Excalidraw Sidepanel",EXPORT_EXCALIDRAW:"Export to an .Excalidraw file",LINK_BUTTON_CLICK_NO_TEXT:"Select an element that contains an internal or external link.\n",LINEAR_ELEMENT_LINK_CLICK_ERROR:"Arrow- and Line-Element links cannot be navigated by "+labelCTRL()+" + CLICKing on the element because that also activates the line editor.\nUse the right-click context menu to open the link, or click the link indicator in the top right corner of the element.\n",FILENAME_INVALID_CHARS:'File name cannot contain any of the following characters: * " \\ < > : | ? #',FORCE_SAVE:"Save (will also update transclusions)",RAW:"Change to PREVIEW mode (only affects text-elements with links or transclusions)",PARSED:"Change to RAW mode (only affects text-elements with links or transclusions)",NOFILE:"Excalidraw (no file)",COMPATIBILITY_MODE:"*.excalidraw file opened in compatibility mode. Convert to new format for full plugin functionality.",CONVERT_FILE:"Convert to new format",BACKUP_AVAILABLE:"We encountered an error while loading your drawing. This might have occurred if Obsidian unexpectedly closed during a save operation. For example, if you accidentally closed Obsidian on your mobile device while saving.
GOOD NEWS: Fortunately, a local backup is available. However, please note that if you last modified this drawing on a different device (e.g., tablet) and you are now on your desktop, that other device likely has a more recent backup.
I recommend trying to open the drawing on your other device first and restore the backup from its local storage.
Would you like to load the backup?",BACKUP_RESTORED:"Backup restored",BACKUP_SAVE_AS_FILE:"This drawing is empty. A non-empty backup is available. Would you like to restore it as a new file and open it in a new tab?",BACKUP_SAVE:"Restore",BACKUP_DELETE:"Delete Backup",BACKUP_CANCEL:"Cancel",CACHE_NOT_READY:"I apologize for the inconvenience, but an error occurred while loading your file.
Having a little patience can save you a lot of time...
The plugin has a backup cache, but it appears that you have just started Obsidian. Initializing the Backup Cache may take some time, usually up to a minute or more depending on your device's performance. You will receive a notification in the top right corner when the cache initialization is complete.
Please press OK to attempt loading the file again and check if the cache has finished initializing. If you see a completely empty file behind this message, I recommend waiting until the backup cache is ready before proceeding. Alternatively, you can choose Cancel to manually correct your file.
",OBSIDIAN_TOOLS_PANEL:"Obsidian Tools Panel",ERROR_SAVING_IMAGE:"Unknown error occurred while fetching the image. It could be that for some reason the image is not available or rejected the fetch request from Obsidian",WARNING_PASTING_ELEMENT_AS_TEXT:"PASTING EXCALIDRAW ELEMENTS AS A TEXT ELEMENT IS NOT ALLOWED",USE_INSERT_FILE_MODAL:"Use 'Insert Any File' to embed a markdown note",RECURSIVE_INSERT_ERROR:"You may not recursively insert part of an image into the same image as it would create an infinite loop",CONVERT_TO_MARKDOWN:"Convert to file...",SELECT_TEXTELEMENT_ONLY:"Select text element only (not container)",REMOVE_LINK:"Remove text element link",LASER_ON:"Enable laser pointer",LASER_OFF:"Disable laser pointer",WELCOME_RANK_NEXT:"more drawings until the next rank!",WELCOME_RANK_LEGENDARY:"You're at the top. Keep on being legendary!",WELCOME_COMMAND_PALETTE:'Type "Excalidraw" in the Command Palette',WELCOME_OBSIDIAN_MENU:"Explore the Obsidian Menu in the top right",WELCOME_SCRIPT_LIBRARY:"Visit the Script Library",WELCOME_HELP_MENU:"Find help in the hamburger-menu",WELCOME_YOUTUBE_ARIA:"Visual PKM YouTube Channel",WELCOME_YOUTUBE_LINK:"Check out the Visual PKM YouTube channel.",WELCOME_DISCORD_ARIA:"Join the Discord Server",WELCOME_DISCORD_LINK:"Join the Discord Server",WELCOME_TWITTER_ARIA:"Follow me on Twitter",WELCOME_TWITTER_LINK:"Follow me on Twitter",WELCOME_LEARN_ARIA:"Learn Visual PKM",WELCOME_LEARN_LINK:"Sign up for the Visual Thinking Workshop",WELCOME_DONATE_ARIA:"Donate to support Excalidraw-Obsidian",WELCOME_DONATE_LINK:'Say "Thank You" & support the plugin.',SAVE_IS_TAKING_LONG:"Saving your previous file is taking a long time. Please wait...",SAVE_IS_TAKING_VERY_LONG:"For better performance, consider splitting large drawings into several smaller files.",SEARCH_COPIED_TO_CLIPBOARD:"Markdown ready on clipboard",SEARCH_COPY_TO_CLIPBOARD_ARIA:"Copy the entire dialog to the clipboard as Markdown. Ideal for use with tools like ChatGPT to search and understand.",SEARCH_SHOWHIDE_ARIA:"Show/Hide search bar",SEARCH_NEXT:"Next",SEARCH_PREVIOUS:"Previous",DISABLE_CONTEXT_MENU_NAME:"Disable Excalidraw context menu",DISABLE_CONTEXT_MENU_DESC:"Disables the Excalidraw context menu. This can be useful on Mobile devices where the context menu pops up in unwanted moments.",NOTEBOOKLM_LINK_ARIA:"Ask NotebookLM for help about the plugin. This model is pre-loaded with all my video transcripts, release notes and other helpful content. Chat with NotebookLM to explore my 250+ videos and the Excalidraw documentation.",NOTEBOOKLM_LINK_TEXT:"Learn the Plugin. Access the NotebookLM knowledgebase.",LINKS_BUGS_ARIA:"Report bugs and raise feature requsts on the plugin's GitHub page",LINKS_BUGS:"Report Bugs",LINKS_YT_ARIA:"Check out my YouTube channel to learn about Visual Thinking and Excalidraw",LINKS_YT:"Learn on YouTube",LINKS_DISCORD_ARIA:"Join the Visual Thinking Workshop Discord Server",LINKS_DISCORD:"Join the Community",LINKS_TWITTER:"Follow me",LINKS_VTW_ARIA:"Learn about Visual PKM, Excalidraw, Obsidian, ExcaliBrain and more",LINKS_VTW:"Join a Workshop",LINKS_BOOK_ARIA:"Read Sketch Your Mind, my book on Visual Thinking",LINKS_BOOK:"Read the Book",LINKS_WIKI:"Plugin Wiki",LINKS_WIKI_ARIA:"Explore the Excalidraw Plugin Wiki",RELEASE_NOTES_NAME:"Display Release Notes after update",RELEASE_NOTES_DESC:"Toggle ON: Display release notes each time you update Excalidraw to a newer version.
Toggle OFF: Silent mode. You can still read release notes on GitHub.",WARN_ON_MANIFEST_MISMATCH_NAME:"Warn about incomplete plugin updates",WARN_ON_MANIFEST_MISMATCH_DESC:"Checks that the installed Excalidraw executable matches the version shown in Obsidian's plugin list. If they don't match (often after partial sync), you'll see a warning and can update. Disable to stop checking.",NEWVERSION_NOTIFICATION_NAME:"Plugin update notification",NEWVERSION_NOTIFICATION_DESC:"Toggle ON: Show a notification when a new version of the plugin is available.
Toggle OFF: Silent mode. You need to check for plugin updates in Community Plugins.",BASIC_HEAD:"Basic",BASIC_DESC:'In the "Basic" settings, you can configure options such as displaying release notes after updates, receiving plugin update notifications, setting the default location for new drawings, specifying the Excalidraw folder for embedding drawings into active documents, defining an Excalidraw template file, and designating an Excalidraw Automate script folder for managing automation scripts.',FOLDER_NAME:"Excalidraw folder (CAsE sEnsITive!)",FOLDER_DESC:"Default location for new drawings. If empty, drawings will be created in the Vault root.",CROP_SUFFIX_NAME:"Crop file suffix",CROP_SUFFIX_DESC:"The last part of the filename for new drawings created when cropping an image. Leave empty if you don't need a suffix.",CROP_PREFIX_NAME:"Crop file prefix",CROP_PREFIX_DESC:"The first part of the filename for new drawings created when cropping an image. Leave empty if you don't need a prefix.",ANNOTATE_SUFFIX_NAME:"Annotation file suffix",ANNOTATE_SUFFIX_DESC:"The last part of the filename for new drawings created when annotating an image. Leave empty if you don't need a suffix.",ANNOTATE_PREFIX_NAME:"Annotation file prefix",ANNOTATE_PREFIX_DESC:"The first part of the filename for new drawings created when annotating an image. Leave empty if you don't need a prefix.",ANNOTATE_PRESERVE_SIZE_NAME:"Preserve image size when annotating",ANNOTATE_PRESERVE_SIZE_DESC:"When annotating an image in markdown the replacement image link will include the width of the original image.",CROP_FOLDER_NAME:"Crop file folder (CaSE senSItive!)",CROP_FOLDER_DESC:"Default location for new drawings created when cropping an image. If empty, drawings will be created following the Vault attachments settings.",ANNOTATE_FOLDER_NAME:"Image annotation file folder (CaSe SeNSitIVe!)",ANNOTATE_FOLDER_DESC:"Default location for new drawings created when annotating an image. If empty, drawings will be created following the Vault attachments settings.",FOLDER_EMBED_NAME:"Use Excalidraw folder when embedding a drawing into the active document",FOLDER_EMBED_DESC:"Define which folder to place the newly inserted drawing into when using the command palette action: 'Create a new drawing and embed into active document'.
Toggle ON: Use Excalidraw folder
Toggle OFF: Use the attachments folder defined in Obsidian settings.",TEMPLATE_NAME:"Excalidraw template file or folder (caSe SenSiTive!)",TEMPLATE_DESC:"Full filepath or folderpath to the Excalidraw template.
Template File:E.g.: If your template is in the default Excalidraw folder and its name is Template.md, the setting would be: Excalidraw/Template.md (or just Excalidraw/Template - you may omit the .md file extension). If you are using Excalidraw in compatibility mode, then your template must be a legacy Excalidraw file as well such as Excalidraw/Template.excalidraw.
Template Folder: You can also set a folder as your template. In this case you will be prompted which template to use when creating a new drawing.
Pro Tip: If you are using the Obsidian Templater plugin, you can add Templater code to your different Excalidraw templates to automate configuration of your drawings.",SCRIPT_FOLDER_NAME:"Excalidraw Automate script folder (CASE SeNSitiVE!)",SCRIPT_FOLDER_DESC:"The files you place in this folder will be treated as Excalidraw Automate scripts. You can access your scripts from Excalidraw via the Obsidian Command Palette. Assign hotkeys to your favorite scripts just like to any other Obsidian command. The folder may not be the root folder of your Vault. ",AI_HEAD:"AI Settings - Experimental",AI_DESC:'In the "AI" settings, you can configure options for using OpenAI\'s GPT API. While the OpenAI API is in beta, its use is strictly limited — as such we require you use your own API key. You can create an OpenAI account, add a small credit (5 USD minimum), and generate your own API key. Once API key is set, you can use the AI tools in Excalidraw.',AI_ENABLED_NAME:"Enable AI features",AI_ENABLED_DESC:"You need to reopen Excalidraw for the changes to take effect.",AI_OPENAI_TOKEN_NAME:"OpenAI API key",AI_OPENAI_TOKEN_DESC:"You can get your OpenAI API key from your OpenAI account.",AI_OPENAI_TOKEN_PLACEHOLDER:"Enter your OpenAI API key here",AI_OPENAI_DEFAULT_MODEL_NAME:"Default AI model",AI_OPENAI_DEFAULT_MODEL_DESC:"The default AI model to use when generating text. This is a freetext field, so you can enter any valid OpenAI model name. Find out more about the available models on the OpenAI website.",AI_OPENAI_DEFAULT_MODEL_PLACEHOLDER:"Enter your default AI model here. e.g.: gpt-5-mini",AI_OPENAI_DEFAULT_MAX_TOKENS_NAME:"Max tokens",AI_OPENAI_DEFAULT_MAX_TOKENS_DESC:"Maximum number of tokens to generate in the API response. Set to 0 to omit the max_tokens field (useful for models that don't support this parameter, such as GPT-5).",AI_OPENAI_DEFAULT_IMAGE_MODEL_NAME:"Default Image Generation AI model",AI_OPENAI_DEFAULT_IMAGE_MODEL_DESC:"The default AI model to use when generating images. Image editing and variations are only supported by dall-e-2 and gpt-image-1 at this time by OpenAI.
This is a freetext field, so you can enter any valid OpenAI model name. Find out more about the available models on the OpenAI website.",AI_OPENAI_DEFAULT_IMAGE_MODEL_PLACEHOLDER:"Enter your default Image Generation AI model here e.g.: gpt-image-1",AI_OPENAI_DEFAULT_VISION_MODEL_NAME:"Default AI vision model",AI_OPENAI_DEFAULT_VISION_MODEL_DESC:"The default AI vision model to use when generating text from images. This is a freetext field, so you can enter any valid OpenAI model name. Find out more about the available models on the OpenAI website.",AI_OPENAI_DEFAULT_API_URL_NAME:"OpenAI API URL",AI_OPENAI_DEFAULT_API_URL_DESC:"The default OpenAI API URL. This is a freetext field, so you can enter any valid OpenAI API compatible URL. Excalidraw will use this URL when posting API requests to OpenAI. I am not doing any error handling on this field, so make sure you enter a valid URL and only change this if you know what you are doing. ",AI_OPENAI_DEFAULT_IMAGE_API_URL_NAME:"OpenAI Image Generation API URL",AI_OPENAI_DEFAULT_VISION_MODEL_PLACEHOLDER:"Enter your default AI vision model here. e.g.: gpt-5-mini",SAVING_HEAD:"Saving",SAVING_DESC:"In the 'Saving' section of Excalidraw Settings, you can configure how your drawings are saved. This includes options for compressing Excalidraw JSON in Markdown, setting autosave intervals for both desktop and mobile, defining filename formats, and choosing whether to use the .excalidraw.md or .md file extension. ",COMPRESS_NAME:"Compress Excalidraw JSON in Markdown",COMPRESS_DESC:"By enabling this feature Excalidraw will store the drawing JSON in a Base64 compressed format using the LZ-String algorithm. This will reduce the chance of Excalidraw JSON cluttering your search results in Obsidian. As a side effect, this will also reduce the filesize of Excalidraw drawings. When you switch an Excalidraw drawing to Markdown view, using the options menu in Excalidraw, the file will be saved without compression, so that you can read and edit the JSON string. The drawing will be compressed again once you switch back to Excalidraw view. The setting only has effect 'point forward', meaning, existing drawings will not be affected by the setting until you open them and save them.
Toggle ON: Compress drawing JSON
Toggle OFF: Leave drawing JSON uncompressed",DECOMPRESS_FOR_MD_NAME:"Decompress Excalidraw JSON in Markdown View",DECOMPRESS_FOR_MD_DESC:"By enabling this feature Excalidraw will automatically decompress the drawing JSON when you switch to Markdown view. This will allow you to easily read and edit the JSON string. The drawing will be compressed again once you switch back to Excalidraw view and save the drawing (CTRL+S).
I recommend switching this feature off as it will result in smaller file sizes and avoiding unnecessary results in Obsidian search. You can always use the 'Excalidraw: Decompress current Excalidraw file' command from the command palette to manually decompress the drawing JSON when you need to read or edit it.",AUTOSAVE_INTERVAL_DESKTOP_NAME:"Interval for autosave on Desktop",AUTOSAVE_INTERVAL_DESKTOP_DESC:"The time interval between saves. Autosave will skip if there are no changes in the drawing. Excalidraw will also save the file when closing a workspace tab or navigating within Obsidian, but away from the active Excalidraw tab (i.e. clicking on the Obsidian ribbon or checking backlinks, etc.). Excalidraw will not be able to save your work when terminating Obsidian directly either by killing the Obsidian process, or clicking to close Obsidian altogether.",AUTOSAVE_INTERVAL_MOBILE_NAME:"Interval for autosave on Mobile",AUTOSAVE_INTERVAL_MOBILE_DESC:"I recommend a more frequent interval for Mobiles. Excalidraw will also save the file when closing a workspace tab or navigating within Obsidian, but away from the active Excalidraw tab (i.e. tapping on the Obsidian ribbon or checking backlinks, etc.). Excalidraw will not be able to save your work when terminating Obsidian directly (i.e. swiping it away). Also note, that when you switch apps on a Mobile device, sometimes Android and iOS closes Obsidian in the background to save system resources. In such a case Excalidraw will not be able to save the latest changes.",FILENAME_HEAD:"Filename",FILENAME_DESC:"Create a new drawing and embed into active document?
Toggle ON: Yes, the filename of a new drawing should start with filename of the active document
Toggle OFF: No, filename of a new drawing should not include the filename of the active document",FILENAME_POSTFIX_NAME:"Custom text after markdown Note's name when embedding",FILENAME_POSTFIX_DESC:"Affects filename only when embedding into a markdown document. This text will be inserted after the note's name, but before the date.",FILENAME_DATE_NAME:"Filename Date",FILENAME_DATE_DESC:"The last part of the filename. Leave empty if you do not want a date.",FILENAME_EXCALIDRAW_EXTENSION_NAME:".excalidraw.md or .md",FILENAME_EXCALIDRAW_EXTENSION_DESC:"This setting does not apply if you use Excalidraw in compatibility mode, i.e. you are not using Excalidraw markdown files.
Toggle ON: filename ends with .excalidraw.md
Toggle OFF: filename ends with .md",DISPLAY_HEAD:"Excalidraw appearance and behavior",DISPLAY_DESC:"In the 'appearance and behavior' section of Excalidraw Settings, you can fine-tune how Excalidraw appears and behaves. This includes options for dynamic styling, left-handed mode, matching Excalidraw and Obsidian themes, default modes, and more.",OVERRIDE_OBSIDIAN_FONT_SIZE_NAME:"Limit Obsidian Font Size to Editor Text",OVERRIDE_OBSIDIAN_FONT_SIZE_DESC:"Obsidian's custom font size setting affects the entire interface, including Excalidraw and themes that depend on the default font size. Enabling this option restricts font size changes to editor text, which will improve the look of Excalidraw. If parts of the UI look incorrect after enabling, try turning this setting off.",DYNAMICSTYLE_NAME:"Dynamic styling",DYNAMICSTYLE_DESC:"Change Excalidraw UI colors to match the canvas color",LEFTHANDED_MODE_NAME:"Left-handed mode",LEFTHANDED_MODE_DESC:"Currently only has effect in tray-mode. If turned on, the tray will be on the right side.
Toggle ON: Left-handed mode.
Toggle OFF: Right-handed mode.",IFRAME_MATCH_THEME_NAME:"Markdown embeds to match Excalidraw theme",IFRAME_MATCH_THEME_DESC:"Toggle ON: Set this to true if for example you are using Obsidian in dark-mode but use excalidraw with a light background. With this setting the embedded Obsidian markdown document will match the Excalidraw theme (i.e. light colors if Excalidraw is in light mode).
Toggle OFF: Set this to false if you want the embedded Obsidian markdown document to match the Obsidian theme (i.e. dark colors if Obsidian is in dark mode).",MATCH_THEME_NAME:"New drawing to match Obsidian theme",MATCH_THEME_DESC:"If theme is dark, new drawing will be created in dark mode. This does not apply when you use a template for new drawings. Also this will not affect when you open an existing drawing. Those will follow the theme of the template/drawing respectively.
Toggle ON: Follow Obsidian Theme
Toggle OFF: Follow theme defined in your template",MATCH_THEME_ALWAYS_NAME:"Existing drawings to match Obsidian theme",MATCH_THEME_ALWAYS_DESC:"If theme is dark, drawings will be opened in dark mode. If your theme is light, they will be opened in light mode.
Toggle ON: Match Obsidian theme
Toggle OFF: Open with the same theme as last saved",MATCH_THEME_TRIGGER_NAME:"Excalidraw to follow when Obsidian Theme changes",MATCH_THEME_TRIGGER_DESC:"If this option is enabled open Excalidraw pane will switch to light/dark mode when Obsidian theme changes.
Toggle ON: Follow theme changes
Toggle OFF: Drawings are not affected by Obsidian theme changes",DEFAULT_OPEN_MODE_NAME:"Default mode when opening Excalidraw",DEFAULT_OPEN_MODE_DESC:"Specifies the mode how Excalidraw opens: Normal, Zen, or View mode. You may also set this behavior on a file level by adding the excalidraw-default-mode frontmatter key with a value of: normal, view, or zen to your document.",DEFAULT_PEN_MODE_NAME:"Pen mode",DEFAULT_PEN_MODE_DESC:"Should pen mode be automatically enabled when opening Excalidraw?",ENABLE_DOUBLE_CLICK_TEXT_EDITING_NAME:"Enable double-click text create",DISABLE_DOUBLE_TAP_ERASER_NAME:"Enable double-tap eraser in pen mode",DISABLE_SINGLE_FINGER_PANNING_NAME:"Enable single-finger panning in pen mode",SHOW_PEN_MODE_FREEDRAW_CROSSHAIR_NAME:"Show (+) crosshair in pen mode",SHOW_PEN_MODE_FREEDRAW_CROSSHAIR_DESC:"Show crosshair in pen mode when using the freedraw tool. Toggle ON: SHOW Toggle OFF: HIDE
The effect depends on the device. Crosshair is typically visible on drawing tablets, MS Surface, but not on iOS.",SHOW_DRAWING_OR_MD_IN_HOVER_PREVIEW_NAME:"Render Excalidraw file as an image in hover preview...",SHOW_DRAWING_OR_MD_IN_HOVER_PREVIEW_DESC:"...even if the file has the excalidraw-open-md: true frontmatter key.
When this setting is off and the file is set to open in md by default, the hover preview will show the markdown side of the document.
Note: excalidraw-open-md is different from excalidraw-embed-md. If excalidraw-embed-md is set to true, the hover preview will always show the markdown side, regardless of this setting. To force image rendering when embedding, use ![[drawing#^as-image]] in your markdown file.",SHOW_DRAWING_OR_MD_IN_READING_MODE_NAME:"Render as image when in markdown reading mode of an Excalidraw file",SHOW_DRAWING_OR_MD_IN_READING_MODE_DESC:"When you are in markdown reading mode (aka. reading the back side of the drawing) should the Excalidraw drawing be rendered as an image? This setting will not affect the display of the drawing when you are in Excalidraw mode or when you embed the drawing into a markdown document or when rendering hover preview.
You must close the active excalidraw/markdown file and reopen it for this change to take effect.",SHOW_DRAWING_OR_MD_IN_EXPORTPDF_NAME:"Render Excalidraw as Image in Obsidian PDF Export",SHOW_DRAWING_OR_MD_IN_EXPORTPDF_DESC:"This setting controls how Excalidraw files are exported to PDF using Obsidian's built-in Export to PDF feature.
Note: This setting does not affect the PDF export feature within Excalidraw itself.
See the other related setting for Markdown Reading Mode under 'Appearance and Behavior' further above.
⚠️ You must close and reopen the Excalidraw/markdown file for changes to take effect. ⚠️",MODES_HEAD:"UI Modes",DESKTOP_UI_MODE_NAME:"Preferred Desktop Mode",DESKTOP_UI_MODE_DESC:"Select the default UI mode for desktop devices.",TABLET_UI_MODE_NAME:"Preferred Tablet Mode",TABLET_UI_MODE_DESC:"Select the default UI mode for tablet devices.",MODE_FULL:"Desktop-mode",MODE_COMPACT:"Compact-mode",MODE_TRAY:"Tray-mode",TRAY_MODE_NAME:"Enable tray-mode",PREFER_COMPACT_MODE_DESKTOP_NAME:"Prefer compact-mode on Desktop",PREFER_COMPACT_MODE_DESKTOP_DESC:"When toggling tray-mode on a desktop, if this option is enabled, Excalidraw will toggle between compact-mode and tray-mode. If this setting is off, it will toggle betweeen full-mode and tray-mode.",COMPACT_MODE_NAME:"Prefer compact-mode on Tablets",COMPACT_MODE_DESC:"This setting allows you to have a different default mode on tablets, then on desktops. You can default to compact mode on tablets, and to tray-mode on desktops with the help of this setting.",HOTKEY_OVERRIDE_HEAD:"Hotkey overrides",HOTKEY_OVERRIDE_DESC:`Some of the Excalidraw hotkeys such as ${labelCTRL()}+Enter to edit text or ${labelCTRL()}+K to create an element link conflict with Obsidian hotkey settings. The hotkey combinations you add below will override Obsidian's hotkey settings while using Excalidraw, thus you can add ${labelCTRL()}+G if you want to default to Group Object in Excalidraw instead of opening Graph View.`,THEME_HEAD:"Theme and styling",ZOOM_AND_PAN_HEAD:"Zoom and Pan",PAN_WITH_RIGHT_MOUSE_BUTTON_NAME:"Right-click drag to pan",PAN_WITH_RIGHT_MOUSE_BUTTON_DESC:"Right-click and drag to pan the canvas (Miro-style). Press 'm' to open the context menu.",DEFAULT_PINCHZOOM_NAME:"Allow pinch zoom in pen mode",DEFAULT_PINCHZOOM_DESC:"Pinch zoom in pen mode when using the freedraw tool is disabled by default to prevent unwanted accidental zooming with your palm.
Toggle ON: Enable pinch zoom in pen mode
Toggle OFF:Disable pinch zoom in pen mode",DEFAULT_WHEELZOOM_NAME:"Mouse wheel to zoom by default",DEFAULT_WHEELZOOM_DESC:`Toggle ON: Mouse wheel to zoom; ${labelCTRL()} + mouse wheel to scrollToggle OFF:${labelCTRL()} + mouse wheel to zoom; Mouse wheel to scroll`,ZOOM_TO_FIT_NAME:"Zoom to fit on view resize",ZOOM_TO_FIT_DESC:"Zoom to fit drawing when the pane is resized
Toggle ON: Zoom to fit
Toggle OFF: Auto zoom disabled",ZOOM_TO_FIT_ONOPEN_NAME:"Zoom to fit on file open",ZOOM_TO_FIT_ONOPEN_DESC:"Zoom to fit drawing when the drawing is first opened
Toggle ON: Zoom to fit
Toggle OFF: Auto zoom disabled",ZOOM_TO_FIT_MAX_LEVEL_NAME:"Zoom to fit max ZOOM level",ZOOM_TO_FIT_MAX_LEVEL_DESC:"Set the maximum level to which zoom to fit will enlarge the drawing. Minimum is 0.5 (50%) and maximum is 10 (1000%).",ZOOM_STEP_NAME:"Zoom increment",ZOOM_STEP_DESC:"Zoom increment (in percentage points) for actions like mouse wheel zoom. Smaller values give finer control but may require excessive scrolling. Default: 5%.",ZOOM_MIN_NAME:"Minimum zoom",ZOOM_MIN_DESC:"How far you can zoom out (fit more of the drawing on screen). Default: 10%. Values below 10% were historically unstable—lower with caution and reset to 10% if issues occur.",ZOOM_MAX_NAME:"Maximum zoom",ZOOM_MAX_DESC:"Upper zoom limit. Default: 3000%. Usually no need to change; included for completeness.",PEN_HEAD:"Pen",GRID_HEAD:"Grid",GRID_DYNAMIC_COLOR_NAME:"Dynamic grid color",GRID_DYNAMIC_COLOR_DESC:"Toggle ON:Change grid color to match the canvas color
Toggle OFF:Use the color below as the grid color",GRID_COLOR_NAME:"Grid color",GRID_OPACITY_NAME:"Grid opacity",GRID_OPACITY_DESC:"Sets the opacity of the grid. 0 is transparent, 100 is opaque.",GRID_DIRECTION_NAME:"Grid direction",GRID_DIRECTION_DESC:"The first toggle shows/hides the horizontal grid, the second toggle shows/hides the vertical grid.",GRID_HORIZONTAL:"Render horizontal grid",GRID_VERTICAL:"Render vertical grid",LASER_HEAD:"Laser pointer",LASER_COLOR:"Laser pointer color",LASER_DECAY_TIME_NAME:"Laser pointer decay time",LASER_DECAY_TIME_DESC:"Laser pointer decay time in milliseconds. Default is 1000 (i.e. 1 second).",LASER_DECAY_LENGTH_NAME:"Laser pointer decay length.",LASER_DECAY_LENGTH_DESC:"Laser pointer decay length in line points. Default is 50.",LINKS_HEAD:"Links, transclusion and TODOs",LINKS_HEAD_DESC:"In the 'Links, transclusion and TODOs' section of Excalidraw Settings, you can configure how Excalidraw handles links, transclusions, and TODO items. This includes options for opening links, managing panes, displaying links with brackets, customizing link prefixes, handling TODO items, and more. ",LINKS_DESC:`${labelCTRL()}+CLICK on [[Text Elements]] to open them as links. If the selected text has more than one [[valid Obsidian links]], only the first will be opened. If the text starts as a valid web link (i.e. https:// or http://), then the plugin will open it in a browser. When Obsidian files change, the matching [[link]] in your drawings will also change. If you don't want text accidentally changing in your drawings use [[links|with aliases]].`,DRAG_MODIFIER_NAME:"Link Click and Drag&Drop Modifier Keys",DRAG_MODIFIER_DESC:"Modifier key behavior when clicking links and dragging and dropping elements. Excalidraw will not validate your configuration... pay attention to avoid conflicting settings. These settings are different for Apple and non-Apple. If you use Obsidian on multiple platforms, you'll need to make the settings separately. The toggles follow the order of "+(DEVICE.isIOS||DEVICE.isMacOS?"SHIFT, CMD, OPT, CONTROL.":"SHIFT, CTRL, ALT, META (Windows key)."),LONG_PRESS_DESKTOP_NAME:"Long press to open desktop",LONG_PRESS_DESKTOP_DESC:"Long press delay in milliseconds to open an Excalidraw Drawing embedded in a Markdown file. ",LONG_PRESS_MOBILE_NAME:"Long press to open mobile",LONG_PRESS_MOBILE_DESC:"Long press delay in milliseconds to open an Excalidraw Drawing embedded in a Markdown file. ",DOUBLE_CLICK_LINK_OPEN_VIEW_MODE:"Allow double-click to open links in view mode",ELEMENT_LINK_SYNC_NAME:"Sync text-element link with text",ELEMENT_LINK_SYNC_DESC:"When enabled, Excalidraw matches pre-2.19.0 behavior: the first link in the text body is always copied to the element link field. SVG/PNG exports only keep links when the element link field holds a single link (not links inside the text body). Turn this ON if you rely on text-body links and want the element link to always mirror the first one. Turn it OFF if you manage the element link separately: for metadata like tags, inline link ontologies, or multiple links, e.g., dataview-style notes like '(reminds me of:: [[link]]) #noteToSelf'.",FOCUS_ON_EXISTING_TAB_NAME:"Focus on Existing Tab",FOCUS_ON_EXISTING_TAB_DESC:"When opening a link, Excalidraw will focus on the existing tab if the file is already open. Enabling this setting overrides 'Reuse Adjacent Pane' when the file is already open except for the 'Open the back-of-the-note of the selected excalidraw image' command palette action.",SECOND_ORDER_LINKS_NAME:"Show second-order links",SECOND_ORDER_LINKS_DESC:"Show links when clicking on a link in Excalidraw. Second-order link are backlinks pointing to the link being clicked. When using image icons to connect similar notes, second order links allow you to get to related notes in one click instead of two. See YT Short to understand.",ADJACENT_PANE_NAME:"Reuse adjacent pane",ADJACENT_PANE_DESC:`When ${labelCTRL()}+${labelALT()} clicking a link in Excalidraw, by default the plugin will open the link in a new pane. Turning this setting on, Excalidraw will first look for an existing pane, and try to open the link there. Excalidraw will look for the other workspace pane based on your focus/navigation history, i.e. the workpane that was active before you activated Excalidraw.`,MAINWORKSPACE_PANE_NAME:"Open in main workspace",MAINWORKSPACE_PANE_DESC:`When ${labelCTRL()}+${labelALT()} clicking a link in Excalidraw, by default the plugin will open the link in a new pane in the current active window. Turning this setting on, Excalidraw will open the link in an existing or new pane in the main workspace. `,LINK_BRACKETS_NAME:"Show [[brackets]] around links",LINK_BRACKETS_DESC:`In PREVIEW mode, when parsing Text Elements, place brackets around links. You can override this setting for a specific drawing by adding ${FRONTMATTER_KEYS["link-brackets"].name}: true/false to the file's frontmatter.`,LINK_PREFIX_NAME:"Link prefix",LINK_PREFIX_DESC:`In PREVIEW mode, if the Text Element contains a link, precede the text with these characters. You can override this setting for a specific drawing by adding ${FRONTMATTER_KEYS["link-prefix"].name}: "📍 " to the file's frontmatter.`,URL_PREFIX_NAME:"URL prefix",URL_PREFIX_DESC:`In PREVIEW mode, if the Text Element contains a URL link, precede the text with these characters. You can override this setting for a specific drawing by adding ${FRONTMATTER_KEYS["url-prefix"].name}: "🌐 " to the file's frontmatter.`,PARSE_TODO_NAME:"Parse todo",PARSE_TODO_DESC:"Convert '- [ ] ' and '- [x] ' to checkbox and tick in the box.",TODO_NAME:"Open TODO icon",TODO_DESC:"Icon to use for open TODO items",DONE_NAME:"Completed TODO icon",DONE_DESC:"Icon to use for completed TODO items",HOVERPREVIEW_NAME:`Hover preview without pressing the ${labelCTRL()} key`,HOVERPREVIEW_DESC:`Toggle ON: In Exalidraw view mode the hover preview for [[wiki links]] will be shown immediately, without the need to hold the ${labelCTRL()} key. In Excalidraw normal mode, the preview will be shown immediately only when hovering the blue link icon in the top right of the element.
Toggle OFF: Hover preview is shown only when you hold the ${labelCTRL()} key while hovering the link.`,LINKOPACITY_NAME:"Opacity of link icon",LINKOPACITY_DESC:"Opacity of the link indicator icon in the top right corner of an element. 1 is opaque, 0 is transparent.",LINK_CTRL_CLICK_NAME:`${labelCTRL()}+CLICK on text with [[links]] or [](links) to open them`,LINK_CTRL_CLICK_DESC:`You can turn this feature off if it interferes with default Excalidraw features you want to use. If this is turned off, you can either use ${labelCTRL()} + ${labelMETA()} or the link indicator in the top right of the element to open links.`,TRANSCLUSION_WRAP_NAME:"Overflow wrap behavior of transcluded text",TRANSCLUSION_WRAP_DESC:"Number specifies the character count where the text should be wrapped. Set the text wrapping behavior of transcluded text. Turn this ON to force-wrap text (i.e. no overflow), or OFF to soft-wrap text (at the nearest whitespace).",TRANSCLUSION_DEFAULT_WRAP_NAME:"Transclusion word wrap default",TRANSCLUSION_DEFAULT_WRAP_DESC:"You can manually set/override word wrapping length using the `![[page#^block]]{NUMBER}` format. Normally you will not want to set a default, because if you transclude text inside a sticky note, then Excalidraw will automatically take care of word wrapping. Set this value to `0` if you do not want to set a default. ",PAGE_TRANSCLUSION_CHARCOUNT_NAME:"Page transclusion max char count",PAGE_TRANSCLUSION_CHARCOUNT_DESC:"The maximum number of characters to display from the page when transcluding an entire page with the ![[markdown page]] format.",QUOTE_TRANSCLUSION_REMOVE_NAME:"Quote translusion: remove leading '> ' from each line",QUOTE_TRANSCLUSION_REMOVE_DESC:"Remove the leading '> ' from each line of the transclusion. This will improve readability of quotes in text only transclusions
Toggle ON: Remove leading '> '
Toggle OFF: Do not remove leading '> ' (note it will still be removed from the first row due to Obsidian API functionality)",GET_URL_TITLE_NAME:"Use iframely to resolve page title",GET_URL_TITLE_DESC:"Use the http://iframely.server.crestify.com/iframely?url= to get title of page when dropping a link into Excalidraw",PDF_TO_IMAGE:"PDF to Image",PDF_TO_IMAGE_SCALE_NAME:"PDF to Image conversion scale",PDF_TO_IMAGE_SCALE_DESC:"Sets the resolution of the image that is generated from the PDF page. Higher resolution will result in bigger images in memory and consequently a higher load on your system (slower performance), but sharper image. Additionally, if you want to copy PDF pages (as images) to Excalidraw.com, the bigger image size may result in exceeding the 2MB limit on Excalidraw.com.",EMBED_TOEXCALIDRAW_HEAD:"Embed files into Excalidraw",EMBED_TOEXCALIDRAW_DESC:"In the Embed Files section of Excalidraw Settings, you can configure how various files are embedded into Excalidraw. This includes options for embedding interactive markdown files, PDFs, and markdown files as images.",MD_HEAD:"Embed markdown into Excalidraw as image",MD_EMBED_CUSTOMDATA_HEAD_NAME:"Interactive Markdown Files",MD_EMBED_CUSTOMDATA_HEAD_DESC:'The below settings will only effect future embeds. Current embeds remain unchanged. The theme setting of embedded frames is under the "Excalidraw appearance and behavior" section.',MD_EMBED_SINGLECLICK_EDIT_NAME:"Single click to edit embedded markdown",MD_EMBED_SINGLECLICK_EDIT_DESC:"Single click on an embedded markdown file to edit it. When turned off, the markdown file will first open in preview mode, then switch to edit mode when you click on it again.",MD_TRANSCLUDE_WIDTH_NAME:"Default width of a transcluded markdown document",MD_TRANSCLUDE_WIDTH_DESC:"The width of the markdown page. This affects the word wrapping when transcluding longer paragraphs, and the width of the image element. You can override the default width of an embedded file using the [[filename#heading|WIDTHxMAXHEIGHT]] syntax in markdown view mode under embedded files.",MD_TRANSCLUDE_HEIGHT_NAME:"Default maximum height of a transcluded markdown document",MD_TRANSCLUDE_HEIGHT_DESC:"The embedded image will be as high as the markdown text requires, but not higher than this value. You can override this value by editing the embedded image link in markdown view mode with the following syntax [[filename#^blockref|WIDTHxMAXHEIGHT]].",MD_DEFAULT_FONT_NAME:"The default font typeface to use for embedded markdown files.",MD_DEFAULT_FONT_DESC:'Set this value to "Virgil" or "Cascadia" or the filename of a valid .ttf, .woff, or .woff2 font e.g. MyFont.woff2 You can override this setting by adding the following frontmatter-key to the embedded markdown file: excalidraw-font: font_or_filename',MD_DEFAULT_COLOR_NAME:"The default font color to use for embedded markdown files.",MD_DEFAULT_COLOR_DESC:'Set this to any valid css color name e.g. "steelblue" (color names), or a valid hexadecimal color e.g. "#e67700", or any other valid css color string. You can override this setting by adding the following frontmatter-key to the embedded markdown file: excalidraw-font-color: steelblue',MD_DEFAULT_BORDER_COLOR_NAME:"The default border color to use for embedded markdown files.",MD_DEFAULT_BORDER_COLOR_DESC:'Set this to any valid css color name e.g. "steelblue" (color names), or a valid hexadecimal color e.g. "#e67700", or any other valid css color string. You can override this setting by adding the following frontmatter-key to the embedded markdown file: excalidraw-border-color: gray. Leave empty if you don\'t want a border. ',MD_CSS_NAME:"CSS file",MD_CSS_DESC:`The filename of the CSS to apply to markdown embeds. Provide the filename with extension (e.g. 'md-embed.css'). The css file may also be a plain markdown file (e.g. 'md-embed-css.md'), just make sure the content is written using valid css syntax. If you need to look at the HTML code you are applying the CSS to, then open Obsidian Developer Console (${DEVICE.isIOS||DEVICE.isMacOS?"CMD+OPT+i":"CTRL+SHIFT+i"}) and type in the following command: "ExcalidrawAutomate.mostRecentMarkdownSVG". This will display the most recent SVG generated by Excalidraw. Setting the font-family in the css is has limitations. By default only your operating system's standard fonts are available (see README for details). You can add one custom font beyond that using the setting above. You can override this css setting by adding the following frontmatter-key to the embedded markdown file: "excalidraw-css: css_file_in_vault|css-snippet".`,EMBED_HEAD:"Embedding Excalidraw into your Notes and Exporting",EMBED_DESC:'In the "Embed & Export" settings, you can configure how images and Excalidraw drawings are embedded and exported within your documents. Key settings include choosing the image type for markdown preview (such as Native SVG or PNG), specifying the type of file to insert into the document (original Excalidraw, PNG, or SVG), and managing image caching for embedding in markdown. You can also control image sizing, whether to embed drawings using wiki links or markdown links, and adjust settings related to image themes, background colors, and Obsidian integration. \n Additionally, there are settings for auto-export, which automatically generates SVG and/or PNG files to match the title of your Excalidraw drawings, keeping them in sync with file renames and deletions.',EMBED_CANVAS:"Obsidian Canvas support",EMBED_CANVAS_NAME:"Immersive embedding",EMBED_CANVAS_DESC:"Hide canvas node border and background when embedding an Excalidraw drawing to Canvas. Note that for a full transparent background for your image, you will still need to configure Excalidraw to export images with transparent background.",EMBED_CACHING:"Image caching and rendering optimization",RENDERING_CONCURRENCY_NAME:"Image rendering concurrency",RENDERING_CONCURRENCY_DESC:"Number of parallel workers to use for image rendering. Increasing this number will speed up the rendering process, but may slow down the rest of the system. The default value is 3. You can increase this number if you have a powerful system.",EXPORT_SUBHEAD:"Export Settings",EMBED_SIZING:"Image sizing",EMBED_THEME_BACKGROUND:"Image theme and background color",EMBED_IMAGE_CACHE_NAME:"Cache images for embedding in markdown",EMBED_IMAGE_CACHE_DESC:"Cache images for embedding in markdown. This will speed up the embedding process, but in case you compose images of several sub-component drawings, the embedded image in Markdown won't update until you open the drawing and save it to trigger an update of the cache.",SCENE_IMAGE_CACHE_NAME:"Cache nested Excalidraws in Scene",SCENE_IMAGE_CACHE_DESC:"Cache nested Excalidraws in the Scene for faster scene rendering. This will speed up the rendering process, especially if you have deeply nested Excalidraws in your scene. Excalidraw will try to intelligently identify if any children of a nested Excalidraw have changed and will update the cache accordingly. You may want to turn this off, in case you are suspecting that the cache is not updating properly.",EMBED_IMAGE_CACHE_CLEAR:"Purge Cache",BACKUP_CACHE_CLEAR:"Purge Backups",BACKUP_CACHE_CLEAR_CONFIRMATION:"This action will delete all Excalidraw drawing backups. Backups are used as a safety measure in case your drawing file gets damaged. Each time you open Obsidian the plugin automatically deletes backups for files that no longer exist in your Vault. Are you sure you want to clear all backups?",EMBED_REUSE_EXPORTED_IMAGE_NAME:"If found, use the already exported image for preview",EMBED_REUSE_EXPORTED_IMAGE_DESC:"This setting works in conjunction with the Auto-export SVG/PNG setting. If an exported image that matches the file name of the drawing is available, use that image instead of generating a preview image on the fly. This will result in faster previews especially when you have many embedded objects in the drawing, however, it may happen that your latest changes are not displayed and that the image will not automatically match your Obsidian theme in case you have changed the Obsidian theme since the export was created. This setting only applies to embedding images into markdown documents. For a number of reasons, the same approach cannot be used to expedite the loading of drawings with many embedded objects. See demonstration here.",EMBED_PREVIEW_IMAGETYPE_NAME:"Image type in markdown preview",EMBED_PREVIEW_IMAGETYPE_DESC:"Native SVG: High Image Quality. Embedded Websites, YouTube videos, Obsidian Links, and external images embedded via a URL will all work. Embedded Obsidian pages will not
SVG Image: High Image Quality. Embedded elements and images embedded via URL only have placeholders, links don't work
PNG Image: Lower Image Quality, but in some cases better performance with large drawings. Embedded elements and images embedded via URL only have placeholders, links don't work. Also some of the image block referencing features do not work with PNG embeds.",PREVIEW_MATCH_OBSIDIAN_NAME:"Excalidraw preview to match Obsidian theme",PREVIEW_MATCH_OBSIDIAN_DESC:"Image preview in documents should match the Obsidian theme. If enabled, when Obsidian is in dark mode, Excalidraw images will render in dark mode. When Obsidian is in light mode, Excalidraw will render light mode as well. You may want to switch 'Export image with background' off for a more Obsidian-integrated look and feel.",EMBED_WIDTH_NAME:"Default width of embedded (transcluded) image",EMBED_WIDTH_DESC:"The default width of an embedded drawing. This applies to live preview edit and reading mode, as well as to hover previews. You can specify a custom width when embedding an image using the ![[drawing.excalidraw|100]] or [[drawing.excalidraw|100x100]] format.",EMBED_HEIGHT_NAME:"Default height of embedded (transcluded) image",EMBED_HEIGHT_DESC:"The default height of an embedded drawing. This applies to live preview edit and reading mode, as well as to hover previews. You can specify a custom height when embedding an image using the ![[drawing.excalidraw|100]] or [[drawing.excalidraw|100x100]] format.",EMBED_TYPE_NAME:"Type of file to insert into the document",EMBED_TYPE_DESC:"When you embed an image into a document using the command palette this setting will specify if Excalidraw should embed the original Excalidraw file or a PNG or an SVG copy. You need to enable auto-export PNG / SVG (see below under Export Settings) for those image types to be available in the dropdown. For drawings that do not have a a corresponding PNG or SVG readily available the command palette action will insert a broken link. You need to open the original drawing and initiate export manually. This option will not autogenerate PNG/SVG files, but will simply reference the already existing files.",EMBED_MARKDOWN_COMMENT_NAME:"Embed link to drawing as comment",EMBED_MARKDOWN_COMMENT_DESC:"Embed the link to the original Excalidraw file as a markdown link under the image, e.g.:%%[[drawing.excalidraw]]%%.
Instead of adding a markdown comment you may also select the embedded SVG or PNG line and use the command palette action: 'Excalidraw: Open Excalidraw drawing' to open the drawing.",EMBED_WIKILINK_NAME:"Embed Drawing using Wiki link",EMBED_WIKILINK_DESC:"Toggle ON: Excalidraw will embed a [[wiki link]].
Toggle OFF: Excalidraw will embed a [markdown](link).",EXPORT_PNG_SCALE_NAME:"PNG export image scale",EXPORT_PNG_SCALE_DESC:"The size-scale of the exported PNG image",EXPORT_BACKGROUND_NAME:"Export image with background",EXPORT_BACKGROUND_DESC:"If turned off, the exported image will be transparent.",EXPORT_PADDING_NAME:"Image Padding",EXPORT_PADDING_DESC:"The padding (in pixels) around the exported SVG or PNG image. Padding is set to 0 for clippedFrame references.If you have curved lines close to the edge of the image they might get cropped during image export. You can increase this value to avoid cropping. You can also override this setting at a file level by adding the excalidraw-export-padding: 5 frontmatter key.",EXPORT_THEME_NAME:"Export image with theme",EXPORT_THEME_DESC:"Export the image matching the dark/light theme of your drawing. If turned off, drawings created in dark mode will appear as they would in light mode.",EXPORT_EMBED_SCENE_NAME:"Embed scene in exported image",EXPORT_EMBED_SCENE_DESC:"Embed Excalidraw scene in exported image. Can be overridden at a file level by adding the excalidraw-export-embed-scene: true/false frontmatter key. The setting only takes effect the next time you (re)open drawings.",PDF_EXPORT_SETTINGS:"PDF Export Settings",EXPORT_HEAD:"Auto-export Settings",EXPORT_SYNC_NAME:"Keep the .SVG and/or .PNG filenames in sync with the drawing file",EXPORT_SYNC_DESC:"When turned on, the plugin will automatically update the filename of the .SVG and/or .PNG files when the drawing in the same folder (and same name) is renamed. The plugin will also automatically delete the .SVG and/or .PNG files when the drawing in the same folder (and same name) is deleted. ",EXPORT_SVG_NAME:"Auto-export SVG",EXPORT_SVG_DESC:"Automatically create an SVG export of your drawing matching the title of your file. The plugin will save the *.SVG file in the same folder as the drawing. Embed the .svg file into your documents instead of Excalidraw making you embeds platform independent. While the auto-export switch is on, this file will get updated every time you edit the Excalidraw drawing with the matching name. You can override this setting on a file level by adding the excalidraw-autoexport frontmatter key. Valid values for this key are none,both,svg, and png.",EXPORT_PNG_NAME:"Auto-export PNG",EXPORT_PNG_DESC:"Same as the auto-export SVG, but for *.PNG",EXPORT_BOTH_DARK_AND_LIGHT_NAME:"Export both dark- and light-themed image",EXPORT_BOTH_DARK_AND_LIGHT_DESC:"When enabled, Excalidraw will export two files instead of one: filename.dark.png, filename.light.png and/or filename.dark.svg and filename.light.svg
Double files will be exported both if auto-export SVG or PNG (or both) are enabled, as well as when clicking export on a single image.",COMPATIBILITY_HEAD:"Compatibility features",COMPATIBILITY_DESC:"You should only enable these features if you have a strong reason for wanting to work with excalidraw.com files instead of markdown files. Many of the plugin features are not supported on legacy files. Typical usecase would be if you use set your vault up on top of a Visual Studio Code project folder and you have .excalidraw drawings you want to access from Visual Studio Code as well. Another usecase might be using Excalidraw in Logseq and Obsidian in parallel.",DUMMY_TEXT_ELEMENT_LINT_SUPPORT_NAME:"Linter compatibility",DUMMY_TEXT_ELEMENT_LINT_SUPPORT_DESC:"Excalidraw is sensitive to the file structure below # Excalidraw Data. Automatic linting of documents can create errors in Excalidraw Data. While I've made some effort to make the data loading resilient to lint changes, this solution is not foolproof.
The best is to avoid linting or otherwise automatically changing Excalidraw documents using different plugins.
Use this setting if for good reasons you have decided to ignore my recommendation and configured linting of Excalidraw files.
The ## Text Elements section is sensitive to empty lines. A common linting approach is to add an empty line after section headings. In case of Excalidraw this will break/change the first text element in your drawing. To overcome this, you can enable this setting. When enabled, Excalidraw will add a dummy element to the beginning of ## Text Elements that the linter can safely modify.",PRESERVE_TEXT_AFTER_DRAWING_NAME:"Zotero and Footnotes compatibility",PRESERVE_TEXT_AFTER_DRAWING_DESC:"Preserve text after the ## Drawing section of the markdown file. This may have a very slight performance impact when saving very large drawings.",DEBUGMODE_NAME:"Enable debug messages",DEBUGMODE_DESC:"I recommend restarting Obsidian after enabling/disabling this setting. This enable debug messages in the console. This is useful for troubleshooting issues. If you are experiencing problems with the plugin, please enable this setting, reproduce the issue, and include the console log in the issue you raise on GitHub",SLIDING_PANES_NAME:"Sliding panes plugin support",SLIDING_PANES_DESC:"Need to restart Obsidian for this change to take effect.
If you use the Sliding Panes plugin you can enable this setting to make Excalidraw drawings work with the Sliding Panes plugin.
Note, that Excalidraw Sliding Panes support causes compatibility issues with Obsidian Workspaces.
Note also, that the 'Stack Tabs' feature is now available in Obsidian, providing native support for most of the Sliding Panes functionality.",EXPORT_EXCALIDRAW_NAME:"Auto-export Excalidraw",EXPORT_EXCALIDRAW_DESC:"Same as the auto-export SVG, but for *.Excalidraw",SYNC_EXCALIDRAW_NAME:"Sync *.excalidraw with *.md version of the same drawing",SYNC_EXCALIDRAW_DESC:"If the modified date of the *.excalidraw file is more recent than the modified date of the *.md file then update the drawing in the .md file based on the .excalidraw file",COMPATIBILITY_MODE_NAME:"New drawings as legacy files",COMPATIBILITY_MODE_DESC:"⚠️ Enable this only if you know what you are doing. In 99.9% of the cases you DO NOT want this on. By enabling this feature drawings you create with the ribbon icon, the command palette actions, and the file explorer are going to be all legacy *.excalidraw files. This setting will also turn off the reminder message when you open a legacy file for editing.",MATHJAX_NAME:"MathJax (LaTeX) javascript library host",MATHJAX_DESC:"If you are using LaTeX equations in Excalidraw, then the plugin needs to load a javascript library for that. Some users are unable to access certain host servers. If you are experiencing issues, try changing the host here. You may need to restart Obsidian after closing settings, for this change to take effect.",LATEX_DEFAULT_NAME:"Default LaTeX formula for new equations",LATEX_DEFAULT_DESC:"Leave empty if you don't want a default formula. You can add default formatting here such as \\color{white}.",LATEX_PREAMBLE_NAME:"LaTeX preamble file (CasE SEnSiTivE!)",LATEX_PREAMBLE_DESC:"Full filepath to the preamble file, leave empty for default. If the file doesn't exist this option will be ignored.
Important: Requires obsidian reload after change to take effect!",NONSTANDARD_HEAD:"Non-Excalidraw.com supported features",NONSTANDARD_DESC:'These settings in the "Non-Excalidraw.com Supported Features" section provide customization options beyond the default Excalidraw.com features. These features are not available on excalidraw.com. When exporting the drawing to Excalidraw.com these features will appear different.\n You can configure the number of custom pens displayed next to the Obsidian Menu on the canvas, allowing you to choose from a range of options. Additionally, you can enable a local font option, which adds a local font to the list of fonts on the element properties panel for text elements. ',RENDER_TWEAK_HEAD:"Rendering tweaks",MAX_IMAGE_ZOOM_IN_NAME:"Maximum image zoom in resolution",MAX_IMAGE_ZOOM_IN_DESC:"To save on memory and because Apple Safari (Obsidian on iOS) has some hard-coded limitations, Excalidraw.com limits the max resolution of images and large objects when zooming in. You can override this limitation using a multiplicator. This means you are multiplying the limit set by default in Excalidraw, the larger the multiplier the better the image zoom in resolution will be, and the more memory it will consume. I recommend playing with multiple values for this setting. You know you've hit the wall, when zooming in to a larger PNG image suddenly the image disappears from view. The default value is 1. The setting has no effect on iOS.",CUSTOM_PEN_HEAD:"Custom pens",CUSTOM_PEN_NAME:"Number of custom pens",CUSTOM_PEN_DESC:"You will see these pens next to the Obsidian Menu on the canvas. You can customize the pens on the canvas by long-pressing the pen button.",EXPERIMENTAL_HEAD:"Miscellaneous features",EXPERIMENTAL_DESC:"These miscellaneous features in Excalidraw include options for setting default LaTeX formulas for new equations, enabling a Field Suggester for autocompletion, displaying type indicators for Excalidraw files, enabling immersive image embedding in live preview editing mode, and experimenting with Taskbone Optical Character Recognition for text extraction from images and drawings. Users can also enter a Taskbone API key for extended usage of the OCR service.",EA_HEAD:"Excalidraw Automate",EA_DESC:"ExcalidrawAutomate is a scripting and automation API for Excalidraw. Unfortunately, the documentation of the API is sparse. I recommend reading the ExcalidrawAutomate.d.ts file, visiting the ExcalidrawAutomate How-to page - though the information here has not been updated for a long while -, and finally to enable the field suggester below. The field suggester will show you the available functions, their parameters and short description as you type. The field suggester is the most up-to-date documentation of the API.",FIELD_SUGGESTER_NAME:"Enable Field Suggester",FIELD_SUGGESTER_DESC:"Field Suggester borrowed from Breadcrumbs and Templater plugins. The Field Suggester will show an autocomplete menu when you type excalidraw- or ea. with function description as hints on the individual items in the list.",STARTUP_SCRIPT_NAME:"Startup script",STARTUP_SCRIPT_DESC:"If set, excalidraw will execute the script at plugin startup. This is useful if you want to set any of the Excalidraw Automate hooks. The startup script is a markdown file that should contain the javascript code you want to execute when Excalidraw starts.",STARTUP_SCRIPT_BUTTON_CREATE:"Create startup script",STARTUP_SCRIPT_BUTTON_OPEN:"Open startup script",STARTUP_SCRIPT_EXISTS:"Startup script file already exists",FILETYPE_NAME:"Display type (✏️) for excalidraw.md files in File Explorer",FILETYPE_DESC:"Excalidraw files will receive an indicator using the emoji or text defined in the next setting.",FILETAG_NAME:"Set the type indicator for excalidraw.md files",FILETAG_DESC:"The text or emoji to display as type indicator.",INSERT_EMOJI:"Insert an emoji",LIVEPREVIEW_NAME:"Immersive image embedding in live preview editing mode",LIVEPREVIEW_DESC:"Turn this on to support image embedding styles such as ![[drawing|width|style]] in live preview editing mode. The setting will not affect the currently open documents. You need close the open documents and re-open them for the change to take effect.",FADE_OUT_EXCALIDRAW_MARKUP_NAME:"Fade out Excalidraw markup",FADE_OUT_EXCALIDRAW_MARKUP_DESC:"In Markdown view mode, the section after the markdown comment %% fades out. The text is still there, but the visual clutter is reduced. Note, you can place the %% in the line right above # Text Elements, in this case the entire drawing markdown will fade out including # Text Elements. The side effect is you won't be able to block reference text in other markdown notes, that is after the %% comment section. This is seldom an issue. Should you want to edit the Excalidraw markdown script, simply switch to markdown view mode and temporarily remove the %% comment.",EXCALIDRAW_PROPERTIES_NAME:"Load Excalidraw Properties into Obsidian Suggester",EXCALIDRAW_PROPERTIES_DESC:"Toggle this setting to load Excalidraw document properties into Obsidian's property suggester at plugin startup. Enabling this feature simplifies the use of Excalidraw front matter properties, allowing you to leverage many powerful settings. If you prefer not to load these properties automatically, you can disable this feature, but you will need to manually remove any unwanted properties from the suggester. Note that turning on this setting requires restarting the plugin as properties are loaded at startup.",FONTS_HEAD:"Fonts",FONTS_DESC:"Configure local fontfaces and downloaded CJK fonts for Excalidraw.",CUSTOM_FONT_HEAD:"Local font",ENABLE_FOURTH_FONT_NAME:"Enable local font option",ENABLE_FOURTH_FONT_DESC:"Enabling this option will add a local font to the font list in the properties panel for text elements. Be aware that using this local font may compromise platform independence. Files using the custom font might render differently when opened in a different vault or at a later time, depending on the font settings. Additionally, the 4th font will default to the system font on excalidraw.com or other Excalidraw versions.",FOURTH_FONT_NAME:"Local font file",FOURTH_FONT_DESC:"Select a .otf, .ttf, .woff, or .woff2 font file from your vault to use as the local font. If no file is selected, Excalidraw will default to the Virgil font. For optimal performance, it is recommended to use a .woff2 file, as Excalidraw will encode only the necessary glyphs when exporting images to SVG. Other font formats will embed the entire font in the exported file, potentially resulting in significantly larger file sizes.",OFFLINE_CJK_NAME:"Offline CJK font support",OFFLINE_CJK_DESC:'Changes you make here will only take effect after restarting Obsidian.
\n Excalidraw.com offers handwritten CJK fonts. By default these fonts are not included in the plugin locally, but are served from the Internet. \n If you prefer to keep Excalidraw fully local, allowing it to work without Internet access you can download the necessary font files from GitHub.\n After downloading, unzip the contents into a folder within your Vault.
\n Pre-loading fonts will impact startup performance. For this reason you can select which fonts to load.',CJK_ASSETS_FOLDER_NAME:"CJK Font Folder (cAsE sENsiTIvE!)",CJK_ASSETS_FOLDER_DESC:'You can set the location of the CJK fonts folder here. For example, you may choose to place it under Excalidraw/CJK Fonts.
\n Important: Do not set this folder to the Vault root! Do not put other fonts in this folder.
\n Note: If you\'re using Obsidian Sync and want to synchronize these font files across your devices, ensure that Obsidian Sync is set to synchronize "All other file types".',LOAD_CHINESE_FONTS_NAME:"Load Chinese fonts from file at startup",LOAD_JAPANESE_FONTS_NAME:"Load Japanese fonts from file at startup",LOAD_KOREAN_FONTS_NAME:"Load Korean fonts from file at startup",SCRIPT_SETTINGS_HEAD:"Settings for installed Scripts",SCRIPT_SETTINGS_DESC:"Some of the Excalidraw Automate Scripts include settings. Settings are organized by script. Settings will only become visible in this list after you have executed the newly downloaded script once.",TASKBONE_HEAD:"Taskbone Optical Character Recognition",TASKBONE_DESC:"This is an experimental integration of optical character recognition into Excalidraw. Please note, that taskbone is an independent external service not provided by Excalidraw, nor the Excalidraw-Obsidian plugin project. The OCR service will grab legible text from freedraw lines and embedded pictures on your canvas and place the recognized text in the frontmatter of your drawing as well as onto clipboard. Having the text in the frontmatter will enable you to search in Obsidian for the text contents of these. Note, that the process of extracting the text from the image is not done locally, but via an online API. The taskbone service stores the image on its servers only as long as necessary for the text extraction. However, if this is a dealbreaker, then please don't use this feature.",TASKBONE_ENABLE_NAME:"Enable Taskbone",TASKBONE_ENABLE_DESC:"By enabling this service your agree to the Taskbone Terms and Conditions and the Privacy Policy.",TASKBONE_APIKEY_NAME:"Taskbone API Key",TASKBONE_APIKEY_DESC:"Taskbone offers a free service with a reasonable number of scans per month. If you want to use this feature more frequently, or you want to support the developer of Taskbone (as you can imagine, there is no such thing as 'free', providing this awesome OCR service costs some money to the developer of Taskbone), you can purchase a paid API key from taskbone.com. In case you have purchased a key, simply overwrite this auto generated free-tier API-key with your paid key.",HOTKEY_PRESS_COMBO_NANE:"Press your hotkey combination",HOTKEY_PRESS_COMBO_DESC:"Please press the desired key combination",HOTKEY_BUTTON_ADD_OVERRIDE:"Add New Override",HOTKEY_BUTTON_REMOVE:"Remove",SELECT_FILE:"Select a file then press enter.",SELECT_COMMAND:"Select a command then press enter.",SELECT_FILE_WITH_OPTION_TO_SCALE:`Select a file then press ENTER, or ${labelSHIFT()}+${labelMETA()}+ENTER to insert at 100% scale.`,NO_MATCH:"No file matches your query.",NO_MATCHING_COMMAND:"No command matches your query.",SELECT_FILE_TO_LINK:"Select the file you want to insert the link for.",SELECT_COMMAND_PLACEHOLDER:"Select the command you want to insert the link for.",SELECT_DRAWING:"Select the image or drawing you want to insert",TYPE_FILENAME:"Type name of drawing to select.",SELECT_FILE_OR_TYPE_NEW:"Select existing drawing or type name of a new drawing then press Enter.",SELECT_TO_EMBED:"Select the drawing to insert into active document.",SELECT_MD:"Select the markdown document you want to insert",SELECT_PDF:"Select the PDF document you want to insert",PDF_PAGES_HEADER:"Pages to load?",PDF_PAGES_DESC:"Format: 1, 3-5, 7, 9-11",TYPE_SECTION:"Type section name to select.",SELECT_SECTION_OR_TYPE_NEW:"Select existing section or type name of a new section then press Enter.",INVALID_SECTION_NAME:"Invalid section name.",EMPTY_SECTION_MESSAGE:"Type the Section Name and hit enter to create a new Section",INFINITE_LOOP_WARNING:"EXCALIDRAW WARNING\nAborted loading embedded images due to infinite loop in file:\n",SCRIPT_EXECUTION_ERROR:"Script execution error. Please find error message on the developer console.",MARKER_FRAME_RENDERING_DISABLED_NOTICE:"There are hidden marker-frames in the scene.",LOAD_FROM_BACKUP:"Excalidraw file was corrupted. Loading from backup file.",FONT_LOAD_SLOW:"Loading Fonts...\n\n This is taking longer than expected. If this delay occurs regularly then you may download the fonts locally to your Vault. \n\n(click=dismiss, right-click=Info)",FONT_INFO_TITLE:"Starting v2.5.3 fonts load from the Internet",FONT_INFO_DETAILED:`\n main.js. CJK fonts will be loaded from the internet by default.\n This typically shouldn't cause issues as Obsidian caches these files after first use.\n Instructions:
\n \n
\n Excalidraw/${CJK_FONTS}; folder names are cAse-senSITive).For Obsidian Sync Users:
\n Note:
\n main.js is supported, which leads to large files and slow startup times for complex plugins like Excalidraw. \n I apologize for the inconvenience.\n manifest.json updated.",VERSION_MISMATCH_OPTIONS:"Options:
1. Re-download the plugin (recommended).
2. Ignore for now.",VERSION_MISMATCH_NOTE:"Note: Updating version info manually may affect tools that read manifest.json directly (e.g. Plugin Update Tracker, BRAT) until a full reinstall.",VERSION_MISMATCH_DISABLE_NAME:"Disable future mismatch warnings",VERSION_MISMATCH_DISABLE_DESC:"You can re-enable this under: Settings → Excalidraw → Basic → Warn about incomplete plugin updates.",VERSION_MISMATCH_REDOWNLOAD:"Re-download plugin",VERSION_MISMATCH_IGNORE:"Ignore",INLINE_HINT:"Type [[ to search and insert a link",SUGGESTION_NOMATCH:"No matches found"};let locale=null;function loadLocale(lang){if("zh"===lang&&(lang="zh-cn"),Object.keys(PLUGIN_LANGUAGES).includes(lang)){const decompressed=LZString.decompressFromBase64(PLUGIN_LANGUAGES[lang]);let x={};return eval(decompressed),x}return en}function t$d(e){return locale||(locale=loadLocale(LOCALE)),locale&&locale[e]||en[e]}var PreviewImageType;!function(e){e.PNG="PNG",e.SVGIMG="SVGIMG",e.SVG="SVG"}(PreviewImageType||(PreviewImageType={}));var t$c={d:(e,t)=>{for(var i in t)t$c.o(t,i)&&!t$c.o(e,i)&&Object.defineProperty(e,i,{enumerable:!0,get:t[i]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t)},r$e={};t$c.d(r$e,{QA:()=>w$1,ZP:()=>j$1,qt:()=>x$1,MX:()=>$});const e$d={red:"hsl(0, 100%, 50%)",orange:"hsl(30, 100%, 50%)",yellow:"hsl(60, 100%, 50%)","lime green":"hsl(90, 100%, 50%)",green:"hsl(120, 100%, 50%)","blue green":"hsl(150, 100%, 50%)",cyan:"hsl(180, 100%, 50%)","sky blue":"hsl(210, 100%, 50%)",blue:"hsl(240, 100%, 50%)",purple:"hsl(270, 100%, 50%)",magenta:"hsl(300, 100%, 50%)",pink:"hsl(330, 100%, 50%)"};function s$a(e,t,i){return Math.max(e,Math.min(t,i))}function n$c(e,t){return+e.toFixed(t>=0?t:0)}function a$c(e){const t=e%360;return t<0?t+360:t}function i$b(e){return void 0!==e?s$a(0,e,1):1}function o$b(e){return Math.floor(Math.random()*e)}function h$4(e){var t;const{Cmin:i,Cmax:a,H:n,delta:r}=function(e){const[t,i,a]=Object.values(e).map((e=>e/255)),n=Math.max(t,i,a),r=Math.min(t,i,a),s=n-r;return{Cmin:r,Cmax:n,H:0===s?0:n===t?(i-a)/s%6:n===i?(a-t)/s+2:(t-i)/s+4,delta:s}}(e),s=(a+i)/2,o=0===r?0:r/(1-Math.abs(2*s-1));return{h:a$c(60*n),s:100*o,l:100*s,a:null!==(t=e.a)&&void 0!==t?t:1}}function u$8(e){const{h:t,s:i,l:a,a:n}=e,r=a/100,s=i/100,o=(1-Math.abs(2*r-1))*s,l=o*(1-Math.abs(t/60%2-1)),c=r-o/2,d=t<60||300<=t&&t<360?o:120<=t&&t<240?0:l,h=240<=t&&t<360?0:60<=t&&t<180?o:l,p=t<120?0:180<=t&&t<300?o:l,[u,m,g]=[d,h,p].map((e=>255*(e+c)));return{r:u,g:m,b:g,a:null!=n?n:1}}function l$5(e){const[t,i,a,n]=Object.values(e).map((e=>parseInt(e,16)));return{r:t,g:i,b:a,a:n?n/255:1}}const c$a=/^#?([\da-f])([\da-f])([\da-f])([\da-f])?$|^#?([\da-f]{2})([\da-f]{2})([\da-f]{2})?([\da-f]{2})?$/gi,f$3=/hsla?\s*\(\s*([+-]?\d*\.?\d+%?)\s*,?\s*(\d*\.?\d+%?)\s*,?\s*(\d*\.?\d+%?)\s*,?\s*\/?\s*?(\d*\.?\d+%?)?\s*\)/gi;function d$2({h:e,s:t,l:i,a:a}){return[u$8({h:a$c(e),s:s$a(0,t,100),l:s$a(0,i,100),a:i$b(a)}),"hsl"]}const g$2=/rgba?\s*\(\s*(\d*\.?\d+%?)\s*,?\s*(\d*\.?\d+%?)\s*,?\s*(\d*\.?\d+%?)\s*,?\s*\/?\s*?(\d*\.?\d+%?)?\s*\)/gi;function b$5({r:e,g:t,b:i,a:a}){return[{r:s$a(0,e,255),g:s$a(0,t,255),b:s$a(0,i,255),a:i$b(a)},"rgb"]}var p$3,v$2,m$1=function(e,t,i,a,n){if("m"===a)throw new TypeError("Private method is not writable");if("a"===a&&!n)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!n:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===a?n.call(e,i):n?n.value=i:t.set(e,i),i},y$1=function(e,t,i,a){if("a"===i&&!a)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!a:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===i?a:"a"===i?a.call(e):a?a.value:t.get(e)};class w$1{constructor(e){var t,i;p$3.set(this,{r:0,g:0,b:0,a:1}),v$2.set(this,"rgb");const a=w$1.Parsers.map((t=>t(e))).find((e=>"invalid"!==e[1]));a?(t=this,i=this,[{set value(e){m$1(t,p$3,e,"f")}}.value,{set value(e){m$1(i,v$2,e,"f")}}.value]=a):m$1(this,v$2,"invalid","f")}get red(){return y$1(this,p$3,"f").r}get blue(){return y$1(this,p$3,"f").b}get green(){return y$1(this,p$3,"f").g}get alpha(){return y$1(this,p$3,"f").a}get hue(){return h$4(y$1(this,p$3,"f")).h}get saturation(){return h$4(y$1(this,p$3,"f")).s}get lightness(){return h$4(y$1(this,p$3,"f")).l}get format(){return y$1(this,v$2,"f")}isValid(){return"invalid"!==y$1(this,v$2,"f")}rgba(){return y$1(this,p$3,"f")}hsla(){return h$4(y$1(this,p$3,"f"))}hexa({round:e=!1}={}){return function(e,t=!1){let{r:i,g:a,b:n,a:r}=e;r&&(r*=255),t&&([i,a,n,r]=[i,a,n,r].map((e=>e&&Math.round(e))));const[s,o,l,c]=[i,a,n,null!=r?r:255].map((e=>e.toString(16).padStart(2,"0").toUpperCase()));return{r:s,g:o,b:l,a:c}}(y$1(this,p$3,"f"),e)}stringRGB({alpha:e=!0,precision:t=[0,0,0,1]}={}){const[i,a,n,r]=Object.values(y$1(this,p$3,"f")).map(((e,i)=>n$c(e,t[i])));return e?`rgba(${i}, ${a}, ${n}, ${r})`:`rgb(${i}, ${a}, ${n})`}stringHEX({alpha:e=!0}={}){const[t,i,a,n]=Object.values(this.hexa({round:!0}));return`#${t}${i}${a}${e?n:""}`}stringHSL({alpha:e=!0,precision:t=[0,0,0,1]}={}){const[i,a,n,r]=Object.values(this.hsla()).map(((e,i)=>n$c(e,t[i])));return e?`hsla(${i}, ${a}%, ${n}%, ${r})`:`hsl(${i}, ${a}%, ${n}%)`}hueTo(e){var t;const{h:i,s:a,l:n,a:r}=this.hsla(),s="number"==typeof e?a$c(e):Number(null!==(t=e$d[e].match(/\d{1,3}/))&&void 0!==t?t:i);return m$1(this,p$3,u$8({h:s,s:a,l:n,a:r}),"f"),this}hueBy(e){const{h:t,s:i,l:a,a:n}=this.hsla();return m$1(this,p$3,u$8({h:a$c(t+e),s:i,l:a,a:n}),"f"),this}saturationTo(e){const{h:t,l:i,a:a}=this.hsla();return m$1(this,p$3,u$8({h:t,s:s$a(0,e,100),l:i,a:a}),"f"),this}saturateBy(e){const{h:t,s:i,l:a,a:n}=this.hsla();return m$1(this,p$3,u$8({h:t,s:s$a(0,i+e,100),l:a,a:n}),"f"),this}desaturateBy(e){return this.saturateBy(-1*e)}lightnessTo(e){const{h:t,s:i,a:a}=this.hsla();return m$1(this,p$3,u$8({h:t,s:i,l:s$a(0,e,100),a:a}),"f"),this}lighterBy(e){const{h:t,s:i,l:a,a:n}=this.hsla();return m$1(this,p$3,u$8({h:t,s:i,l:s$a(0,a+e,100),a:n}),"f"),this}darkerBy(e){return this.lighterBy(-1*e)}alphaTo(e){return m$1(this,p$3,Object.assign(Object.assign({},y$1(this,p$3,"f")),{a:s$a(0,e,1)}),"f"),this}alphaBy(e){return m$1(this,p$3,Object.assign(Object.assign({},y$1(this,p$3,"f")),{a:s$a(0,y$1(this,p$3,"f").a+e,1)}),"f"),this}invert({alpha:e=!1}={}){const{r:t,g:i,b:a,a:n}=y$1(this,p$3,"f");return m$1(this,p$3,{r:255-t,g:255-i,b:255-a,a:e?1-n:n},"f"),this}grayscale(){return this.desaturateBy(100)}rotate(e){return this.hueBy(e)}}function $(){return new w$1({r:o$b(255),g:o$b(255),b:o$b(255),a:Math.random()})}function x$1(e){(e=e.filter(((e,t,i)=>i.indexOf(e)===t))).forEach((e=>e(w$1)))}p$3=new WeakMap,v$2=new WeakMap,w$1.Parsers=[function(e){if("object"===e.constructor.name.toLowerCase()&&function(e){const{r:t,g:i,b:a}=e;return void 0!==t&&void 0!==i&&void 0!==a&&"number"==typeof t}(e))return b$5(e);if("string"==typeof e){g$2.lastIndex=0;const t=g$2.exec(e);if(t){const[e,i,a,n]=t.filter((e=>void 0!==e)).slice(1).map(((e,t)=>e.includes("%")?+e.slice(0,-1)*(t<3?2.55:.01):+e));return b$5({r:e,g:i,b:a,a:n})}}return[{r:0,g:0,b:0,a:1},"invalid"]},function(e){if("object"===e.constructor.name.toLowerCase()&&function(e){const{r:t,g:i,b:a}=e;return void 0!==t&&void 0!==i&&void 0!==a&&"string"==typeof t}(e))return[l$5(e),"hex"];if("string"==typeof e){c$a.lastIndex=0;const t=c$a.exec(e);if(t){const[e,i,a,n]=t.filter((e=>void 0!==e)).slice(1).map((e=>1===e.length?e.repeat(2):e));return[l$5({r:e,g:i,b:a,a:null!=n?n:"FF"}),"hex"]}}return[{r:0,g:0,b:0,a:1},"invalid"]},function(e){if("object"===e.constructor.name.toLowerCase()&&function(e){const{h:t,s:i,l:a}=e;return void 0!==t&&void 0!==i&&void 0!==a}(e))return d$2(e);if("string"==typeof e){f$3.lastIndex=0;const t=f$3.exec(e);if(t){const[e,i,a,n]=t.filter((e=>void 0!==e)).slice(1).map(((e,t)=>e.includes("%")?+e.slice(0,-1)*(0===t?3.59:t<3?1:.01):+e));return d$2({h:e,s:i,l:a,a:n})}}return[{r:0,g:0,b:0,a:1},"invalid"]}];const j$1=e=>new w$1(e);r$e.QA;var O$1=r$e.ZP,B=r$e.qt;r$e.MX;let tabCounter=0;class ExcalidrawSidepanelTab{host;containers;id;_scriptName;_title;containerEl;modalEl;contentEl;titleEl;isClosed=!1;isActive=!1;onFocus=()=>{};onWindowMigrated=()=>{};onExcalidrawViewClosed=()=>{};constructor(e,t,i,a){this.host=t,this.containers=i,this._scriptName=a,this._title=e,this.id="excalidraw-sidepanel-tab-"+ ++tabCounter,this.modalEl=this.containers.bodyEl.createDiv({cls:"excalidraw-sidepanel-tab"}),this.modalEl.id=this.id,this.containerEl=this.modalEl,this.titleEl=this.modalEl.createDiv({cls:"excalidraw-sidepanel-tab__label"}),this.contentEl=this.modalEl.createDiv({cls:"excalidraw-sidepanel-tab__content"}),this.setTitle(e)}get scriptName(){return this._scriptName}get title(){return this._title}setScriptName(e){this._scriptName=e}clear(){this.contentEl.empty()}reset(e){this.setTitle(e),this.clear()}setTitle(e){return this._title=e,this.titleEl.setText(e),this.host.updateTitle?.(this),this}setContent(e){return this.clear(),"string"==typeof e?this.contentEl.setText(e):this.contentEl.append(e),this}focus(){this.host.activate(this,!0)}open(e=!0){this.isClosed=!1,this.host.activate(this,e),this.onOpen()}close(){this.runCloseHandlers(),this.host.close(this)}onOpen(){}onClose(){}setActive(e){const t=e&&!this.isActive;if(this.isActive=e,this.modalEl.toggleClass("is-active",e),t){const e=this.getLastActiveView();this.onOpen(),this.runFocusHandlers(e)}}notifyWillClose(){this.runCloseHandlers()}handleFocus(e){this.runFocusHandlers(e)}handleWindowMigration(e){this.isClosed||this.onWindowMigrated(e)}destroy(){this.modalEl?.remove()}setDisabled(e){return this.contentEl.style.pointerEvents=e?"none":"",this.contentEl.style.opacity=e?"0.5":"",this}runCloseHandlers(){this.isClosed||(this.isClosed=!0,this.onClose())}runFocusHandlers(e){this.isClosed||this.onFocus(e??this.getLastActiveView())}getLastActiveView(){return getLastActiveExcalidrawView(this.host.plugin)??null}getHostEA(){return this.host.ea}isVisible(){return this.host.isVisible()}reveal(){this.isActive||this.open(),this.host.reveal()}}class ExcalidrawSidepanelView extends obsidian_module.ItemView{plugin;static singleton=null;static restoreSilent=!1;static getExisting(e=!0){const t=ExcalidrawSidepanelView.singleton;return t&&e&&!ExcalidrawSidepanelView.restoreSilent&&t.plugin.app.workspace.revealLeaf(t.leaf),t}static async getOrCreate(e,t=!0){const i=t&&!ExcalidrawSidepanelView.restoreSilent;let a=e.app.workspace.getLeavesOfType(VIEW_TYPE_SIDEPANEL)[0];if(!a){if(a=e.app.workspace.getRightLeaf(!1),!a)return null;await a.setViewState({type:VIEW_TYPE_SIDEPANEL,active:i})}let n=a.view;return n instanceof ExcalidrawSidepanelView||(await a.setViewState({type:VIEW_TYPE_SIDEPANEL,active:!0}),n=a.view,n instanceof ExcalidrawSidepanelView)?(i&&e.app.workspace.revealLeaf(a),await n.waitUntilReady(),n):null}static onPluginUnload(e){ExcalidrawSidepanelView.singleton=null,e.app.workspace.detachLeavesOfType(VIEW_TYPE_SIDEPANEL)}tabs=new Map;scriptTabs=new Map;tabHosts=new Map;tabOptions=new Map;persistedScripts=new Map;activeTabId=null;selectEl=null;closeButtonEl=null;bodyEl=null;emptyStateEl=null;readyPromise;resolveReady=null;restorePromise=null;leafChangeRef=null;windowMigrationCleanup=null;constructor(e,t){super(e),this.plugin=t,(t.settings.sidepanelTabs??[]).filter((e=>!!e)).forEach((e=>{let t="",i="";try{const a=JSON.parse(e);t=a?.script??a?.name??"",i=a?.title??t}catch(a){if(e.includes("::")){const[a,...n]=e.split("::");t=a,i=n.join("::")||a}else t=e,i=e}t&&this.persistedScripts.set(t,{title:i||t})})),this.readyPromise=new Promise((e=>{this.resolveReady=e}))}getViewType(){return VIEW_TYPE_SIDEPANEL}getDisplayText(){return t$d("EXCALIDRAW_SIDEPANEL")??"Excalidraw Sidepanel"}getIcon(){return ICON_NAME}async onOpen(){await super.onOpen(),"function"==typeof this.containerEl.onWindowMigrated&&(this.windowMigrationCleanup=this.containerEl.onWindowMigrated((e=>{this.notifyTabsWindowMigrated(e)}))),ExcalidrawSidepanelView.singleton=this,this.containerEl.empty(),this.containerEl.addClass("excalidraw-sidepanel-container");const e=this.containerEl.createDiv({cls:"excalidraw-sidepanel"}),t=e.createDiv({cls:"excalidraw-sidepanel__controls"});this.selectEl=t.createEl("select",{cls:"excalidraw-sidepanel__select"}),this.selectEl.addEventListener("change",(()=>{const e=this.selectEl?.value??null,t=e?this.tabs.get(e)??null:null;this.setActiveTab(t??null)})),this.closeButtonEl=t.createEl("button",{cls:"excalidraw-sidepanel__close-button",attr:{type:"button","aria-label":"Close sidepanel tab"}}),obsidian_module.setIcon(this.closeButtonEl,"x"),this.closeButtonEl.addEventListener("click",(()=>{if(!this.activeTabId)return;const e=this.tabs.get(this.activeTabId);e&&this.removeTab(e)})),this.bodyEl=e.createDiv({cls:"excalidraw-sidepanel__body"}),this.emptyStateEl=this.bodyEl.createDiv({cls:"excalidraw-sidepanel__empty"}),this.emptyStateEl.setText("Excalidraw sidepanel is empty. Run a panel-enabled Excalidraw script to add a panel."),this.selectEl.disabled=!0,this.closeButtonEl.disabled=!0,this.leafChangeRef=this.app.workspace.on("active-leaf-change",(e=>{e===this.leaf&&this.triggerActiveTabFocus()})),this.resolveReady?.(),this.resolveReady=null,this.app.workspace.layoutReady?await this.restorePersistedTabs():this.restorePersistedTabs(),this.updateEmptyStateVisibility()}async onClose(){await super.onClose(),this.windowMigrationCleanup&&(this.windowMigrationCleanup(),this.windowMigrationCleanup=null),this.leafChangeRef&&(this.app.workspace.offref(this.leafChangeRef),this.leafChangeRef=null),this.tabs.forEach((e=>{e.notifyWillClose();const t=this.tabHosts.get(e.id);t&&t.sidepanelTab===e&&(t.sidepanelTab=null),this.tabHosts.delete(e.id),e.destroy()})),this.tabs.clear(),this.scriptTabs.clear(),this.tabOptions.clear(),this.tabHosts.clear(),this.activeTabId=null,this.selectEl=null,this.closeButtonEl=null,this.bodyEl=null,this.emptyStateEl=null,this.containerEl.onWindowMigrated=null,ExcalidrawSidepanelView.singleton===this&&(ExcalidrawSidepanelView.singleton=null)}async waitUntilReady(){await this.readyPromise}async createTab(e={title:"unknown"}){await this.waitUntilReady();const t=e.scriptName,i=!1!==e.reuseExisting;if(t&&i){const i=this.scriptTabs.get(t);if(i)return i.reset(e.title),this.setActiveTab(i),e.hostEA&&this.tabHosts.set(i.id,e.hostEA),i}const a=this.createTabInternal(e.title,e.hostEA,t);return e.hostEA&&this.tabHosts.set(a.id,e.hostEA),a}markTabPersistent(e){const t=e.scriptName;if(!t)return;this.scriptTabs.set(t,e);const i=e.title,a=this.persistedScripts.get(t);a&&a.title===i||(this.persistedScripts.set(t,{title:i}),this.savePersistentScripts())}unmarkTabPersistent(e){e&&this.persistedScripts.delete(e)&&this.savePersistentScripts()}removeTab(e){e.notifyWillClose(),this.tabs.delete(e.id),this.removeTabOption(e);const t=e.scriptName;t&&this.scriptTabs.get(t)===e&&(this.scriptTabs.delete(t),this.unmarkTabPersistent(t));const i=this.tabHosts.get(e.id);if(i&&i.sidepanelTab===e&&(i.sidepanelTab=null),this.tabHosts.delete(e.id),e.destroy(),this.activeTabId===e.id){this.activeTabId=null;const e=this.tabs.values().next().value;this.setActiveTab(e??null)}this.updateEmptyStateVisibility()}setActiveTab(e){this.activeTabId=e?.id??null,this.tabs.forEach((t=>t.setActive(t===e))),this.selectEl&&(this.selectEl.value=e?.id??""),this.updateEmptyStateVisibility()}getTabByScript(e){return this.scriptTabs.get(e)??null}hasPersistentScript(e){return this.persistedScripts.has(e)}createTabInternal(e,t,i){if(!this.bodyEl)throw new Error("Sidepanel DOM is not ready");const a=new ExcalidrawSidepanelTab(e,{activate:(e,t)=>{this.setActiveTab(e),t&&this.reveal()},close:e=>this.removeTab(e),updateTitle:e=>this.updateTabOptionTitle(e),plugin:this.plugin,ea:t,isVisible:()=>this.leaf.isVisible?.(),reveal:()=>this.reveal()},{bodyEl:this.bodyEl},i);return i&&this.scriptTabs.set(i,a),this.tabs.set(a.id,a),this.addTabOption(a),this.setActiveTab(a),a}async restorePersistedTabs(){return this.restorePromise||(this.restorePromise=(async()=>{if(this.persistedScripts.size){ExcalidrawSidepanelView.restoreSilent=!0,await this.plugin.awaitInit();try{for(const[e,t]of Array.from(this.persistedScripts.entries()))e&&await this.runScriptByName(e,t.title)}finally{ExcalidrawSidepanelView.restoreSilent=!1}}})()),this.restorePromise}async restartTabForScript(e){if(await this.waitUntilReady(),!e)return;const t=this.getTabByScript(e);if(!t)return;const i=t.title,a=this.persistedScripts.has(e);this.removeTab(t);const n=ExcalidrawSidepanelView.restoreSilent;ExcalidrawSidepanelView.restoreSilent=!0;try{await this.runScriptByName(e,i);const t=this.getTabByScript(e);a&&t&&this.markTabPersistent(t)}finally{ExcalidrawSidepanelView.restoreSilent=n}}async runScriptByName(e,t){const i=this.plugin.scriptEngine;if(!i)return;const a=i.getScriptFileByName(e);if(!a)return console.warn(`Excalidraw: could not restore sidepanel script '${e}' because the file was not found.`),this.persistedScripts.delete(e),void this.savePersistentScripts();try{const n=await this.plugin.app.vault.read(a);await i.executeScript(void 0,n,e,a);const r=this.scriptTabs.get(e);r&&r.setTitle(t)}catch(t){console.error(`Excalidraw: error while restoring sidepanel script '${e}'`,t)}}savePersistentScripts(){this.plugin.settings.sidepanelTabs=Array.from(this.persistedScripts.entries()).map((([e,t])=>JSON.stringify({script:e,title:t.title??e}))),this.plugin.saveSettings()}triggerActiveTabFocus(e=getLastActiveExcalidrawView(this.plugin)){if(!this.activeTabId)return;const t=this.tabs.get(this.activeTabId);t&&t.handleFocus(e??null)}notifyTabsWindowMigrated(e){this.tabs.forEach((t=>t.handleWindowMigration(e)))}removeViewEAs(e){this.tabHosts.forEach(((t,i)=>{if(!t||t.targetView!==e)return;t.targetView=null;const a=this.tabs.get(i);a?.onExcalidrawViewClosed()}))}addTabOption(e){if(!this.selectEl)return;const t=this.selectEl.createEl("option",{value:e.id,text:e.title});this.tabOptions.set(e.id,t),this.selectEl.disabled=!1,this.closeButtonEl&&(this.closeButtonEl.disabled=!1)}removeTabOption(e){const t=this.tabOptions.get(e.id);t&&(t.remove(),this.tabOptions.delete(e.id)),!this.tabOptions.size&&this.selectEl&&(this.selectEl.disabled=!0,this.selectEl.value=""),!this.tabOptions.size&&this.closeButtonEl&&(this.closeButtonEl.disabled=!0)}updateTabOptionTitle(e){const t=this.tabOptions.get(e.id);t&&(t.text=e.title)}updateEmptyStateVisibility(){const e=this.tabs.size>0;this.emptyStateEl&&(this.emptyStateEl.style.display=e?"none":""),this.closeButtonEl&&(this.closeButtonEl.disabled=!e),this.selectEl&&(this.selectEl.disabled=!e,e||(this.selectEl.value=""))}reveal(){this.app.workspace.revealLeaf(this.leaf)}}class Random{constructor(e){this.seed=e}next(){return this.seed?(2**31-1&(this.seed=Math.imul(48271,this.seed)))/2**31:Math.random()}}function isNothing(e){return null==e}function isObject(e){return"object"==typeof e&&null!==e}function toArray(e){return Array.isArray(e)?e:isNothing(e)?[]:[e]}function extend(e,t){var i,a,n,r;if(t)for(i=0,a=(r=Object.keys(t)).length;io&&(t=a-o+(r=" ... ").length),i-a>o&&(i=a+o-(s=" ...").length),{str:r+e.slice(t,i).replace(/\t/g,"→")+s,pos:a-t+r.length}}function padStart(e,t){return common.repeat(" ",t-e.length)+e}function makeSnippet(e,t){if(t=Object.create(t||null),!e.buffer)return null;t.maxLength||(t.maxLength=79),"number"!=typeof t.indent&&(t.indent=1),"number"!=typeof t.linesBefore&&(t.linesBefore=3),"number"!=typeof t.linesAfter&&(t.linesAfter=2);for(var i,a=/\r?\n|\r|\0/g,n=[0],r=[],s=-1;i=a.exec(e.buffer);)r.push(i.index),n.push(i.index+i[0].length),e.position<=i.index&&s<0&&(s=n.length-2);s<0&&(s=n.length-1);var o,l,c="",d=Math.min(e.line+t.linesAfter,r.length).toString().length,h=t.maxLength-(t.indent+d+3);for(o=1;o<=t.linesBefore&&!(s-o<0);o++)l=getLine(e.buffer,n[s-o],r[s-o],e.position-(n[s]-n[s-o]),h),c=common.repeat(" ",t.indent)+padStart((e.line-o+1).toString(),d)+" | "+l.str+"\n"+c;for(l=getLine(e.buffer,n[s],r[s],e.position,h),c+=common.repeat(" ",t.indent)+padStart((e.line+1).toString(),d)+" | "+l.str+"\n",c+=common.repeat("-",t.indent+d+3+l.pos)+"^\n",o=1;o<=t.linesAfter&&!(s+o>=r.length);o++)l=getLine(e.buffer,n[s+o],r[s+o],e.position-(n[s]-n[s+o]),h),c+=common.repeat(" ",t.indent)+padStart((e.line+o+1).toString(),d)+" | "+l.str+"\n";return c.replace(/\n$/,"")}var snippet=makeSnippet,TYPE_CONSTRUCTOR_OPTIONS=["kind","multi","resolve","construct","instanceOf","predicate","represent","representName","defaultStyle","styleAliases"],YAML_NODE_KINDS=["scalar","sequence","mapping"];function compileStyleAliases(e){var t={};return null!==e&&Object.keys(e).forEach((function(i){e[i].forEach((function(e){t[String(e)]=i}))})),t}function Type$1(e,t){if(t=t||{},Object.keys(t).forEach((function(t){if(-1===TYPE_CONSTRUCTOR_OPTIONS.indexOf(t))throw new exception('Unknown option "'+t+'" is met in definition of "'+e+'" YAML type.')})),this.options=t,this.tag=e,this.kind=t.kind||null,this.resolve=t.resolve||function(){return!0},this.construct=t.construct||function(e){return e},this.instanceOf=t.instanceOf||null,this.predicate=t.predicate||null,this.represent=t.represent||null,this.representName=t.representName||null,this.defaultStyle=t.defaultStyle||null,this.multi=t.multi||!1,this.styleAliases=compileStyleAliases(t.styleAliases||null),-1===YAML_NODE_KINDS.indexOf(this.kind))throw new exception('Unknown kind "'+this.kind+'" is specified for "'+e+'" YAML type.')}var type$1=Type$1;function compileList(e,t){var i=[];return e[t].forEach((function(e){var t=i.length;i.forEach((function(i,a){i.tag===e.tag&&i.kind===e.kind&&i.multi===e.multi&&(t=a)})),i[t]=e})),i}function compileMap(){var e,t,i={scalar:{},sequence:{},mapping:{},fallback:{},multi:{scalar:[],sequence:[],mapping:[],fallback:[]}};function a(e){e.multi?(i.multi[e.kind].push(e),i.multi.fallback.push(e)):i[e.kind][e.tag]=i.fallback[e.tag]=e}for(e=0,t=arguments.length;e tag resolver accepts not "'+l+'" style');a=o.represent[l](t,l)}e.dump=a}return!0}return!1}function writeNode(e,t,i,a,n,r,s){e.tag=null,e.dump=i,detectType(e,i,!1)||detectType(e,i,!0);var o,l=_toString.call(e.dump),c=a;a&&(a=e.flowLevel<0||e.flowLevel>t);var d,h,p="[object Object]"===l||"[object Array]"===l;if(p&&(h=-1!==(d=e.duplicates.indexOf(i))),(null!==e.tag&&"?"!==e.tag||h||2!==e.indent&&t>0)&&(n=!1),h&&e.usedDuplicates[d])e.dump="*ref_"+d;else{if(p&&h&&!e.usedDuplicates[d]&&(e.usedDuplicates[d]=!0),"[object Object]"===l)a&&0!==Object.keys(e.dump).length?(writeBlockMapping(e,t,e.dump,n),h&&(e.dump="&ref_"+d+e.dump)):(writeFlowMapping(e,t,e.dump),h&&(e.dump="&ref_"+d+" "+e.dump));else if("[object Array]"===l)a&&0!==e.dump.length?(e.noArrayIndent&&!s&&t>0?writeBlockSequence(e,t-1,e.dump,n):writeBlockSequence(e,t,e.dump,n),h&&(e.dump="&ref_"+d+e.dump)):(writeFlowSequence(e,t,e.dump),h&&(e.dump="&ref_"+d+" "+e.dump));else{if("[object String]"!==l){if("[object Undefined]"===l)return!1;if(e.skipInvalid)return!1;throw new exception("unacceptable kind of an object to dump "+l)}"?"!==e.tag&&writeScalar(e,e.dump,t,r,c)}null!==e.tag&&"?"!==e.tag&&(o=encodeURI("!"===e.tag[0]?e.tag.slice(1):e.tag).replace(/!/g,"%21"),o="!"===e.tag[0]?"!"+o:"tag:yaml.org,2002:"===o.slice(0,18)?"!!"+o.slice(18):"!<"+o+">",e.dump=o+" "+e.dump)}return!0}function getDuplicateReferences(e,t){var i,a,n=[],r=[];for(inspectNode(e,n,r),i=0,a=r.length;i{let i=e.parentElement;for(;i&&!i.classList.contains(t)&&!(i instanceof window.HTMLBodyElement);)i=i.parentElement;return i?.classList?.contains(t)?i:null};function getExcalidrawViews(e){const t=e.workspace.getLeavesOfType(VIEW_TYPE_EXCALIDRAW).filter((e=>e.view instanceof ExcalidrawView));return t.map((e=>e.view))}function getExcalidraAndMarkdowViewsForFile(e,t){const i=[...e.workspace.getLeavesOfType(VIEW_TYPE_EXCALIDRAW).filter((e=>e.view instanceof ExcalidrawView)),...e.workspace.getLeavesOfType("markdown").filter((e=>e.view instanceof obsidian_module.MarkdownView))];return i.map((e=>e.view)).filter((e=>e.file===t))}const getLeaf=(e,t,i)=>{switch(linkClickModifierType(i)){case"active-pane":return t;case"new-tab":default:return(()=>{if(!e.settings.openInMainWorkspace)return e.app.workspace.getLeaf("tab");const[i,a]=getLeafLoc(t);return"main"===i?e.app.workspace.getLeaf("tab"):getNewOrAdjacentLeaf(e,t)})();case"new-pane":return getNewOrAdjacentLeaf(e,t);case"popout-window":return e.app.workspace.openPopoutLeaf()}},getLeafLoc=e=>{const t=e.id,i=EXCALIDRAW_PLUGIN.app.workspace.getLayout(),a=e=>e.children.filter((e=>"leaf"!==e.type)).map((e=>a(e))).flat().concat(e.children.filter((e=>"leaf"===e.type)).map((e=>e.id))),n=a(i.main);return[i.main&&n.contains(t)?"main":i.floating&&a(i.floating).contains(t)?"popout":i.left&&a(i.left).contains(t)?"left":i.right&&a(i.right).contains(t)?"right":"hover",n]},getNewOrAdjacentLeaf=(e,t)=>{const[i,a]=getLeafLoc(t),n=i=>{let n=e.app.workspace.getMostRecentLeaf();return n&&n!==t&&n.view?.containerEl.ownerDocument===document||(n=null,a.forEach((a=>{const r=e.app.workspace.getLeafById(a);n||!r.view?.navigation||t===r||i&&r?.parent===t?.parent||(n=r)}))),n};if(e.settings.openInMainWorkspace||["main","left","right"].contains(i)){if(!e.settings.openInAdjacentPane){if("main"===i)return e.app.workspace.createLeafBySplit(t);const a=n();return a?"empty"===a.view.getViewType()?a:e.app.workspace.createLeafBySplit(a):e.app.workspace.getLeaf(!0)}return n(!0)??e.app.workspace.createLeafBySplit(t)}if(!e.settings.openInAdjacentPane)return e.app.workspace.createLeafBySplit(t);if("hover"===i){const i=new Set;return e.app.workspace.iterateAllLeaves((e=>{e!==t&&t.containerEl.parentElement===e.containerEl.parentElement&&i.add(e)})),0===i.size?e.app.workspace.createLeafBySplit(t):Array.from(i)[0]}if("popout"===i){const i=new Set;return e.app.workspace.iterateAllLeaves((e=>{e!==t&&e.view.navigation&&e.view.containerEl.ownerDocument===t.view.containerEl.ownerDocument&&i.add(e)})),0===i.size?e.app.workspace.createLeafBySplit(t):Array.from(i)[0]}return e.app.workspace.createLeafBySplit(t)},getAttachmentsFolderAndFilePath=async(e,t,i)=>{const{basename:a,extension:n}=splitFolderAndFilename(i),r=e.vault.getFileByPath(t),s=await e.vault.getAvailablePathForAttachments(a,n,r),{folderpath:o}=splitFolderAndFilename(s);return{folder:o,filepath:s}},isObsidianThemeDark=()=>document.body.classList.contains("theme-dark"),getContainerForDocument=e=>{if(e!==document&&EXCALIDRAW_PLUGIN.app.workspace.floatingSplit)for(const t of EXCALIDRAW_PLUGIN.app.workspace.floatingSplit.children)if(t.doc===e)return t;return EXCALIDRAW_PLUGIN.app.workspace.rootSplit},cleanSectionHeading=e=>e?e.replace(REG_SECTION_REF_CLEAN,"").replace(/\s+/g," ").trim():e,cleanBlockRef=e=>e?e.replace(REG_BLOCK_REF_CLEAN,"").replace(/\s+/g," ").trim():e,getAllWindowDocuments=e=>{const t=new Set;return t.add(document),e.workspace.iterateAllLeaves((e=>{e.view.containerEl.ownerDocument!==document&&t.add(e.view.containerEl.ownerDocument)})),Array.from(t)},obsidianPDFQuoteWithRef=e=>{const t=/^> (.*)\n\n\[\[([^|\]]*)\|[^\]]*]]$/gm.exec(e);return t?{quote:t[1],link:t[2]}:null},extractSVGPNGFileName=e=>{const t=e.match(/\[\[([^\]|#^]+\.(?:svg|png))(?:[^\]]+)?\]\]|\[[^\]]+\]\(([^\)]+\.(?:svg|png))\)/);return t?t[1]||t[2]:null},getFileCSSClasses=e=>{if(e){const t=window?.ExcalidrawAutomate?.plugin;if(!t)return[];const i=t.app.metadataCache.getFileCache(e);if(!i?.frontmatter)return[];const a=obsidian_module.parseFrontMatterEntry(i.frontmatter,"cssclasses");return Array.isArray(a)?a:"string"==typeof a?Array.from(new Set(a.split(/[, ]+/).filter(Boolean))):[]}return[]},getActivePDFPageNumberFromPDFView=e=>e?.viewer?.child?.pdfViewer?.page,openLeaf=({plugin:e,fnGetLeaf:t,file:i,openState:a})=>{let n=null;if(e.settings.focusOnFileTab&&(e.app.workspace.iterateAllLeaves((t=>{n||t?.view?.file===i&&(e.app.workspace.setActiveLeaf(t,{focus:!0}),n=t)})),n)){if(a){const e=n.openFile(i,a);return{leaf:n,promise:e}}return{leaf:n,promise:Promise.resolve()}}n=t();const r=n.openFile(i,a);return{leaf:n,promise:r}};function mergeMarkdownFiles(e,t){const i=e.indexOf("---",4),a=e.substring(4,i).trim(),n=e.substring(i+3),r=jsYaml.load(a)||{};if(t.startsWith("---\n")&&t.indexOf("---\n",4)>0){const e=t.indexOf("---\n",4);let i=t.substring(4,e).replace(/\s+$/,"");const a=t.substring(e+3),s=jsYaml.load(i)||{},o=Object.keys(r).filter((e=>Array.isArray(r[e])&&Array.isArray(s[e])));if(o.length)for(const e of o){const t=s[e],a=r[e],n=[...t,...a.filter((e=>!t.includes(e)))];i=replaceYamlKeyBlock(i,e,jsYaml.dump({[e]:n}).trimEnd())??i}const l={};for(const e of Object.keys(r))e in s||(l[e]=r[e]);return`---\n${Object.keys(l).length?i+"\n"+jsYaml.dump(l).trimEnd():i}\n---\n${a}\n\n${n.trim()}\n`}{const e=t.trim();return`---\n${jsYaml.dump(r).trimEnd()}\n---\n${e}\n\n${n.trim()}\n`}}function replaceYamlKeyBlock(e,t,i){const a=e.split(/\r?\n/);let n=-1;for(let e=0;e>8&255,t[t.length]=255&a}return t},sizeOf.UTF16=function(e){return 2*e.length};var eightBitMacEncodings={"x-mac-croatian":"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®Š™´¨≠ŽØ∞±≤≥∆µ∂∑∏š∫ªºΩžø¿¡¬√ƒ≈ƫȅ ÀÃÕŒœĐ—“”‘’÷◊©⁄€‹›Æ»–·‚„‰ÂćÁčÈÍÎÏÌÓÔđÒÚÛÙıˆ˜¯πË˚¸Êæˇ","x-mac-cyrillic":"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ†°Ґ£§•¶І®©™Ђђ≠Ѓѓ∞±≤≥іµґЈЄєЇїЉљЊњјЅ¬√ƒ≈∆«»… ЋћЌќѕ–—“”‘’÷„ЎўЏџ№Ёёяабвгдежзийклмнопрстуфхцчшщъыьэю","x-mac-gaelic":"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØḂ±≤≥ḃĊċḊḋḞḟĠġṀæøṁṖṗɼƒſṠ«»… ÀÃÕŒœ–—“”‘’ṡẛÿŸṪ€‹›Ŷŷṫ·Ỳỳ⁊ÂÊÁËÈÍÎÏÌÓÔ♣ÒÚÛÙıÝýŴŵẄẅẀẁẂẃ","x-mac-greek":"Ĺ²É³ÖÜ΅àâä΄¨çéèê룙î‰ôö¦€ùûü†ΓΔΘΛΞΠß®©ΣΪ§≠°·Α±≤≥¥ΒΕΖΗΙΚΜΦΫΨΩάΝ¬ΟΡ≈Τ«»… ΥΧΆΈœ–―“”‘’÷ΉΊΌΎέήίόΏύαβψδεφγηιξκλμνοπώρστθωςχυζϊϋΐΰ","x-mac-icelandic":"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûüݰ¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄€ÐðÞþý·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ","x-mac-inuit":"ᐃᐄᐅᐆᐊᐋᐱᐲᐳᐴᐸᐹᑉᑎᑏᑐᑑᑕᑖᑦᑭᑮᑯᑰᑲᑳᒃᒋᒌᒍᒎᒐᒑ°ᒡᒥᒦ•¶ᒧ®©™ᒨᒪᒫᒻᓂᓃᓄᓅᓇᓈᓐᓯᓰᓱᓲᓴᓵᔅᓕᓖᓗᓘᓚᓛᓪᔨᔩᔪᔫᔭ… ᔮᔾᕕᕖᕗ–—“”‘’ᕘᕙᕚᕝᕆᕇᕈᕉᕋᕌᕐᕿᖀᖁᖂᖃᖄᖅᖏᖐᖑᖒᖓᖔᖕᙱᙲᙳᙴᙵᙶᖖᖠᖡᖢᖣᖤᖥᖦᕼŁł","x-mac-ce":"ÄĀāÉĄÖÜáąČäčĆć鏟ĎíďĒēĖóėôöõúĚěü†°Ę£§•¶ß®©™ę¨≠ģĮįĪ≤≥īĶ∂∑łĻļĽľĹĺŅņѬ√ńŇ∆«»… ňŐÕőŌ–—“”‘’÷◊ōŔŕŘ‹›řŖŗŠ‚„šŚśÁŤťÍŽžŪÓÔūŮÚůŰűŲųÝýķŻŁżĢˇ",macintosh:"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄€‹›fifl‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ","x-mac-romanian":"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ĂȘ∞±≤≥¥µ∂∑∏π∫ªºΩăș¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄€‹›Țț‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ","x-mac-turkish":"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸĞğİıŞş‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙˆ˜¯˘˙˚¸˝˛ˇ"};decode.MACSTRING=function(e,t,i,a){var n=eightBitMacEncodings[a];if(void 0!==n){for(var r="",s=0;s=-128&&e<=127}function encodeVarDeltaRunAsZeroes(e,t,i){for(var a=0,n=e.length;t
🔄 If you're using Obsidian on multiple devices, you may proceed now, but please, before opening this file on your other devices, update Excalidraw on those as well.
🔍 More info is available here.
🌐 Translate.");if(e.contentEl.focus(),!await e.waitForClose)throw new Error(ERROR_IFRAME_CONVERSION_CANCELED)}this.initializeNonInitializedFields();const n=window.setTimeout((()=>{new obsidian_module.Notice(t$d("FONT_LOAD_SLOW"),15e3).noticeEl.oncontextmenu=()=>{displayFontMessage(this.app)}}),5e3);await loadSceneFonts(this.scene.elements),clearTimeout(n),this.scene.files||(this.scene.files={}),hasExportTheme(this.plugin,this.file)?this.scene.appState.theme=getExportTheme(this.plugin,this.file,"light"):this.plugin.settings.matchThemeAlways&&(this.scene.appState.theme=isObsidianThemeDark()?"dark":"light"),this.scene.appState.hasOwnProperty("previousGridSize")&&(null===this.scene.appState.gridSize?(this.scene.appState.gridSize=this.scene.appState.previousGridSize,this.scene.appState.gridModeEnabled=!1):this.scene.appState.gridModeEnabled=!0,delete this.scene.appState.previousGridSize),this.scene.appState?.gridColor?.hasOwnProperty("MajorGridFrequency")&&(this.scene.appState.gridColor.MajorGridFrequency>1&&(this.scene.gridStep=this.scene.appState.gridColor.MajorGridFrequency),delete this.scene.appState.gridColor.MajorGridFrequency);let r=(e=e.substring(0,a.pos)).search(RE_EXCALIDRAWDATA_NOSECTION_OK);if(-1===r&&(r=e.search(RE_EXCALIDRAWDATA_FALLBACK_2)),-1===r&&(r=e.search(RE_TEXTELEMENTS_NOSECTION_OK)),-1===r&&(r=e.search(RE_TEXTELEMENTS_FALLBACK_2)),-1===r)return await this.setTextMode(i,!1),this.loaded=!0,!0;const s=(e=e.slice(r)).match(/^((%%\n*)?# Excalidraw Data\n\n?## Text Elements(?:\n|$))/m)??e.match(/^((%%\n*)?##? Text Elements(?:\n|$))/m),o=s?s[0]:e.match(/(.*##? Text Elements(?:\n|$))/m)[0];let l;e=e.slice(o.length),this.textElementCommentedOut=o.startsWith("%%\n"),r=0;const c=new Map,d=e.indexOf("## Element Links\n"),h=e.indexOf("# Element Links\n"),p=(d>-1?e.substring(d+17):e.substring(h+16)).matchAll(/^(.{8}):\s*(.*)$/gm);for(;!(l=p.next()).done;)c.set(l.value[1],l.value[2]);const u=/^%%\*\*\*>>>text element-link:(\[\[[^<*\]]*]])<<<\*\*\*%%/gm;let m=e.matchAll(/\s\^(.{8})[\n]+/g);for(;!(l=m.next()).done;){let t=e.substring(r,l.value.index);const i=l.value[1],a=this.scene.elements.filter((e=>e.id===i))[0];if(a)if("text"!==a.type)a.link!==t&&(a.link=t,a.version++,a.versionNonce++),this.elementLinks.set(i,t);else{const e=t.matchAll(u).next();e.done||(t=t.replace(u,""),a.link=e.value[1]),c.has(i)&&(a.link=c.get(i),c.delete(i));const n=await this.parse(t);a.rawText=t,this.textElements.set(i,{raw:t,parsed:n.parsed,hasTextLink:!!n.link}),n.link&&this.plugin.settings.syncElementLinkWithText&&(a.link=n.link),a.hasTextLink=!!n.link,!a||a.rawText&&""!==a.rawText||(a.rawText=t)}r=l.value.index+12}for(const[e,t]of c){const i=this.scene.elements.filter((t=>t.id===e))[0];i&&(i.link=t,i.version++,i.versionNonce++,this.elementLinks.set(e,t))}const g=e.indexOf("## Embedded Files\n"),f=e.indexOf("# Embedded files\n");if(g>-1||f>-1){const t=/([\w\d]*):\s*\!?\[\[([^\]]*)]]\s*(\{[^}]*})?\n/gm;for(m=(e=g>-1?e.substring(g+18):e.substring(f+17)).matchAll(t);!(l=m.next()).done;){const e=new EmbeddedFile(this.plugin,this.file.path,l.value[2],l.value[3]);this.setFile(l.value[1],e)}const i=/([\w\d]*):\s*((?:https?|file|ftps?):\/\/[^\s]*)\n/gm;for(m=e.matchAll(i);!(l=m.next()).done;){const e=new EmbeddedFile(this.plugin,null,l.value[2]);this.setFile(l.value[1],e)}const a=/([\w\d]*):\s*\$\$([\s\S]*?)(\$\$\s*\n)/gm;for(m=e.matchAll(a);!(l=m.next()).done;)this.setEquation(l.value[1],{latex:l.value[2],isLoaded:!1});const n=getMermaidImageElements(this.scene.elements);n.length>0&&!shouldRenderMermaid()?new obsidian_module.Notice("Mermaid images are only supported in Obsidian 1.4.14 and above. Please update Obsidian to see the mermaid images in this drawing. Obsidian mobile 1.4.14 currently only avaiable to Obsidian insiders",5e3):n.forEach((e=>this.setMermaid(e.fileId,{mermaid:getMermaidText(e),isLoaded:!1})))}return this.findNewTextElementsInScene(),this.findNewElementLinksInScene(),await this.setTextMode(i,!0),this.loaded=!0,!0}async loadLegacyData(e,t){return!!t&&(this.loaded=!1,this.selectedElementIds={},this.compatibilityMode=!0,this.file=t,this.textElements=new Map,this.elementLinks=new Map,this.setShowLinkBrackets(),this.setLinkPrefix(),this.setUrlPrefix(),this.setembeddableThemePreference(),this.scene=JSON.parse(e),this.scene.files||(this.scene.files={}),this.initializeNonInitializedFields(),this.plugin.settings.matchThemeAlways&&(this.scene.appState.theme=isObsidianThemeDark()?"dark":"light"),this.files.clear(),this.equations.clear(),this.mermaids.clear(),this.findNewTextElementsInScene(),this.findNewElementLinksInScene(),await this.setTextMode(TextMode.raw,!0),this.loaded=!0,!0)}async setTextMode(e,t=!1){this.scene&&(this.textMode=e,await this.updateSceneTextElements(t))}async updateSceneTextElements(e=!1){const t=arrayToMap(this.scene.elements),i=this.scene.elements?.filter((e=>"text"===e.type&&!e.isDeleted));for(const e of i){const i=getContainerElement(e,t),a=await this.getText(e.id)??e.originalText??e.text,{text:n,x:r,y:s,width:o,height:l}=refreshTextDimensions(e,i,t,a);try{e.originalText=a,e.text=n,e.x=r,e.y=s,e.width=o,e.height=l}catch(e){}}}async getText(e){const t=this.textElements.get(e);if(!t)return null;if(this.textMode===TextMode.parsed){if(!t.parsed){const i=await this.parse(t.raw);this.textElements.set(e,{raw:t.raw,parsed:i.parsed,hasTextLink:!!i.link})}return t.parsed}return t.raw}findNewElementLinksInScene(){let e=!1;const t=this.scene.elements?.filter((e=>"text"!==e.type&&e.link&&!this.elementLinks.has(e.id)));if(0===t.length)return e;let i;for(const a of t)i=a.id,a.id.length>8&&(e=!0,i=nanoid(),updateElementIdsInScene(this.scene,a,i)),this.elementLinks.set(i,a.link);return e}findNewTextElementsInScene(e={}){this.selectedElementIds=e;const t=this.scene.elements?.filter((e=>"text"===e.type));let i,a=!1;for(const e of t)if(i=e.id,e.id.length>8){if(a=!0,i=nanoid(),this.selectedElementIds[e.id]&&(delete this.selectedElementIds[e.id],this.selectedElementIds[i]=!0),updateElementIdsInScene(this.scene,e,i),this.textElements.has(e.id)){const t=this.textElements.get(e.id);this.textElements.set(i,{raw:t.raw,parsed:t.parsed,hasTextLink:t.hasTextLink}),this.textElements.delete(e.id)}if(!this.textElements.has(i)){const t=e.rawText&&""!==e.rawText?e.rawText:e.text;this.textElements.set(i,{raw:t,parsed:null,hasTextLink:!1}),this.parseasync(i,t)}}else if(!this.textElements.has(e.id)){const t=e.rawText&&""!==e.rawText?e.rawText:e.text;this.textElements.set(i,{raw:t,parsed:null,hasTextLink:!1}),this.parseasync(i,t)}return a}updateElementLinksFromScene(){for(const e of this.elementLinks.keys()){const t=this.scene.elements?.filter((t=>"text"!==t.type&&t.id===e&&t.link));0===t.length?this.elementLinks.delete(e):this.elementLinks.set(e,t[0].link)}}async updateTextElementsFromScene(){for(const e of this.textElements.keys()){const t=this.scene.elements?.filter((t=>"text"===t.type&&t.id===e));if(0===t.length)this.textElements.delete(e);else{const i=await this.getText(e),a=this.scene.prevTextMode===TextMode.parsed?t[0].rawText:t[0].originalText??t[0].text;if(i!==(t[0].originalText??t[0].text)){const t=await this.parse(i);this.textElements.set(e,{raw:a,parsed:t.parsed,hasTextLink:!!t.link})}}}}async parseasync(e,t){const i=await this.parse(t);this.textElements.set(e,{raw:t,parsed:i.parsed,hasTextLink:!!i.link})}parseLinks(e,t,i){return e.substring(t,i.value.index)+(this.showLinkBrackets?"[[":"")+REGEX_LINK.getAliasOrLink(i)+(this.showLinkBrackets?"]]":"")}async getTransclusion(e){const t=getLinkParts(e,this.file),i=this.app.metadataCache.getFirstLinkpathDest(t.path,this.file.path);return await getTransclusion(t,this.app,i,this.plugin.settings.pageTransclusionCharLimit)}async parse(e){e=this.parseCheckbox(e);let t="",i=null,a=0;const n=REGEX_LINK.getRes(e);let r,s=!1,o=!1;for(e.match(REG_LINKINDEX_HYPERLINK)&&(i=e,o=!0);!(r=n.next()).done;){if(!i){const e=REGEX_LINK.getLink(r);i=e.match(REG_LINKINDEX_HYPERLINK)?e:`[[${e}]]`}if(REGEX_LINK.isTransclusion(r)){let i=this.parseCheckbox((await this.getTransclusion(REGEX_LINK.getLink(r))).contents).replaceAll(/%%[^%]*%%/gm,"");this.plugin.settings.removeTransclusionQuoteSigns&&(i=i.replaceAll(/\n\s*>\s?/gm,"\n")),t+=e.substring(a,r.value.index)+wrapTextAtCharLength(i,REGEX_LINK.getWrapLength(r,this.plugin.settings.wordWrappingDefault),this.plugin.settings.forceWrap)}else{const i=this.parseLinks(e,a,r);if(i&&(t+=i,!o&&!s)){const e=REGEX_LINK.getLink(r);e.match(REG_LINKINDEX_HYPERLINK)?o=!e.startsWith("cmd://"):s=!0}}a=r.value.index+r.value[0].length}return t+=e.substring(a,e.length),t=this.unescapeSquareBrackets(t),s&&(t=this.linkPrefix+t),o&&(t=this.urlPrefix+t),{parsed:t,link:i}}parseCheckbox(e){return this.plugin.settings.parseTODO?e.replaceAll(/^- \[\s] /g,`${this.plugin.settings.todo} `).replaceAll(/\n- \[\s] /g,`\n${this.plugin.settings.todo} `).replaceAll(/^- \[[^\s]] /g,`${this.plugin.settings.done} `).replaceAll(/\n- \[[^\s]] /g,`\n${this.plugin.settings.done} `):e}unescapeSquareBrackets(e){return e?.replaceAll(/\\\[/g,"[")??e}quickParse(e){if((e=>{const t=REGEX_LINK.getRes(e);let i;for(;!(i=t.next()).done;)if(REGEX_LINK.isTransclusion(i))return!0;return!1})(e))return[null,null];e=this.parseCheckbox(e);let t="",i=null,a=0;const n=REGEX_LINK.getRes(e);let r,s=!1,o=!1;for(e.match(REG_LINKINDEX_HYPERLINK)&&(i=e,o=!0);!(r=n.next()).done;){if(!i){const e=REGEX_LINK.getLink(r);i=e.match(REG_LINKINDEX_HYPERLINK)?e:`[[${e}]]`}const n=this.parseLinks(e,a,r);if(n&&(t+=n,!o&&!s)){const e=REGEX_LINK.getLink(r);e.match(REG_LINKINDEX_HYPERLINK)?o=!e.startsWith("cmd://"):s=!0}a=r.value.index+r.value[0].length}return t+=e.substring(a,e.length),t=this.unescapeSquareBrackets(t),s&&(t=this.linkPrefix+t),o&&(t=this.urlPrefix+t),[t,i]}disableCompression=!1;generateMDBase(e=[]){const t=this.plugin.settings.syncElementLinkWithText;let i=this.textElementCommentedOut?"%%\n":"";i+="# Excalidraw Data\n\n## Text Elements\n",this.plugin.settings.addDummyTextElement&&(i+="\n^_dummy!_\n\n");const a=new Map;for(const e of this.textElements.keys()){const n=this.scene.elements.filter((t=>t.id===e));let r=this.textElements.get(e).raw;!n||1!==n.length||!n[0].link||t&&n[0].rawText!==n[0].originalText||a.set(e,n[0].link),i+=`${r} ^${e}\n\n`}if(this.elementLinks.size>0||a.size>0){i+="## Element Links\n";for(const e of this.elementLinks.keys())i+=`${e}: ${this.elementLinks.get(e)}\n\n`;for(const e of a.keys())i+=`${e}: ${a.get(e)}\n\n`}if(i+=this.equations.size>0||this.files.size>0?"## Embedded Files\n":"",this.equations.size>0)for(const e of this.equations.keys())i+=`${e}: $$${this.equations.get(e).latex.trim()}$$\n\n`;if(this.files.size>0)for(const e of this.files.keys()){const t=/(^[^#\|]*)/,a=this.files.get(e);a.isHyperLink||a.isLocalLink?i+=`${e}: ${a.hyperlink}\n\n`:i+=`${e}: [[${a.file?a.linkParts.original.replace(t,this.app.metadataCache.fileToLinktext(a.file,this.file.path)):a.linkParts.original}]]${a.colorMap?" "+JSON.stringify(a.colorMap):""}\n\n`}return{outString:i,sceneJSONstring:JSON.stringify({type:this.scene.type,version:this.scene.version,source:this.scene.source,elements:this.scene.elements.concat(e),appState:this.scene.appState,files:this.scene.files},null,"\t")}}async generateMDAsync(e=[]){const{outString:t,sceneJSONstring:i}=this.generateMDBase(e);return t+(this.textElementCommentedOut?"":"%%\n")+await getMarkdownDrawingSectionAsync(i,!this.disableCompression&&this.plugin.settings.compress)}generateMDSync(e=[]){const{outString:t,sceneJSONstring:i}=this.generateMDBase(e);return t+(this.textElementCommentedOut?"":"%%\n")+getMarkdownDrawingSection(i,!this.disableCompression&&this.plugin.settings.compress)}async saveDataURLtoVault(e,t,i,a){const n=this.scene;let r=a;if(!r)switch(r=`Pasted Image ${window.moment().format("YYYYMMDDHHmmss_SSS")}`,t){case"image/png":default:r+=".png";break;case"image/jpeg":r+=".jpg";break;case"image/svg+xml":r+=".svg";break;case"image/gif":r+=".gif"}const s=await getBinaryFileFromDataURL(e);if(!s)return null;const o=await importFileToVault(this.app,r,s,this.file,this.view),l=new EmbeddedFile(this.plugin,this.file.path,o.path);return l.setImage({imgBase64:e,mimeType:t,size:{height:0,width:0},isDark:"dark"===n.appState?.theme,isSVGwithBitmap:"image/svg+xml"===t}),this.setFile(i,l),o}syncCroppedPDFs(){const e=this.scene,t=this.plugin.settings.pdfScale;e.elements.filter((e=>"image"===e.type&&e.crop&&!e.isDeleted)).forEach((e=>{const i=this.getFile(e.fileId);if(!i.file)return;if("pdf"!==i.file.extension)return;const a=i.linkParts.original.split("#")?.[1];if(!a||!a.startsWith("page=")||a.includes("rect"))return;const n=e.link?e.link.match(/&rect=\d*,\d*,\d*,\d*(.*)/)?.[1]:"",r=i.linkParts.original+getPDFRect({elCrop:e.crop,scale:t,customData:e.customData})+(n||"]]");e.link=`[[${r}`,this.elementLinks.set(e.id,e.link)}))}async syncFiles(){let e=!1;const t=this.scene,i=t.elements.filter((e=>"image"===e.type)),a=i.map((e=>e.fileId));if(this.files.forEach(((t,i)=>{a.contains(i)||(this.files.delete(i),e=!0)})),this.equations.forEach(((t,i)=>{a.contains(i)||(this.equations.delete(i),e=!0)})),this.mermaids.forEach(((t,i)=>{a.contains(i)||(this.mermaids.delete(i),e=!0)})),!t.files||0===Object.keys(t.files).length)return!1;const n=new Set;a.forEach(((a,r)=>{if(n.has(a)){const s=this.getFile(a),o=this.getEquation(a),l=this.getMermaid(a);if(s&&(s.isHyperLink||s.isLocalLink||s.file&&("md"!==s.file.extension||this.plugin.isExcalidrawFile(s.file))))return;if(l)return;if(getMermaidText(i[r]))return void this.setMermaid(a,{mermaid:getMermaidText(i[r]),isLoaded:!0});if(!s&&!o&&!l)return;const c=fileid();t.elements.filter((e=>e.fileId===a)).sort(((e,t)=>e.updated
([^<]+)`,"g");return e.replaceAll(i,`$1
");const n=obsidian_module.htmlToMarkdown(a);window.navigator.clipboard.writeText(n),new obsidian_module.Notice(t$d("SEARCH_COPIED_TO_CLIPBOARD"))},this.showHideButton.onclick=()=>{const e=e=>{this.inputContainer.style.opacity=e,this.prevButton.style.opacity=e,this.nextButton.style.opacity=e,this.exportMarkdown.style.opacity=e,this.customElemenentContainer.style.opacity=e};this.showHideButton.hasClass("search-visible")?(this.showHideButton.removeClass("search-visible"),this.showHideButton.addClass("search-hidden"),this.searchBarWrapper.style.backgroundColor="transparent",e("0"),this.showHideButton.innerHTML=obsidian_module.getIcon("maximize-2").outerHTML):(this.showHideButton.removeClass("search-hidden"),this.showHideButton.addClass("search-visible"),this.searchBarWrapper.style.backgroundColor=null,e(null),this.showHideButton.innerHTML=obsidian_module.getIcon("minimize-2").outerHTML)},this.searchBar.addEventListener("input",(e=>{this.clearHighlights();const t=e.target.value;if(t&&t.length>0){this.highlightSearchTerm(t);const e=this.contentDiv.querySelectorAll("mark.search-highlight").length;this.hitCount.textContent=e>0?`1 / ${e}`:"",setTimeout((()=>this.navigateSearchResults("next")))}else this.hitCount.textContent=""})),this.searchBar.addEventListener("keydown",(e=>{(e.ctrlKey||e.metaKey)&&"f"===e.key?(e.preventDefault(),this.searchBar.focus()):"Enter"===e.key&&(e.preventDefault(),this.navigateSearchResults(e.shiftKey?"previous":"next"))}))}getSearchBarWrapper(){return this.searchBarWrapper}highlightSearchTerm(e){const t=document.createTreeWalker(this.contentDiv,NodeFilter.SHOW_TEXT,{acceptNode:t=>t.nodeValue.toLowerCase().includes(e.toLowerCase())?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_REJECT}),i=[];for(;t.nextNode();)i.push(t.currentNode);i.forEach((t=>{const i=t.nodeValue,a=document.createDocumentFragment();let n,r=0;const s=new RegExp(escapeRegExp(e),"gi");for(;null!==(n=s.exec(i));){const e=document.createTextNode(i.slice(r,n.index)),t=document.createElement("mark");t.className="search-highlight",t.textContent=n[0],t.classList.add("search-result"),a.appendChild(e),a.appendChild(t),r=s.lastIndex}a.appendChild(document.createTextNode(i.slice(r))),t.replaceWith(a)}))}clearHighlights(){this.contentDiv.querySelectorAll("mark.search-highlight").forEach((e=>{e.outerHTML=e.innerHTML}))}navigateSearchResults(e){const t=Array.from(this.contentDiv.querySelectorAll("mark.search-highlight"));if(0===t.length)return;const i=t.findIndex((e=>e.classList.contains("active-highlight")));-1!==i&&(t[i].classList.remove("active-highlight"),t[i].style.border="none");let a=0;"next"===e?a=i===t.length-1?0:i+1:"previous"===e&&(a=0===i?t.length-1:i-1);const n=t[a];n.classList.add("active-highlight"),this.expandParentDetails(n),setTimeout((()=>{n.scrollIntoView({behavior:"smooth",block:"nearest"})}),100),this.hitCount.textContent=`${a+1} / ${t.length}`}expandParentDetails(e){let t=e.parentElement;for(;t;)"DETAILS"===t.tagName&&t.setAttribute("open",""),t=t.parentElement}}const URL$1="https://raw.githubusercontent.com/zsviczian/obsidian-excalidraw-plugin/master/ea-scripts/index-new.md";class ScriptInstallPrompt extends obsidian_module.Modal{plugin;contentDiv;constructor(e){super(e.app),this.plugin=e}async onOpen(){this.contentEl.classList.add("excalidraw-scriptengine-install"),this.contentDiv=document.createElement("div"),this.contentEl.appendChild(this.contentDiv),new ContentSearcher(this.contentDiv),this.containerEl.classList.add("excalidraw-scriptengine-install");try{const e=await obsidian_module.request({url:URL$1});if(!e)return new obsidian_module.Notice("Error opening the Excalidraw Script Store page. Please double check that you can access the website. I've logged the link in developer console (press CTRL+SHIFT+i)",5e3),log$2(URL$1),void this.close();await obsidian_module.MarkdownRenderer.render(this.plugin.app,e,this.contentDiv,"",this.plugin),this.contentDiv.querySelectorAll("h1[data-heading],h2[data-heading],h3[data-heading]").forEach((e=>{e.setAttribute("id",e.getAttribute("data-heading"))})),this.contentDiv.querySelectorAll("a.internal-link").forEach((e=>{e.removeAttribute("target")}))}catch(e){errorlog({where:"ScriptInstallPrompt.onOpen",error:e}),new obsidian_module.Notice("Could not open ScriptEngine repository"),this.close()}}onClose(){this.contentEl.empty()}}function r$d(e){var t,i,a="";if("string"==typeof e||"number"==typeof e)a+=e;else if("object"==typeof e)if(Array.isArray(e)){var n=e.length;for(t=0;t
"Only applies to the freedraw line" means that if for example you are writing black text, and you select a custom pen (e.g. a yellow highlighter), then after using the highlighter you switch to another tool, the previous settings (e.g. black stroke color) will apply to the new shape.')).addToggle((e=>e.setValue(t.freedrawOnly).onChange((e=>{this.dirty=!0,a.setName(fragWithHTML(e?"Stroke & fill applies to: Freedraw only":"Stroke & fill applies to: All shapes")),t.freedrawOnly=e}))));let c,d,h,p,u,m,g,f,[b,U]=e(t.strokeColor),E=!1;l=new obsidian_module.Setting(i).setName(fragWithHTML(Boolean(t.strokeColor)?"Stroke color: Preset color":"Stroke color: Current")).setDesc(fragWithHTML("Use current stroke color of the canvas, or set a specific preset color for the pen")).addToggle((i=>{o=i,i.setValue(!Boolean(t.strokeColor)).onChange((i=>{this.dirty=!0,n.settingEl.style.display=i?"none":"",l.setName(fragWithHTML(i?"Stroke color: Current":"Stroke color: Preset color")),i?delete t.strokeColor:(s.getValue()||([b,U]=e("black"),r.setValue(b),s.setValue("black")),t.strokeColor=s.getValue())}))})),n=new obsidian_module.Setting(i).setName("Select stroke color").addButton((i=>i.setButtonText("Use Canvas Current").onClick((()=>{const i=this.api.getAppState(),a=i.resetCustomPen?.currentItemStrokeColor??i.currentItemStrokeColor;[b,U]=e(a),t.strokeColor=a,this.dirty=!0,s.setValue(a),E=!0,r.setValue(b)})))).addText((i=>{s=i,i.setValue(t.strokeColor).onChange((i=>{E=!0,this.dirty=!0,t.strokeColor=i,[b,U]=e(i),b&&r.setValue(b)}))})).addColorPicker((e=>{r=e,e.setValue(b??"#000000").onChange((e=>{E?E=!1:(this.dirty=!0,t.strokeColor=e+U,s.setValue(e+U))}))})).addButton((i=>{i.setIcon("swatch-book").onClick((async()=>{const a=await showColorPicker("elementStroke",i.buttonEl,this.view,!0);a&&(o?.setValue(!1),E=!0,[b,U]=e(a),t.strokeColor=a,s.setValue(a),b&&r.setValue(b))}))})),n.settingEl.style.display=Boolean(t.strokeColor)?"":"none";let[w,y]=e(t.backgroundColor);c=new obsidian_module.Setting(i).setName(fragWithHTML(Boolean(t.backgroundColor)?"Background color: Preset color":"Background color: Current")).setDesc(fragWithHTML("Toggle to use the current background color of the canvas; or a preset color")).addToggle((i=>{g=i,i.setValue(!Boolean(t.backgroundColor)).onChange((i=>{this.dirty=!0,c.setName(fragWithHTML(i?"Background color: Current":"Background color: Preset color")),h.settingEl.style.display=i?"none":"",d.settingEl.style.display=i||"transparent"===t.backgroundColor?"none":"",i?delete t.backgroundColor:(u.getValue()||([w,y]=e("black"),p.setValue(w),u.setValue("black")),m.setValue(!1))}))})),h=new obsidian_module.Setting(i).setName(fragWithHTML("transparent"===t.backgroundColor?"Background: Transparent":"Color: Preset color")).setDesc("Background has color or is transparent").addToggle((e=>{m=e,e.setValue("transparent"===t.backgroundColor).onChange((e=>{this.dirty=!0,d.settingEl.style.display=e?"none":"",f.settingEl.style.display=e?"none":"",h.setName(fragWithHTML(e?"Background: Transparent":"Color: Preset color")),t.backgroundColor=e?"transparent":p.getValue()}))})),h.settingEl.style.display=Boolean(t.backgroundColor)?"":"none";let v,T,S,_,x,C,I,A,k,O=!1;d=new obsidian_module.Setting(i).setName("Background color").addButton((i=>i.setButtonText("Use Canvas Current").onClick((()=>{const i=this.api.getAppState(),a=i.resetCustomPen?.currentItemBackgroundColor??i.currentItemBackgroundColor;[w,y]=e(a),t.backgroundColor=a,this.dirty=!0,u.setValue(a),O=!0,p.setValue(w)})))).addText((i=>{u=i,i.setValue(t.backgroundColor).onChange((i=>{O=!0,this.dirty=!0,t.backgroundColor=i,[w,y]=e(i),w&&p.setValue(w)}))})).addColorPicker((e=>{p=e,e.setValue(w??"#000000").onChange((e=>{O?O=!1:(this.dirty=!0,t.backgroundColor=e+y,u.setValue(e+y))}))})).addButton((i=>{i.setIcon("swatch-book").onClick((async()=>{const a=await showColorPicker("elementBackground",i.buttonEl,this.view,!0);a&&(g?.setValue(!1),m?.setValue(!1),O=!0,[w,y]=e(a),t.backgroundColor=a,u.setValue(a),w&&p.setValue(w))}))})),d.settingEl.style.display=Boolean(t.backgroundColor)&&"transparent"!==t.backgroundColor?"":"none",f=new obsidian_module.Setting(i).setName("Fill Style").addDropdown((e=>e.addOption("","Unset").addOption("dots","Dots (⚠ VERY SLOW performance on large objects!)").addOption("zigzag","Zigzag").addOption("zigzag-line","Zigzag-line").addOption("dashed","Dashed").addOption("hachure","Hachure").addOption("cross-hatch","Cross-hatch").addOption("solid","Solid").setValue(t.fillStyle).onChange((e=>{this.dirty=!0,t.fillStyle=e})))),f.settingEl.style.display=Boolean(t.backgroundColor)&&"transparent"!==t.backgroundColor?"":"none",v=new obsidian_module.Setting(i).setName(fragWithHTML(`Sloppiness: ${null===t.roughness?"Not Set":t.roughness<=.5?"Architect (":t.roughness<=1.5?"Artist (":"Cartoonist ("}${null===t.roughness?"":`${t.roughness})`}`)).setDesc("Line sloppiness of the shape fill pattern").addSlider((e=>e.setLimits(-.5,3,.5).setValue(null===t.roughness?-.5:t.roughness).onChange((e=>{this.dirty=!0,t.roughness=-.5===e?null:e,v.setName(fragWithHTML(`Sloppiness: ${null===t.roughness?"Not Set":t.roughness<=.5?"Architect (":t.roughness<=1.5?"Artist (":"Cartoonist ("}${null===t.roughness?"":`${t.roughness})`}`))})))),T=new obsidian_module.Setting(i).setName(fragWithHTML(`Stroke Width ${0===t.strokeWidth?"Not Set":t.strokeWidth}`)).addSlider((e=>e.setLimits(.1,8,.1).setValue(t.strokeWidth).onChange((e=>{this.dirty=!0,t.strokeWidth=e,T.setName(fragWithHTML(`Stroke Width ${0===t.strokeWidth?"Not Set":t.strokeWidth}`))})))),new obsidian_module.Setting(i).setName("Highlighter pen?").addToggle((e=>e.setValue(t.penOptions.highlighter).onChange((e=>{this.dirty=!0,t.penOptions.highlighter=e})))),new obsidian_module.Setting(i).setName("Pressure sensitive pen?").setDesc(fragWithHTML("toggle on: pressure sensitive
toggle off: constant pressure")).addToggle((e=>e.setValue(!t.penOptions.constantPressure).onChange((e=>{this.dirty=!0,t.penOptions.constantPressure=!e,S.settingEl.style.display=t.penOptions.constantPressure?"none":""})))),t.penOptions.hasOutline&&0===t.penOptions.outlineWidth&&(t.penOptions.outlineWidth=.5,this.dirty=!0),!t.penOptions.hasOutline&&t.penOptions.outlineWidth>0&&(t.penOptions.outlineWidth=0,this.dirty=!0),_=new obsidian_module.Setting(i).setName(fragWithHTML(0===t.penOptions.outlineWidth?"No outline":`Outline width ${t.penOptions.outlineWidth}`)).setDesc("If the stroke has an outline, this will mean the stroke color is the outline color, and the background color is the pen stroke's fill color. If the pen does not have an outline then the pen color is the stroke color. The Fill Style setting applies to the fill style of the enclosed shape, not of the line itself. The line can only have solid fill.").addSlider((e=>e.setLimits(0,8,.1).setValue(t.penOptions.outlineWidth).onChange((e=>{this.dirty=!0,t.penOptions.outlineWidth=e,t.penOptions.hasOutline=e>0,_.setName(fragWithHTML(0===t.penOptions.outlineWidth?"No outline":`Outline width ${t.penOptions.outlineWidth}`))})))),i.createEl("h2",{text:"Perfect Freehand settings"}),i.createEl("p").innerHTML='Read the Perfect Freehand documentation following this link.',x=new obsidian_module.Setting(i).setName(fragWithHTML(`Thinnning ${t.penOptions.options.thinning}`)).setDesc(fragWithHTML("The effect of pressure on the stroke's size.
To create a stroke with a steady line, set the thinning option to 0.
To create a stroke that gets thinner with pressure instead of thicker, use a negative number for the thinning option.")).addSlider((e=>e.setLimits(-1,1,.05).setValue(t.penOptions.options.thinning).onChange((e=>{this.dirty,x.setName(fragWithHTML(`Thinnning ${e}`)),t.penOptions.options.thinning=e})))),C=new obsidian_module.Setting(i).setName(fragWithHTML(`Smoothing ${t.penOptions.options.smoothing}`)).setDesc(fragWithHTML("How much to soften the stroke's edges.")).addSlider((e=>e.setLimits(0,1,.05).setValue(t.penOptions.options.smoothing).onChange((e=>{this.dirty,C.setName(fragWithHTML(`Smoothing ${e}`)),t.penOptions.options.smoothing=e})))),I=new obsidian_module.Setting(i).setName(fragWithHTML(`Streamline ${t.penOptions.options.streamline}`)).setDesc(fragWithHTML("\tHow much to streamline the stroke.")).addSlider((e=>e.setLimits(0,1,.05).setValue(t.penOptions.options.streamline).onChange((e=>{this.dirty,I.setName(fragWithHTML(`Streamline ${e}`)),t.penOptions.options.streamline=e})))),new obsidian_module.Setting(i).setName("Easing function").setDesc(fragWithHTML('An easing function for the tapering effect. For more info click here')).addDropdown((e=>e.addOptions(EASINGFUNCTIONS).setValue(t.penOptions.options.easing).onChange((e=>{this.dirty=!0,t.penOptions.options.easing=e})))),S=new obsidian_module.Setting(i).setName("Simulate Pressure").setDesc("Whether to simulate pressure based on velocity.").addDropdown((e=>e.addOption("true","Always").addOption("false","Never").addOption("","Yes for mouse, No for pen").setValue(!0===t.penOptions.options.simulatePressure?"true":!1===t.penOptions.options.simulatePressure?"false":"").onChange((e=>{switch(this.dirty=!0,e){case"true":t.penOptions.options.simulatePressure=!0;break;case"false":t.penOptions.options.simulatePressure=!1;break;default:delete t.penOptions.options.simulatePressure}})))),S.settingEl.style.display=t.penOptions.constantPressure?"none":"",i.createEl("h3",{text:"Start"}),i.createEl("p",{text:"Tapering options for the start of the line."}),new obsidian_module.Setting(i).setName("Cap Start").setDesc("Whether to draw a cap").addToggle((e=>e.setValue(t.penOptions.options.start.cap).onChange((e=>{this.dirty=!0,t.penOptions.options.start.cap=e})))),A=new obsidian_module.Setting(i).setName(fragWithHTML(`Taper: ${!0===t.penOptions.options.start.taper?"true":t.penOptions.options.start.taper}`)).setDesc("The distance to taper. If set to true, the taper will be the total length of the stroke.").addSlider((e=>e.setLimits(0,151,1).setValue("boolean"==typeof t.penOptions.options.start.taper?151:t.penOptions.options.start.taper).onChange((e=>{this.dirty,t.penOptions.options.start.taper=151===e||e,A.setName(fragWithHTML(`Taper: ${!0===t.penOptions.options.start.taper?"true":t.penOptions.options.start.taper}`))})))),new obsidian_module.Setting(i).setName("Easing function").setDesc(fragWithHTML('An easing function for the tapering effect. For more info click here')).addDropdown((e=>e.addOptions(EASINGFUNCTIONS).setValue(t.penOptions.options.start.easing).onChange((e=>{this.dirty=!0,t.penOptions.options.start.easing=e})))),i.createEl("h3",{text:"End"}),i.createEl("p",{text:"Tapering options for the end of the line."}),new obsidian_module.Setting(i).setName("Cap End").setDesc("Whether to draw a cap").addToggle((e=>e.setValue(t.penOptions.options.end.cap).onChange((e=>{this.dirty=!0,t.penOptions.options.end.cap=e})))),k=new obsidian_module.Setting(i).setName(fragWithHTML(`Taper: ${!0===t.penOptions.options.end.taper?"true":t.penOptions.options.end.taper}`)).setDesc("The distance to taper. If set to true, the taper will be the total length of the stroke.").addSlider((e=>e.setLimits(0,151,1).setValue("boolean"==typeof t.penOptions.options.end.taper?151:t.penOptions.options.end.taper).onChange((e=>{this.dirty,t.penOptions.options.end.taper=151===e||e,k.setName(fragWithHTML(`Taper: ${!0===t.penOptions.options.end.taper?"true":t.penOptions.options.end.taper}`))})))),new obsidian_module.Setting(i).setName("Easing function").setDesc(fragWithHTML('An easing function for the tapering effect. For more info click here')).addDropdown((e=>e.addOptions(EASINGFUNCTIONS).setValue(t.penOptions.options.end.easing).onChange((e=>{this.dirty=!0,t.penOptions.options.end.easing=e}))))}}const toKebabCase=e=>e.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase(),mergeClasses=(...e)=>e.filter(((e,t,i)=>Boolean(e)&&""!==e.trim()&&i.indexOf(e)===t)).join(" ").trim();var defaultAttributes={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};const Icon=React.forwardRef((({color:e="currentColor",size:t=24,strokeWidth:i=2,absoluteStrokeWidth:a,className:n="",children:r,iconNode:s,...o},l)=>React.createElement("svg",{ref:l,...defaultAttributes,width:t,height:t,stroke:e,strokeWidth:a?24*Number(i)/Number(t):i,className:mergeClasses("lucide",n),...o},[...s.map((([e,t])=>React.createElement(e,t))),...Array.isArray(r)?r:[r]]))),createLucideIcon=(e,t)=>{const i=React.forwardRef((({className:i,...a},n)=>React.createElement(Icon,{ref:n,iconNode:t,className:mergeClasses(`lucide-${toKebabCase(e)}`,i),...a})));return i.displayName=`${e}`,i},__iconNode$8=[["path",{d:"m19 21-7-4-7 4V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2v16z",key:"1fy3hk"}]],Bookmark=createLucideIcon("Bookmark",__iconNode$8),__iconNode$7=[["path",{d:"M14.5 4h-5L7 7H4a2 2 0 0 0-2 2v9a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V9a2 2 0 0 0-2-2h-3l-2.5-3z",key:"1tc9qg"}],["circle",{cx:"12",cy:"13",r:"3",key:"1vg3eu"}]],Camera=createLucideIcon("Camera",__iconNode$7),__iconNode$6=[["rect",{width:"14",height:"14",x:"8",y:"8",rx:"2",ry:"2",key:"17jyea"}],["path",{d:"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2",key:"zix9uf"}]],Copy=createLucideIcon("Copy",__iconNode$6),__iconNode$5=[["path",{d:"M6 2v14a2 2 0 0 0 2 2h14",key:"ron5a4"}],["path",{d:"M18 22V8a2 2 0 0 0-2-2H2",key:"7s9ehn"}]],Crop=createLucideIcon("Crop",__iconNode$5),__iconNode$4=[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20",key:"13o1zl"}],["path",{d:"M2 12h20",key:"9i4pu4"}]],Globe=createLucideIcon("Globe",__iconNode$4),__iconNode$3=[["path",{d:"M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8",key:"1357e3"}],["path",{d:"M3 3v5h5",key:"1xhq8a"}]],RotateCcw=createLucideIcon("RotateCcw",__iconNode$3),__iconNode$2=[["path",{d:"M3 7V5a2 2 0 0 1 2-2h2",key:"aa7l1z"}],["path",{d:"M17 3h2a2 2 0 0 1 2 2v2",key:"4qcy5o"}],["path",{d:"M21 17v2a2 2 0 0 1-2 2h-2",key:"6vwrx8"}],["path",{d:"M7 21H5a2 2 0 0 1-2-2v-2",key:"ioqczr"}]],Scan=createLucideIcon("Scan",__iconNode$2),__iconNode$1=[["path",{d:"M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z",key:"1qme2f"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]],Settings=createLucideIcon("Settings",__iconNode$1),__iconNode=[["path",{d:"M5 3a2 2 0 0 0-2 2",key:"y57alp"}],["path",{d:"M19 3a2 2 0 0 1 2 2",key:"18rm91"}],["path",{d:"M21 19a2 2 0 0 1-2 2",key:"1j7049"}],["path",{d:"M5 21a2 2 0 0 1-2-2",key:"sbafld"}],["path",{d:"M9 3h1",key:"1yesri"}],["path",{d:"M9 21h1",key:"15o7lz"}],["path",{d:"M14 3h1",key:"1ec4yj"}],["path",{d:"M14 21h1",key:"v9vybs"}],["path",{d:"M3 9v1",key:"1r0deq"}],["path",{d:"M21 9v1",key:"mxsmne"}],["path",{d:"M3 14v1",key:"vnatye"}],["path",{d:"M21 14v1",key:"169vum"}],["line",{x1:"7",x2:"15",y1:"8",y2:"8",key:"1758g8"}],["line",{x1:"7",x2:"17",y1:"12",y2:"12",key:"197423"}],["line",{x1:"7",x2:"13",y1:"16",y2:"16",key:"37cgm6"}]],TextSelect=createLucideIcon("TextSelect",__iconNode),ICONS={ExportImage:React__namespace.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"var(--icon-fill-color)",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},React__namespace.createElement("g",{strokeWidth:"1.25"},React__namespace.createElement("path",{stroke:"none",d:"M0 0h24v24H0z",fill:"none"}),React__namespace.createElement("path",{d:"M15 8h.01"}),React__namespace.createElement("path",{d:"M12 20h-5a3 3 0 0 1 -3 -3v-10a3 3 0 0 1 3 -3h10a3 3 0 0 1 3 3v5"}),React__namespace.createElement("path",{d:"M4 15l4 -4c.928 -.893 2.072 -.893 3 0l4 4"}),React__namespace.createElement("path",{d:"M14 14l1 -1c.617 -.593 1.328 -.793 2.009 -.598"}),React__namespace.createElement("path",{d:"M19 16v6"}),React__namespace.createElement("path",{d:"M22 19l-3 3l-3 -3"}))),BackOfNote:React__namespace.createElement(TextSelect,null),Reload:React__namespace.createElement(RotateCcw,null),Copy:React__namespace.createElement(Copy,null),Globe:React__namespace.createElement(Globe,null),Crop:React__namespace.createElement(Crop,null),Bookmark:React__namespace.createElement(Bookmark,null),Camera:React__namespace.createElement(Camera,null),ZoomToSelectedElement:React__namespace.createElement(Scan,null),Properties:React__namespace.createElement(Settings,null),ZoomToSection:React__namespace.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"var(--icon-fill-color)",strokeWidth:"1",strokeLinecap:"round",strokeLinejoin:"round"},React__namespace.createElement("text",{x:"6",y:"18",fontSize:"22px"},"#")),ZoomToBlock:React__namespace.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"var(--icon-fill-color)",strokeWidth:"1",strokeLinecap:"round",strokeLinejoin:"round"},React__namespace.createElement("text",{x:"1",y:"18",fontSize:"22px"},"#^")),Learn:React__namespace.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"var(--icon-fill-color)",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},React__namespace.createElement("path",{d:"M21.42 10.922a1 1 0 0 0-.019-1.838L12.83 5.18a2 2 0 0 0-1.66 0L2.6 9.08a1 1 0 0 0 0 1.832l8.57 3.908a2 2 0 0 0 1.66 0z"}),React__namespace.createElement("path",{d:"M22 10v6"}),React__namespace.createElement("path",{d:"M6 12.5V16a6 3 0 0 0 12 0v-3.5"})),Discord:React__namespace.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",fill:"var(--icon-fill-color)",stroke:"none",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",viewBox:"0 0 640 512"},React__namespace.createElement("path",{d:"M524.531,69.836a1.5,1.5,0,0,0-.764-.7A485.065,485.065,0,0,0,404.081,32.03a1.816,1.816,0,0,0-1.923.91,337.461,337.461,0,0,0-14.9,30.6,447.848,447.848,0,0,0-134.426,0,309.541,309.541,0,0,0-15.135-30.6,1.89,1.89,0,0,0-1.924-.91A483.689,483.689,0,0,0,116.085,69.137a1.712,1.712,0,0,0-.788.676C39.068,183.651,18.186,294.69,28.43,404.354a2.016,2.016,0,0,0,.765,1.375A487.666,487.666,0,0,0,176.02,479.918a1.9,1.9,0,0,0,2.063-.676A348.2,348.2,0,0,0,208.12,430.4a1.86,1.86,0,0,0-1.019-2.588,321.173,321.173,0,0,1-45.868-21.853,1.885,1.885,0,0,1-.185-3.126c3.082-2.309,6.166-4.711,9.109-7.137a1.819,1.819,0,0,1,1.9-.256c96.229,43.917,200.41,43.917,295.5,0a1.812,1.812,0,0,1,1.924.233c2.944,2.426,6.027,4.851,9.132,7.16a1.884,1.884,0,0,1-.162,3.126,301.407,301.407,0,0,1-45.89,21.83,1.875,1.875,0,0,0-1,2.611,391.055,391.055,0,0,0,30.014,48.815,1.864,1.864,0,0,0,2.063.7A486.048,486.048,0,0,0,610.7,405.729a1.882,1.882,0,0,0,.765-1.352C623.729,277.594,590.933,167.465,524.531,69.836ZM222.491,337.58c-28.972,0-52.844-26.587-52.844-59.239S193.056,219.1,222.491,219.1c29.665,0,53.306,26.82,52.843,59.239C275.334,310.993,251.924,337.58,222.491,337.58Zm195.38,0c-28.971,0-52.843-26.587-52.843-59.239S388.437,219.1,417.871,219.1c29.667,0,53.307,26.82,52.844,59.239C470.715,310.993,447.538,337.58,417.871,337.58Z"})),Github:React__namespace.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"var(--icon-fill-color)",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},React__namespace.createElement("path",{d:"M15 22v-4a4.8 4.8 0 0 0-1-3.5c3 0 6-2 6-5.5.08-1.25-.27-2.48-1-3.5.28-1.15.28-2.35 0-3.5 0 0-1 0-3 1.5-2.64-.5-5.36-.5-8 0C6 2 5 2 5 2c-.3 1.15-.3 2.35 0 3.5A5.403 5.403 0 0 0 4 9c0 3.5 3 5.5 6 5.5-.39.49-.68 1.05-.85 1.65-.17.6-.22 1.23-.15 1.85v4"}),React__namespace.createElement("path",{d:"M9 18c-4.51 2-5-2-7-2"})),YouTube:React__namespace.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"var(--icon-fill-color)",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},React__namespace.createElement("path",{d:"M12 19c-2.3 0-6.4-.2-8.1-.6-.7-.2-1.2-.7-1.4-1.4-.3-1.1-.5-3.4-.5-5s.2-3.9.5-5c.2-.7.7-1.2 1.4-1.4C5.6 5.2 9.7 5 12 5s6.4.2 8.1.6c.7.2 1.2.7 1.4 1.4.3 1.1.5 3.4.5 5s-.2 3.9-.5 5c-.2.7-.7 1.2-1.4 1.4-1.7.4-5.8.6-8.1.6 0 0 0 0 0 0z"}),React__namespace.createElement("polygon",{points:"10 15 15 12 10 9"})),heart:React__namespace.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"var(--icon-fill-color)",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},React__namespace.createElement("path",{d:"M20.42 4.58a5.4 5.4 0 0 0-7.65 0l-.77.78-.77-.78a5.4 5.4 0 0 0-7.65 0C1.46 6.7 1.33 10.28 4 13l8 8 8-8c2.67-2.72 2.54-6.3.42-8.42z"})),twitter:React__namespace.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"var(--icon-fill-color)",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},React__namespace.createElement("path",{d:"M22 4s-.7 2.1-2 3.4c1.6 10-9.4 17.3-18 11.6 2.2.1 4.4-.6 6-2C3 15.5.5 9.6 3 5c2.2 2.6 5.6 4.1 9 4-.9-4.2 4-6.6 7-3.8 1.1 0 3-1.2 3-1.2z"})),exportLibrary:React__namespace.createElement("svg",{"aria-hidden":"true",focusable:"false",role:"img",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 200 190",fill:"var(--icon-fill-color)"},React__namespace.createElement("g",{fillRule:"evenodd"},React__namespace.createElement("path",{strokeWidth:"0",d:"M50 10h20v20H50"}),React__namespace.createElement("path",{fill:"none",stroke:"var(--icon-fill-color)",strokeWidth:"2",d:"M50 10h20m-20 0h20m0 0v20m0-20v20m0 0H50m20 0H50m0 0V10m0 20V10"})),React__namespace.createElement("g",{fillRule:"evenodd"},React__namespace.createElement("path",{strokeWidth:"0",d:"M90 10h20v20H90"}),React__namespace.createElement("path",{fill:"none",stroke:"var(--icon-fill-color)",strokeWidth:"2",d:"M90 10h20m-20 0h20m0 0v20m0-20v20m0 0H90m20 0H90m0 0V10m0 20V10"})),React__namespace.createElement("g",{fillRule:"evenodd"},React__namespace.createElement("path",{strokeWidth:"0",d:"M130 10h20v20h-20"}),React__namespace.createElement("path",{fill:"none",stroke:"var(--icon-fill-color)",strokeWidth:"2",d:"M130 10h20m-20 0h20m0 0v20m0-20v20m0 0h-20m20 0h-20m0 0V10m0 20V10"})),React__namespace.createElement("g",{fillRule:"evenodd"},React__namespace.createElement("path",{strokeWidth:"0",d:"M170 10h20v20h-20"}),React__namespace.createElement("path",{fill:"none",stroke:"var(--icon-fill-color)",strokeWidth:"2",d:"M170 10h20m-20 0h20m0 0v20m0-20v20m0 0h-20m20 0h-20m0 0V10m0 20V10"})),React__namespace.createElement("g",{fillRule:"evenodd"},React__namespace.createElement("path",{strokeWidth:"0",d:"M70 50h60v80h20l-50 50-50-50h20V50"}),React__namespace.createElement("path",{fill:"none",stroke:"var(--icon-fill-color)",strokeWidth:"2",d:"M70 50h60m-60 0h60m0 0v80m0-80v80m0 0h20m-20 0h20m0 0-50 50m50-50-50 50m0 0-50-50m50 50-50-50m0 0h20m-20 0h20m0 0V50m0 80V50m0 0s0 0 0 0m0 0s0 0 0 0m0 0s0 0 0 0m0 0s0 0 0 0"})),React__namespace.createElement("g",{fillRule:"evenodd"},React__namespace.createElement("path",{strokeWidth:"0",d:"M10 10h20v20H10"}),React__namespace.createElement("path",{fill:"none",stroke:"var(--icon-fill-color)",strokeWidth:"2",d:"M10 10h20m-20 0h20m0 0v20m0-20v20m0 0H10m20 0H10m0 0V10m0 20V10"}))),insertPDF:React__namespace.createElement("svg",{"aria-hidden":"true",focusable:"false",role:"img",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 512 512",fill:"var(--icon-fill-color)",stroke:"none"},React__namespace.createElement("path",{d:"M64 464H96v48H64c-35.3 0-64-28.7-64-64V64C0 28.7 28.7 0 64 0H229.5c17 0 33.3 6.7 45.3 18.7l90.5 90.5c12 12 18.7 28.3 18.7 45.3V288H336V160H256c-17.7 0-32-14.3-32-32V48H64c-8.8 0-16 7.2-16 16V448c0 8.8 7.2 16 16 16zM176 352h32c30.9 0 56 25.1 56 56s-25.1 56-56 56H192v32c0 8.8-7.2 16-16 16s-16-7.2-16-16V448 368c0-8.8 7.2-16 16-16zm32 80c13.3 0 24-10.7 24-24s-10.7-24-24-24H192v48h16zm96-80h32c26.5 0 48 21.5 48 48v64c0 26.5-21.5 48-48 48H304c-8.8 0-16-7.2-16-16V368c0-8.8 7.2-16 16-16zm32 128c8.8 0 16-7.2 16-16V400c0-8.8-7.2-16-16-16H320v96h16zm80-112c0-8.8 7.2-16 16-16h48c8.8 0 16 7.2 16 16s-7.2 16-16 16H448v32h32c8.8 0 16 7.2 16 16s-7.2 16-16 16H448v48c0 8.8-7.2 16-16 16s-16-7.2-16-16V432 368z"})),insertImage:React__namespace.createElement("svg",{"aria-hidden":"true",focusable:"false",role:"img",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 512 512",fill:"var(--icon-fill-color)",stroke:"none"},React__namespace.createElement("path",{d:"M464 64H48C21.49 64 0 85.49 0 112v288c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V112c0-26.51-21.49-48-48-48zm-6 336H54a6 6 0 0 1-6-6V118a6 6 0 0 1 6-6h404a6 6 0 0 1 6 6v276a6 6 0 0 1-6 6zM128 152c-22.091 0-40 17.909-40 40s17.909 40 40 40 40-17.909 40-40-17.909-40-40-40zM96 352h320v-80l-87.515-87.515c-4.686-4.686-12.284-4.686-16.971 0L192 304l-39.515-39.515c-4.686-4.686-12.284-4.686-16.971 0L96 304v48z"})),insertMD:React__namespace.createElement("svg",{"aria-hidden":"true",focusable:"false",role:"img",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 384 512",fill:"var(--icon-fill-color)",stroke:"none"},React__namespace.createElement("path",{d:"M288 248v28c0 6.6-5.4 12-12 12H108c-6.6 0-12-5.4-12-12v-28c0-6.6 5.4-12 12-12h168c6.6 0 12 5.4 12 12zm-12 72H108c-6.6 0-12 5.4-12 12v28c0 6.6 5.4 12 12 12h168c6.6 0 12-5.4 12-12v-28c0-6.6-5.4-12-12-12zm108-188.1V464c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V48C0 21.5 21.5 0 48 0h204.1C264.8 0 277 5.1 286 14.1L369.9 98c9 8.9 14.1 21.2 14.1 33.9zm-128-80V128h76.1L256 51.9zM336 464V176H232c-13.3 0-24-10.7-24-24V48H48v416h288z"})),insertLaTeX:React__namespace.createElement("svg",{"aria-hidden":"true",focusable:"false",role:"img",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 576 512",stroke:"none",fill:"var(--icon-fill-color)",strokeWidth:"20"},React__namespace.createElement("path",{d:"M571.31 251.31l-22.62-22.62c-6.25-6.25-16.38-6.25-22.63 0L480 274.75l-46.06-46.06c-6.25-6.25-16.38-6.25-22.63 0l-22.62 22.62c-6.25 6.25-6.25 16.38 0 22.63L434.75 320l-46.06 46.06c-6.25 6.25-6.25 16.38 0 22.63l22.62 22.62c6.25 6.25 16.38 6.25 22.63 0L480 365.25l46.06 46.06c6.25 6.25 16.38 6.25 22.63 0l22.62-22.62c6.25-6.25 6.25-16.38 0-22.63L525.25 320l46.06-46.06c6.25-6.25 6.25-16.38 0-22.63zM552 0H307.65c-14.54 0-27.26 9.8-30.95 23.87l-84.79 322.8-58.41-106.1A32.008 32.008 0 0 0 105.47 224H24c-13.25 0-24 10.74-24 24v48c0 13.25 10.75 24 24 24h43.62l88.88 163.73C168.99 503.5 186.3 512 204.94 512c17.27 0 44.44-9 54.28-41.48L357.03 96H552c13.25 0 24-10.75 24-24V24c0-13.26-10.75-24-24-24z"})),insertLink:React__namespace.createElement("svg",{"aria-hidden":"true",focusable:"false",role:"img",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 512 512",stroke:"none",fill:"var(--icon-fill-color)",strokeWidth:"20"},React__namespace.createElement("path",{d:"M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z"})),search:React__namespace.createElement("svg",{"aria-hidden":"true",focusable:"false",role:"img",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 512 512",stroke:"var(--icon-fill-color)",fill:"var(--icon-fill-color)",strokeWidth:"20"},React__namespace.createElement("path",{d:"M500.3 443.7l-119.7-119.7c27.22-40.41 40.65-90.9 33.46-144.7C401.8 87.79 326.8 13.32 235.2 1.723C99.01-15.51-15.51 99.01 1.724 235.2c11.6 91.64 86.08 166.7 177.6 178.9c53.8 7.189 104.3-6.236 144.7-33.46l119.7 119.7c15.62 15.62 40.95 15.62 56.57 0C515.9 484.7 515.9 459.3 500.3 443.7zM79.1 208c0-70.58 57.42-128 128-128s128 57.42 128 128c0 70.58-57.42 128-128 128S79.1 278.6 79.1 208z"})),ocr:React__namespace.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"var(--icon-fill-color)",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},React__namespace.createElement("path",{d:"m6 18 6-12 6 12"}),React__namespace.createElement("path",{d:"M8 14h8"}),React__namespace.createElement("path",{d:"M3 7V5a2 2 0 0 1 2-2h2"}),React__namespace.createElement("path",{d:"M17 3h2a2 2 0 0 1 2 2v2"}),React__namespace.createElement("path",{d:"M21 17v2a2 2 0 0 1-2 2h-2"}),React__namespace.createElement("path",{d:"M7 21H5a2 2 0 0 1-2-2v-2"})),scriptEngine:React__namespace.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 100 100",stroke:"var(--icon-fill-color)",fill:"var(--icon-fill-color)",strokeLinecap:"round",strokeWidth:"4"},React__namespace.createElement("g",{transform:"translate(-8,-8)"},React__namespace.createElement("path",{d:"M24.318 37.983c-1.234-1.232-8.433-3.903-7.401-7.387 1.057-3.484 9.893-12.443 13.669-13.517 3.776-1.074 6.142 6.523 9.012 7.073 2.87.55 6.797-1.572 8.207-3.694 1.384-2.148-3.147-7.413.15-9.168 3.298-1.755 16.389-2.646 19.611-1.284 3.247 1.363-1.611 7.335-.151 9.483 1.46 2.148 6.067 3.746 8.836 3.38 2.769-.368 4.154-6.733 7.728-5.633 3.575 1.1 12.36 8.828 13.67 12.233 1.308 3.406-5.186 5.423-5.79 8.2-.58 2.75-.026 6.705 2.265 8.355 2.266 1.65 9.642-1.78 11.404 1.598 1.762 3.38 1.007 15.35-.806 18.651-1.787 3.353-7.753-.367-9.969 1.31-2.215 1.65-3.901 5.92-3.373 8.67.504 2.777 7.754 4.48 6.445 7.885C96.49 87.543 87.15 95.454 83.5 96.685c-3.65 1.231-4.96-4.741-7.577-5.16-2.593-.393-6.57.707-8.03 2.75-1.436 2.017 2.668 7.806-.63 9.483-3.323 1.676-15.759 2.226-19.157.655-3.373-1.598.554-7.964-1.108-10.138-1.687-2.174-6.394-3.431-9.012-2.907-2.643.55-3.273 7.282-6.747 6.103-3.499-1.126-12.788-9.535-14.172-13.019-1.36-3.484 5.437-5.108 5.966-7.858.529-2.777-.68-7.073-2.744-8.697-2.064-1.624-7.93 2.41-9.642-1.126-1.737-3.537-2.441-16.765-.654-20.118 1.787-3.3 9.062 1.598 11.429.183 2.366-1.44 2.316-7.282 2.769-8.749m.126-.104c-1.234-1.232-8.433-3.903-7.401-7.387 1.057-3.484 9.893-12.443 13.669-13.517 3.776-1.074 6.142 6.523 9.012 7.073 2.87.55 6.797-1.572 8.207-3.694 1.384-2.148-3.147-7.413.15-9.168 3.298-1.755 16.389-2.646 19.611-1.284 3.247 1.363-1.611 7.335-.151 9.483 1.46 2.148 6.067 3.746 8.836 3.38 2.769-.368 4.154-6.733 7.728-5.633 3.575 1.1 12.36 8.828 13.67 12.233 1.308 3.406-5.186 5.423-5.79 8.2-.58 2.75-.026 6.705 2.265 8.355 2.266 1.65 9.642-1.78 11.404 1.598 1.762 3.38 1.007 15.35-.806 18.651-1.787 3.353-7.753-.367-9.969 1.31-2.215 1.65-3.901 5.92-3.373 8.67.504 2.777 7.754 4.48 6.445 7.885C96.49 87.543 87.15 95.454 83.5 96.685c-3.65 1.231-4.96-4.741-7.577-5.16-2.593-.393-6.57.707-8.03 2.75-1.436 2.017 2.668 7.806-.63 9.483-3.323 1.676-15.759 2.226-19.157.655-3.373-1.598.554-7.964-1.108-10.138-1.687-2.174-6.394-3.431-9.012-2.907-2.643.55-3.273 7.282-6.747 6.103-3.499-1.126-12.788-9.535-14.172-13.019-1.36-3.484 5.437-5.108 5.966-7.858.529-2.777-.68-7.073-2.744-8.697-2.064-1.624-7.93 2.41-9.642-1.126-1.737-3.537-2.441-16.765-.654-20.118 1.787-3.3 9.062 1.598 11.429.183 2.366-1.44 2.316-7.282 2.769-8.749",fill:"none",strokeWidth:"2"}),React__namespace.createElement("path",{d:"M81.235 56.502a23.3 23.3 0 0 1-1.46 8.068 20.785 20.785 0 0 1-1.762 3.72 24.068 24.068 0 0 1-5.337 6.26 22.575 22.575 0 0 1-3.449 2.358 23.726 23.726 0 0 1-7.803 2.803 24.719 24.719 0 0 1-8.333 0 24.102 24.102 0 0 1-4.028-1.074 23.71 23.71 0 0 1-3.776-1.729 23.259 23.259 0 0 1-6.369-5.265 23.775 23.775 0 0 1-2.416-3.353 24.935 24.935 0 0 1-1.762-3.72 23.765 23.765 0 0 1-1.083-3.981 23.454 23.454 0 0 1 0-8.173c.252-1.336.604-2.698 1.083-3.956a24.935 24.935 0 0 1 1.762-3.72 22.587 22.587 0 0 1 2.416-3.378c.881-1.048 1.888-2.017 2.946-2.908a24.38 24.38 0 0 1 3.423-2.357 23.71 23.71 0 0 1 3.776-1.73 21.74 21.74 0 0 1 4.028-1.047 23.437 23.437 0 0 1 8.333 0 24.282 24.282 0 0 1 7.803 2.777 26.198 26.198 0 0 1 3.45 2.357 24.62 24.62 0 0 1 5.336 6.287 20.785 20.785 0 0 1 1.762 3.72 21.32 21.32 0 0 1 1.083 3.955c.251 1.336.302 3.405.377 4.086.05.681.05-.68 0 0",fill:"none"}),React__namespace.createElement("path",{d:"M69.404 56.633c-6.596-3.3-13.216-6.6-19.51-9.744m19.51 9.744c-6.747-3.379-13.493-6.758-19.51-9.744m0 0v19.489m0-19.49v19.49m0 0c4.355-2.148 8.71-4.322 19.51-9.745m-19.51 9.745c3.978-1.965 7.93-3.956 19.51-9.745m0 0h0m0 0h0"}))),openLink:React__namespace.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"var(--icon-fill-color)",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},React__namespace.createElement("path",{d:"M4 22h14a2 2 0 0 0 2-2V7.5L14.5 2H6a2 2 0 0 0-2 2v7"}),React__namespace.createElement("polyline",{points:"14 2 14 8 20 8"}),React__namespace.createElement("path",{d:"m10 18 3-3-3-3"}),React__namespace.createElement("path",{d:"M4 18v-1a2 2 0 0 1 2-2h6"})),openLinkProperties:React__namespace.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"var(--icon-fill-color)",strokeWidth:"3",strokeLinecap:"round",strokeLinejoin:"round"},React__namespace.createElement("path",{d:"M10 12.5 8 15l2 2.5"}),React__namespace.createElement("path",{d:"m14 12.5 2 2.5-2 2.5"}),React__namespace.createElement("path",{d:"M14 2v4a2 2 0 0 0 2 2h4"}),React__namespace.createElement("path",{d:"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7z"})),switchToMarkdown:React__namespace.createElement("svg",{"aria-hidden":"true",focusable:"false",role:"img",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 640 512",stroke:"var(--icon-fill-color)",strokeWidth:"10",fill:"var(--icon-fill-color)"},React__namespace.createElement("path",{d:"M593.8 59.1H46.2C20.7 59.1 0 79.8 0 105.2v301.5c0 25.5 20.7 46.2 46.2 46.2h547.7c25.5 0 46.2-20.7 46.1-46.1V105.2c0-25.4-20.7-46.1-46.2-46.1zM338.5 360.6H277v-120l-61.5 76.9-61.5-76.9v120H92.3V151.4h61.5l61.5 76.9 61.5-76.9h61.5v209.2zm135.3 3.1L381.5 256H443V151.4h61.5V256H566z"})),gotoFullScreen:React__namespace.createElement("svg",{"aria-hidden":"true",focusable:"false",role:"img",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 448 512",stroke:"var(--icon-fill-color)",fill:"var(--icon-fill-color)",strokeWidth:"20"},React__namespace.createElement("path",{d:"M128 32H32C14.31 32 0 46.31 0 64v96c0 17.69 14.31 32 32 32s32-14.31 32-32V96h64c17.69 0 32-14.31 32-32S145.7 32 128 32zM416 32h-96c-17.69 0-32 14.31-32 32s14.31 32 32 32h64v64c0 17.69 14.31 32 32 32s32-14.31 32-32V64C448 46.31 433.7 32 416 32zM128 416H64v-64c0-17.69-14.31-32-32-32s-32 14.31-32 32v96c0 17.69 14.31 32 32 32h96c17.69 0 32-14.31 32-32S145.7 416 128 416zM416 320c-17.69 0-32 14.31-32 32v64h-64c-17.69 0-32 14.31-32 32s14.31 32 32 32h96c17.69 0 32-14.31 32-32v-96C448 334.3 433.7 320 416 320z"})),exitFullScreen:React__namespace.createElement("svg",{"aria-hidden":"true",focusable:"false",role:"img",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 448 512",stroke:"var(--icon-fill-color)",fill:"var(--icon-fill-color)",strokeWidth:"20"},React__namespace.createElement("path",{d:"M128 320H32c-17.69 0-32 14.31-32 32s14.31 32 32 32h64v64c0 17.69 14.31 32 32 32s32-14.31 32-32v-96C160 334.3 145.7 320 128 320zM416 320h-96c-17.69 0-32 14.31-32 32v96c0 17.69 14.31 32 32 32s32-14.31 32-32v-64h64c17.69 0 32-14.31 32-32S433.7 320 416 320zM320 192h96c17.69 0 32-14.31 32-32s-14.31-32-32-32h-64V64c0-17.69-14.31-32-32-32s-32 14.31-32 32v96C288 177.7 302.3 192 320 192zM128 32C110.3 32 96 46.31 96 64v64H32C14.31 128 0 142.3 0 160s14.31 32 32 32h96c17.69 0 32-14.31 32-32V64C160 46.31 145.7 32 128 32z"})),releaseNotes:React__namespace.createElement("svg",{"aria-hidden":"true",focusable:"false",role:"img",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 512 512",stroke:"var(--icon-fill-color)",fill:"var(--icon-fill-color)",strokeWidth:"20"},React__namespace.createElement("path",{d:"M0 219.2v212.5c0 14.25 11.62 26.25 26.5 27C75.32 461.2 180.2 471.3 240 511.9V245.2C181.4 205.5 79.99 194.8 29.84 192C13.59 191.1 0 203.6 0 219.2zM482.2 192c-50.09 2.848-151.3 13.47-209.1 53.09C272.1 245.2 272 245.3 272 245.5v266.5c60.04-40.39 164.7-50.76 213.5-53.28C500.4 457.9 512 445.9 512 431.7V219.2C512 203.6 498.4 191.1 482.2 192zM352 96c0-53-43-96-96-96S160 43 160 96s43 96 96 96S352 149 352 96z"})),rawMode:React__namespace.createElement("svg",{"aria-hidden":"true",focusable:"false",role:"img",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 100 60"},React__namespace.createElement("path",{stroke:"var(--icon-fill-color)",strokeWidth:"4",d:"M20 10H10m10 0H10m0 0v40m0-40v40m0 0h10m-10 0h10M40 10H30m10 0H30m0 0v40m0-40v40m0 0h10m-10 0h10M60 10h10m-10 0h10m0 0v40m0-40v40m0 0H60m10 0H60M80 10h10m-10 0h10m0 0v40m0-40v40m0 0H80m10 0H80"})),parsedMode:React__namespace.createElement("svg",{"aria-hidden":"true",focusable:"false",role:"img",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 576 512",stroke:"var(--icon-fill-color)",strokeWidth:"20"},React__namespace.createElement("path",{d:"M574.1 280.4l-45.38-181.8c-5.875-23.63-21.62-44-43-55.75c-21.5-11.75-46.1-14.13-70.25-6.375l-15.25 5.125c-8.375 2.75-12.87 11.88-10 20.25l5 15.13c2.75 8.375 11.88 12.88 20.25 10.13l13.12-4.375c10.88-3.625 23-3.625 33.25 1.75c10.25 5.375 17.5 14.5 20.38 25.75l38.38 153.9c-22.12-6.875-49.75-12.5-81.13-12.5c-34.88 0-73.1 7-114.9 26.75H251.4C210.5 258.6 171.4 251.6 136.5 251.6c-31.38 0-59 5.625-81.12 12.5l38.38-153.9c2.875-11.25 10.12-20.38 20.5-25.75C124.4 79.12 136.5 79.12 147.4 82.74l13.12 4.375c8.375 2.75 17.5-1.75 20.25-10.13l5-15.13C188.6 53.49 184.1 44.37 175.6 41.62l-15.25-5.125c-23.13-7.75-48.75-5.375-70.13 6.375c-21.37 11.75-37.12 32.13-43 55.75L1.875 280.4C.6251 285.4 .0001 290.6 .0001 295.9v70.25C.0001 428.1 51.63 480 115.3 480h37.13c60.25 0 110.4-46 114.9-105.4l2.875-38.63h35.75l2.875 38.63C313.3 433.1 363.4 480 423.6 480h37.13c63.62 0 115.2-51 115.2-113.9V295.9C576 290.6 575.4 285.5 574.1 280.4zM203.4 369.7c-2 26-24.38 46.25-51 46.25H115.2C87 415.1 64 393.6 64 366.1v-37.5c18.12-6.5 43.38-13 72.62-13c23.88 0 47.25 4.375 69.88 13L203.4 369.7zM512 366.1c0 27.5-23 49.88-51.25 49.88h-37.13c-26.62 0-49-20.25-51-46.25l-3.125-41.13c22.62-8.625 46.13-13 70-13c29 0 54.38 6.5 72.5 13V366.1z"})),convertFile:React__namespace.createElement("svg",{"aria-hidden":"true",focusable:"false",role:"img",viewBox:"0 110 700 340",xmlns:"http://www.w3.org/2000/svg",stroke:"var(--icon-fill-color)",strokeWidth:"20"},React__namespace.createElement("path",{d:"m593.95 239.4v-1.5742c-0.85547-1.8828-2.043-3.6016-3.5-5.0742l-52.5-52.5c-1.4688-1.457-3.1875-2.6445-5.0742-3.5h-1.5742c-1.4727-0.49219-3.0039-0.78516-4.5508-0.875h-124.25c-4.6406 0-9.0938 1.8438-12.375 5.125s-5.125 7.7344-5.125 12.375v87.5h-70v-105.88-1.0508c-0.089844-1.5469-0.38281-3.0781-0.875-4.5508v-1.5742c-0.85547-1.8828-2.043-3.6016-3.5-5.0742l-52.5-52.5c-1.4727-1.457-3.1914-2.6445-5.0742-3.5h-1.5742c-1.7031-0.875-3.5352-1.4688-5.4258-1.75h-123.55c-4.6406 0-9.0938 1.8438-12.375 5.125s-5.125 7.7344-5.125 12.375v245c0 4.6406 1.8438 9.0938 5.125 12.375s7.7344 5.125 12.375 5.125h175c4.6406 0 9.0938-1.8438 12.375-5.125s5.125-7.7344 5.125-12.375v-52.5h70v122.5c0 4.6406 1.8438 9.0938 5.125 12.375s7.7344 5.125 12.375 5.125h175c4.6406 0 9.0938-1.8438 12.375-5.125s5.125-7.7344 5.125-12.375v-192.5-1.0508c-0.14453-1.5547-0.5-3.0859-1.0508-4.5508zm-313.95 110.6h-140v-210h87.5v35c0 4.6406 1.8438 9.0938 5.125 12.375s7.7344 5.125 12.375 5.125h35v87.5h-52.5c-6.2539 0-12.031 3.3359-15.156 8.75s-3.125 12.086 0 17.5 8.9023 8.75 15.156 8.75h52.5zm140 70v-105h27.824l-5.0742 5.0742c-3.7031 3.1719-5.9141 7.7461-6.1055 12.617-0.1875 4.8711 1.668 9.6016 5.1133 13.051 3.4492 3.4453 8.1797 5.3008 13.051 5.1133 4.8711-0.19141 9.4453-2.4023 12.617-6.1055l35-35c3.2578-3.2773 5.0898-7.7148 5.0898-12.336 0-4.625-1.832-9.0586-5.0898-12.34l-35-35c-4.5078-3.8555-10.66-5.1719-16.348-3.4883-5.6875 1.6797-10.137 6.1289-11.816 11.816-1.6836 5.6914-0.37109 11.844 3.4883 16.348l5.0742 5.0742h-27.824v-69.824h87.5v35c0 4.6406 1.8438 9.0938 5.125 12.375s7.7344 5.125 12.375 5.125h35v157.5z"})),cog:React__namespace.createElement("svg",{"aria-hidden":"true",focusable:"false",role:"img",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 512 512",fill:"var(--icon-fill-color)",stroke:"none"},React__namespace.createElement("path",{d:"M495.9 166.6C499.2 175.2 496.4 184.9 489.6 191.2L446.3 230.6C447.4 238.9 448 247.4 448 256C448 264.6 447.4 273.1 446.3 281.4L489.6 320.8C496.4 327.1 499.2 336.8 495.9 345.4C491.5 357.3 486.2 368.8 480.2 379.7L475.5 387.8C468.9 398.8 461.5 409.2 453.4 419.1C447.4 426.2 437.7 428.7 428.9 425.9L373.2 408.1C359.8 418.4 344.1 427 329.2 433.6L316.7 490.7C314.7 499.7 307.7 506.1 298.5 508.5C284.7 510.8 270.5 512 255.1 512C241.5 512 227.3 510.8 213.5 508.5C204.3 506.1 197.3 499.7 195.3 490.7L182.8 433.6C167 427 152.2 418.4 138.8 408.1L83.14 425.9C74.3 428.7 64.55 426.2 58.63 419.1C50.52 409.2 43.12 398.8 36.52 387.8L31.84 379.7C25.77 368.8 20.49 357.3 16.06 345.4C12.82 336.8 15.55 327.1 22.41 320.8L65.67 281.4C64.57 273.1 64 264.6 64 256C64 247.4 64.57 238.9 65.67 230.6L22.41 191.2C15.55 184.9 12.82 175.3 16.06 166.6C20.49 154.7 25.78 143.2 31.84 132.3L36.51 124.2C43.12 113.2 50.52 102.8 58.63 92.95C64.55 85.8 74.3 83.32 83.14 86.14L138.8 103.9C152.2 93.56 167 84.96 182.8 78.43L195.3 21.33C197.3 12.25 204.3 5.04 213.5 3.51C227.3 1.201 241.5 0 256 0C270.5 0 284.7 1.201 298.5 3.51C307.7 5.04 314.7 12.25 316.7 21.33L329.2 78.43C344.1 84.96 359.8 93.56 373.2 103.9L428.9 86.14C437.7 83.32 447.4 85.8 453.4 92.95C461.5 102.8 468.9 113.2 475.5 124.2L480.2 132.3C486.2 143.2 491.5 154.7 495.9 166.6V166.6zM256 336C300.2 336 336 300.2 336 255.1C336 211.8 300.2 175.1 256 175.1C211.8 175.1 176 211.8 176 255.1C176 300.2 211.8 336 256 336z"})),trayMode:React__namespace.createElement("svg",{"aria-hidden":"true",focusable:"false",role:"img",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 640 512",stroke:"var(--icon-fill-color)",fill:"var(--icon-fill-color)",strokeWidth:"20"},React__namespace.createElement("path",{d:"M618.1 97.67c-13.02-4.375-27.45 .1562-35.72 11.16L464 266.7l-118.4-157.8c-8.266-11.03-22.64-15.56-35.72-11.16C296.8 102 288 114.2 288 128v256c0 17.69 14.33 32 32 32s32-14.31 32-32v-160l86.41 115.2c12.06 16.12 39.13 16.12 51.19 0L576 224v160c0 17.69 14.33 32 32 32s32-14.31 32-32v-256C640 114.2 631.2 102 618.1 97.67zM224 96.01H32c-17.67 0-32 14.31-32 32s14.33 32 32 32h64v223.1c0 17.69 14.33 31.99 32 31.99s32-14.3 32-31.99V160h64c17.67 0 32-14.31 32-32S241.7 96.01 224 96.01z"})),copyElementLink:React__namespace.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 260 260","aria-hidden":"true",focusable:"false",role:"img"},React__namespace.createElement("path",{stroke:"var(--icon-fill-color)",fill:"none",strokeLinecap:"round",strokeWidth:"8",d:"M10 10h40m-40 0h40m0 0v40m0-40v40m0 0H10m40 0H10m0 0V10m0 40V10M210 10h40m-40 0h40m0 0v40m0-40v40m0 0h-40m40 0h-40m0 0V10m0 40V10M210 210h40m-40 0h40m0 0v40m0-40v40m0 0h-40m40 0h-40m0 0v-40m0 40v-40M10 210h40m-40 0h40m0 0v40m0-40v40m0 0H10m40 0H10m0 0v-40m0 40v-40M30 210V50m0 160V50M50 30h160M50 30h160M230 50v160m0-160v160M50 230h160m-160 0h160"}),React__namespace.createElement("path",{stroke:"var(--icon-fill-color)",fill:"none",strokeLinecap:"round",strokeWidth:"16",d:"M110 90c-6.67 1.67-30 3.11-40 10-10 6.89-20 21.37-20 31.37S60 153.56 70 160c10 6.44 33.33 8.33 40 10m0-80c-6.67 1.67-30 3.11-40 10-10 6.89-20 21.37-20 31.37S60 153.56 70 160c10 6.44 33.33 8.33 40 10M150 90c6.67 1.67 30 3.11 40 10 10 6.89 20 21.37 20 31.37s-10 22.19-20 28.63c-10 6.44-33.33 8.33-40 10m0-80c6.67 1.67 30 3.11 40 10 10 6.89 20 21.37 20 31.37s-10 22.19-20 28.63c-10 6.44-33.33 8.33-40 10"}),React__namespace.createElement("path",{stroke:"var(--icon-fill-color)",fill:"none",strokeLinecap:"round",strokeWidth:"16",d:"M89.868 130.198c13.36-.03 66.78-.17 80.13-.2m-80.13.2c13.36-.03 66.78-.17 80.13-.2"})),importSVG:React__namespace.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 526 526"},React__namespace.createElement("g",{fillRule:"evenodd",strokeLinecap:"round"},React__namespace.createElement("path",{fill:"var(--input-bg-color)",strokeWidth:"0",d:"m133.462 71 .33-6.54.97-6.34 1.58-6.13 2.16-5.88 2.69-5.6 3.21-5.27 3.69-4.93 4.13-4.55 4.55-4.13 4.93-3.69 5.27-3.21 5.6-2.69 5.88-2.16 6.13-1.58 6.34-.97 6.54-.33h160v128l.16 3.28.49 3.18.79 3.07 1.07 2.94 1.35 2.8 1.6 2.63 1.84 2.47 2.06 2.27 2.27 2.06 2.47 1.84 2.63 1.6 2.8 1.35 2.94 1.07 3.07.79 3.18.49 3.28.16h128v288l-.33 6.54-.97 6.34-1.58 6.13-2.16 5.88-2.69 5.6-3.21 5.27-3.69 4.93-4.13 4.55-4.55 4.13-4.93 3.69-5.27 3.21-5.6 2.69-5.88 2.16-6.13 1.58-6.34.97-6.54.33h-256l-6.54-.33-6.34-.97-6.13-1.58-5.88-2.16-5.6-2.69-5.27-3.21-4.93-3.69-4.55-4.13-4.13-4.55-3.69-4.93-3.21-5.27-2.69-5.6-2.16-5.88-1.58-6.13-.97-6.34-.33-6.54V343h174.1l-39 39-1.65 1.83-1.43 1.94-1.22 2.05-.99 2.13-.77 2.2-.55 2.25-.33 2.29-.11 2.3.11 2.3.33 2.28.55 2.24.77 2.19.99 2.12 1.22 2.04 1.43 1.93 1.65 1.81 1.83 1.64 1.94 1.42 2.05 1.2 2.13.99 2.2.76 2.25.56 2.29.33 2.3.11 2.3-.1 2.28-.33 2.24-.54 2.19-.77 2.12-.98 2.04-1.21 1.93-1.43 1.81-1.65 80-80 1.65-1.83 1.43-1.94 1.22-2.05.99-2.13.77-2.2.55-2.25.33-2.29.11-2.3-.11-2.3-.33-2.28-.55-2.24-.77-2.19-.99-2.12-1.22-2.04-1.43-1.93-1.65-1.81-80-80-1.83-1.65-1.94-1.43-2.05-1.22-2.13-.99-2.2-.77-2.25-.55-2.29-.33-2.3-.11-2.3.11-2.28.33-2.24.55-2.19.77-2.12.99-2.04 1.22-1.93 1.43-1.81 1.65-1.64 1.83-1.42 1.94-1.2 2.05-.99 2.13-.76 2.2-.56 2.25-.33 2.29-.11 2.3.1 2.3.33 2.28.54 2.24.77 2.19.98 2.12 1.21 2.04 1.43 1.93 1.65 1.81 39 39h-174.1V71"}),React__namespace.createElement("path",{fill:"none",stroke:"var(--icon-fill-color)",strokeWidth:"18",d:"M133.462 71s0 0 0 0m0 0s0 0 0 0m0 0 .33-6.54m-.33 6.54c.13-2.57.26-5.13.33-6.54m0 0c.36-2.33.72-4.67.97-6.34m-.97 6.34c.35-2.26.69-4.53.97-6.34m0 0c.51-1.99 1.03-3.98 1.58-6.13m-1.58 6.13c.4-1.56.81-3.12 1.58-6.13m0 0c.81-2.22 1.62-4.43 2.16-5.88m-2.16 5.88c.45-1.22.9-2.44 2.16-5.88m0 0c.72-1.51 1.45-3.01 2.69-5.6m-2.69 5.6c.69-1.45 1.39-2.9 2.69-5.6m0 0c.93-1.52 1.86-3.05 3.21-5.27m-3.21 5.27c.97-1.59 1.94-3.18 3.21-5.27m0 0c.86-1.15 1.71-2.29 3.69-4.93m-3.69 4.93c.78-1.04 1.56-2.08 3.69-4.93m0 0c1.53-1.69 3.07-3.38 4.13-4.55m-4.13 4.55c1.54-1.69 3.07-3.38 4.13-4.55m0 0c1.03-.93 2.06-1.87 4.55-4.13m-4.55 4.13c.98-.89 1.97-1.78 4.55-4.13m0 0c1.64-1.23 3.28-2.46 4.93-3.69m-4.93 3.69c1.72-1.29 3.45-2.58 4.93-3.69m0 0c1.11-.68 2.23-1.35 5.27-3.21m-5.27 3.21c1.5-.91 3.01-1.83 5.27-3.21m0 0c1.87-.89 3.73-1.79 5.6-2.69m-5.6 2.69c2.09-1 4.17-2.01 5.6-2.69m0 0c1.72-.64 3.44-1.27 5.88-2.16m-5.88 2.16c1.94-.72 3.89-1.43 5.88-2.16m0 0c2.3-.59 4.6-1.19 6.13-1.58m-6.13 1.58c2.32-.6 4.65-1.2 6.13-1.58m0 0c2.06-.31 4.12-.63 6.34-.97m-6.34.97c2.34-.36 4.69-.72 6.34-.97m0 0c2.05-.1 4.09-.21 6.54-.33m-6.54.33c2.06-.1 4.12-.21 6.54-.33m0 0h160m-160 0h160m0 0v128m0-128v128m0 0s0 0 0 0m0 0s0 0 0 0m0 0 .16 3.28m-.16-3.28c.06 1.16.12 2.32.16 3.28m0 0c.13.82.26 1.64.49 3.18m-.49-3.18c.18 1.13.35 2.26.49 3.18m0 0c.24.95.49 1.91.79 3.07m-.79-3.07c.28 1.1.56 2.2.79 3.07m0 0c.39 1.06.78 2.13 1.07 2.94m-1.07-2.94c.42 1.15.84 2.3 1.07 2.94m0 0c.38.79.76 1.57 1.35 2.8m-1.35-2.8c.4.82.79 1.64 1.35 2.8m0 0c.45.75.91 1.5 1.6 2.63m-1.6-2.63c.4.65.8 1.31 1.6 2.63m0 0c.56.76 1.13 1.52 1.84 2.47m-1.84-2.47c.58.79 1.17 1.57 1.84 2.47m0 0c.75.82 1.5 1.65 2.06 2.27m-2.06-2.27c.75.82 1.5 1.65 2.06 2.27m0 0c.74.66 1.47 1.33 2.27 2.06m-2.27-2.06c.89.81 1.78 1.61 2.27 2.06m0 0c.69.51 1.37 1.02 2.47 1.84m-2.47-1.84c.68.5 1.35 1.01 2.47 1.84m0 0c.81.49 1.62.99 2.63 1.6m-2.63-1.6c.74.45 1.47.9 2.63 1.6m0 0c.72.35 1.43.69 2.8 1.35m-2.8-1.35c.61.3 1.22.59 2.8 1.35m0 0c.85.31 1.69.62 2.94 1.07m-2.94-1.07c1.03.38 2.07.75 2.94 1.07m0 0c.83.22 1.67.43 3.07.79m-3.07-.79 3.07.79m0 0c1.07.16 2.14.33 3.18.49m-3.18-.49c1.2.18 2.39.36 3.18.49m0 0 3.28.16m-3.28-.16c.97.04 1.93.09 3.28.16m0 0h128m-128 0h128m0 0v288m0-288v288m0 0s0 0 0 0m0 0s0 0 0 0m0 0c-.1 2.02-.2 4.04-.33 6.54m.33-6.54c-.13 2.52-.26 5.05-.33 6.54m0 0c-.33 2.14-.66 4.29-.97 6.34m.97-6.34c-.32 2.06-.63 4.12-.97 6.34m0 0c-.59 2.28-1.17 4.55-1.58 6.13m1.58-6.13c-.53 2.07-1.07 4.14-1.58 6.13m0 0c-.73 1.99-1.46 3.97-2.16 5.88m2.16-5.88c-.72 1.97-1.44 3.94-2.16 5.88m0 0c-.94 1.97-1.89 3.93-2.69 5.6m2.69-5.6c-.91 1.89-1.82 3.77-2.69 5.6m0 0c-.89 1.46-1.78 2.92-3.21 5.27m3.21-5.27c-.65 1.05-1.29 2.11-3.21 5.27m0 0c-1.13 1.51-2.25 3.01-3.69 4.93m3.69-4.93c-1.29 1.72-2.58 3.44-3.69 4.93m0 0c-1.29 1.42-2.58 2.84-4.13 4.55m4.13-4.55-4.13 4.55m0 0-4.55 4.13m4.55-4.13-4.55 4.13m0 0c-1.2.9-2.41 1.8-4.93 3.69m4.93-3.69-4.93 3.69m0 0c-1.56.95-3.13 1.9-5.27 3.21m5.27-3.21c-1.99 1.21-3.98 2.42-5.27 3.21m0 0c-1.8.86-3.6 1.73-5.6 2.69m5.6-2.69c-1.34.64-2.67 1.28-5.6 2.69m0 0c-2.24.82-4.48 1.65-5.88 2.16m5.88-2.16c-1.38.51-2.77 1.02-5.88 2.16m0 0c-1.46.38-2.93.76-6.13 1.58m6.13-1.58c-1.54.4-3.09.79-6.13 1.58m0 0c-2.12.32-4.24.65-6.34.97m6.34-.97c-2.47.38-4.94.75-6.34.97m0 0c-2.23.11-4.46.22-6.54.33m6.54-.33c-1.97.1-3.93.2-6.54.33m0 0h-256m256 0h-256m0 0s0 0 0 0m0 0s0 0 0 0m0 0c-2.33-.12-4.66-.24-6.54-.33m6.54.33c-1.33-.07-2.65-.13-6.54-.33m0 0c-1.88-.29-3.77-.58-6.34-.97m6.34.97c-2.07-.32-4.14-.63-6.34-.97m0 0c-1.52-.39-3.04-.79-6.13-1.58m6.13 1.58c-2.02-.52-4.04-1.04-6.13-1.58m0 0c-1.6-.59-3.19-1.17-5.88-2.16m5.88 2.16c-1.9-.7-3.8-1.39-5.88-2.16m0 0c-1.41-.68-2.82-1.36-5.6-2.69m5.6 2.69c-1.6-.77-3.2-1.54-5.6-2.69m0 0c-1.4-.86-2.81-1.71-5.27-3.21m5.27 3.21c-2.08-1.27-4.17-2.54-5.27-3.21m0 0c-1.72-1.29-3.43-2.57-4.93-3.69m4.93 3.69c-1.79-1.34-3.57-2.67-4.93-3.69m0 0c-1.18-1.07-2.36-2.15-4.55-4.13m4.55 4.13c-1.64-1.49-3.27-2.97-4.55-4.13m0 0c-1.07-1.19-2.15-2.37-4.13-4.55m4.13 4.55c-1.46-1.61-2.93-3.23-4.13-4.55m0 0-3.69-4.93m3.69 4.93c-.88-1.17-1.76-2.35-3.69-4.93m0 0c-.83-1.37-1.67-2.75-3.21-5.27m3.21 5.27c-1.15-1.89-2.3-3.79-3.21-5.27m0 0c-1.03-2.14-2.05-4.27-2.69-5.6m2.69 5.6c-.68-1.43-1.37-2.85-2.69-5.6m0 0c-.8-2.17-1.59-4.34-2.16-5.88m2.16 5.88c-.82-2.22-1.63-4.44-2.16-5.88m0 0c-.47-1.82-.94-3.64-1.58-6.13m1.58 6.13c-.37-1.44-.74-2.88-1.58-6.13m0 0-.97-6.34m.97 6.34c-.3-1.98-.61-3.97-.97-6.34m0 0c-.13-2.54-.26-5.07-.33-6.54m.33 6.54-.33-6.54m0 0V343m0 112V343m0 0h174.1m-174.1 0h174.1m0 0-39 39m39-39-39 39m0 0s0 0 0 0m0 0s0 0 0 0m0 0c-.65.72-1.3 1.44-1.65 1.83m1.65-1.83c-.34.38-.68.76-1.65 1.83m0 0c-.35.47-.7.95-1.43 1.94m1.43-1.94c-.38.5-.75 1.01-1.43 1.94m0 0c-.32.54-.64 1.08-1.22 2.05m1.22-2.05c-.38.64-.76 1.28-1.22 2.05m0 0c-.2.45-.41.89-.99 2.13m.99-2.13c-.38.82-.76 1.64-.99 2.13m0 0c-.18.53-.36 1.05-.77 2.2m.77-2.2c-.3.88-.61 1.75-.77 2.2m0 0c-.15.61-.3 1.22-.55 2.25m.55-2.25c-.16.68-.33 1.35-.55 2.25m0 0-.33 2.29m.33-2.29c-.13.9-.26 1.79-.33 2.29m0 0-.11 2.3m.11-2.3c-.03.59-.06 1.19-.11 2.3m0 0c.03.54.05 1.08.11 2.3m-.11-2.3c.03.72.07 1.44.11 2.3m0 0c.1.71.21 1.43.33 2.28m-.33-2.28c.1.71.21 1.42.33 2.28m0 0c.22.88.44 1.77.55 2.24m-.55-2.24c.16.66.33 1.32.55 2.24m0 0c.26.72.51 1.45.77 2.19m-.77-2.19c.25.69.49 1.39.77 2.19m0 0c.33.7.65 1.4.99 2.12m-.99-2.12c.37.79.74 1.57.99 2.12m0 0c.38.63.75 1.25 1.22 2.04m-1.22-2.04c.4.67.8 1.35 1.22 2.04m0 0c.38.52.77 1.05 1.43 1.93m-1.43-1.93c.38.52.77 1.05 1.43 1.93m0 0c.46.5.91 1 1.65 1.81m-1.65-1.81c.35.39.7.77 1.65 1.81m0 0c.37.33.75.67 1.83 1.64m-1.83-1.64c.43.39.87.78 1.83 1.64m0 0c.62.45 1.25.91 1.94 1.42m-1.94-1.42c.45.32.9.65 1.94 1.42m0 0c.53.3 1.05.61 2.05 1.2m-2.05-1.2c.43.25.86.5 2.05 1.2m0 0c.78.36 1.56.72 2.13.99m-2.13-.99c.54.25 1.08.5 2.13.99m0 0c.67.23 1.33.46 2.2.76m-2.2-.76c.51.17 1.03.35 2.2.76m0 0c.87.22 1.73.43 2.25.56m-2.25-.56c.79.2 1.57.39 2.25.56m0 0 2.29.33m-2.29-.33c.58.08 1.16.16 2.29.33m0 0c.91.04 1.82.09 2.3.11m-2.3-.11c.89.04 1.79.09 2.3.11m0 0c.48-.02.96-.04 2.3-.1m-2.3.1c.73-.03 1.47-.06 2.3-.1m0 0c.61-.09 1.22-.18 2.28-.33m-2.28.33c.58-.09 1.17-.17 2.28-.33m0 0c.79-.19 1.59-.38 2.24-.54m-2.24.54c.88-.21 1.75-.42 2.24-.54m0 0c.7-.25 1.4-.49 2.19-.77m-2.19.77c.5-.18 1.01-.35 2.19-.77m0 0c.56-.26 1.13-.52 2.12-.98m-2.12.98c.69-.31 1.37-.63 2.12-.98m0 0c.63-.37 1.25-.74 2.04-1.21m-2.04 1.21c.8-.48 1.6-.95 2.04-1.21m0 0c.67-.5 1.34-.99 1.93-1.43m-1.93 1.43c.52-.39 1.05-.78 1.93-1.43m0 0c.43-.39.87-.79 1.81-1.65m-1.81 1.65c.42-.38.83-.76 1.81-1.65m0 0 80-80m-80 80 80-80m0 0s0 0 0 0m0 0s0 0 0 0m0 0c.33-.37.67-.74 1.65-1.83m-1.65 1.83c.63-.7 1.27-1.4 1.65-1.83m0 0c.3-.4.59-.79 1.43-1.94m-1.43 1.94c.42-.57.84-1.13 1.43-1.94m0 0c.4-.68.8-1.35 1.22-2.05m-1.22 2.05c.47-.79.93-1.57 1.22-2.05m0 0c.28-.62.57-1.23.99-2.13m-.99 2.13c.3-.65.6-1.31.99-2.13m0 0c.26-.74.51-1.47.77-2.2m-.77 2.2.77-2.2m0 0 .55-2.25m-.55 2.25c.2-.84.41-1.68.55-2.25m0 0 .33-2.29m-.33 2.29c.11-.75.21-1.49.33-2.29m0 0c.03-.54.05-1.08.11-2.3m-.11 2.3c.04-.91.09-1.81.11-2.3m0 0c-.03-.7-.07-1.41-.11-2.3m.11 2.3c-.04-.75-.07-1.49-.11-2.3m0 0c-.08-.52-.15-1.04-.33-2.28m.33 2.28c-.09-.63-.18-1.26-.33-2.28m0 0-.55-2.24m.55 2.24c-.19-.79-.39-1.58-.55-2.24m0 0-.77-2.19m.77 2.19c-.25-.72-.51-1.44-.77-2.19m0 0c-.23-.5-.46-.99-.99-2.12m.99 2.12c-.39-.83-.78-1.66-.99-2.12m0 0c-.42-.7-.83-1.39-1.22-2.04m1.22 2.04c-.32-.53-.64-1.06-1.22-2.04m0 0c-.47-.64-.95-1.28-1.43-1.93m1.43 1.93c-.47-.63-.94-1.27-1.43-1.93m0 0c-.44-.49-.89-.98-1.65-1.81m1.65 1.81c-.64-.7-1.28-1.4-1.65-1.81m0 0-80-80m80 80-80-80m0 0s0 0 0 0m0 0s0 0 0 0m0 0c-.72-.65-1.44-1.3-1.83-1.65m1.83 1.65c-.68-.62-1.37-1.23-1.83-1.65m0 0c-.51-.38-1.02-.75-1.94-1.43m1.94 1.43c-.58-.43-1.17-.87-1.94-1.43m0 0c-.73-.43-1.45-.86-2.05-1.22m2.05 1.22c-.77-.45-1.53-.9-2.05-1.22m0 0c-.46-.21-.93-.43-2.13-.99m2.13.99-2.13-.99m0 0c-.83-.29-1.65-.57-2.2-.77m2.2.77c-.56-.19-1.12-.39-2.2-.77m0 0c-.65-.16-1.29-.31-2.25-.55m2.25.55c-.57-.14-1.13-.27-2.25-.55m0 0c-.74-.11-1.48-.21-2.29-.33m2.29.33c-.51-.07-1.02-.15-2.29-.33m0 0c-.77-.04-1.54-.07-2.3-.11m2.3.11c-.88-.04-1.76-.08-2.3-.11m0 0c-.49.02-.98.05-2.3.11m2.3-.11c-.88.04-1.77.09-2.3.11m0 0c-.62.09-1.23.18-2.28.33m2.28-.33c-.6.09-1.2.17-2.28.33m0 0c-.45.11-.91.22-2.24.55m2.24-.55c-.79.2-1.58.39-2.24.55m0 0c-.56.2-1.12.4-2.19.77m2.19-.77c-.51.18-1.01.36-2.19.77m0 0c-.85.4-1.7.8-2.12.99m2.12-.99c-.51.24-1.02.48-2.12.99m0 0c-.6.36-1.2.71-2.04 1.22m2.04-1.22c-.46.27-.91.55-2.04 1.22m0 0c-.49.36-.99.73-1.93 1.43m1.93-1.43-1.93 1.43m0 0c-.42.38-.85.77-1.81 1.65m1.81-1.65c-.69.63-1.39 1.27-1.81 1.65m0 0-1.64 1.83m1.64-1.83c-.54.6-1.08 1.21-1.64 1.83m0 0c-.53.73-1.07 1.47-1.42 1.94m1.42-1.94c-.36.5-.73 1-1.42 1.94m0 0c-.35.61-.7 1.21-1.2 2.05m1.2-2.05c-.33.58-.67 1.15-1.2 2.05m0 0c-.26.57-.53 1.15-.99 2.13m.99-2.13c-.39.85-.78 1.69-.99 2.13m0 0c-.24.7-.48 1.4-.76 2.2m.76-2.2c-.17.51-.35 1.01-.76 2.2m0 0c-.17.68-.33 1.35-.56 2.25m.56-2.25c-.2.79-.39 1.57-.56 2.25m0 0c-.09.65-.18 1.29-.33 2.29m.33-2.29c-.06.48-.13.95-.33 2.29m0 0c-.03.71-.07 1.43-.11 2.3m.11-2.3-.11 2.3m0 0c.04.86.08 1.73.1 2.3m-.1-2.3c.03.8.07 1.6.1 2.3m0 0c.13.88.25 1.76.33 2.28m-.33-2.28c.11.73.21 1.47.33 2.28m0 0c.18.74.36 1.49.54 2.24m-.54-2.24c.15.64.31 1.28.54 2.24m0 0c.2.57.4 1.15.77 2.19m-.77-2.19c.21.58.41 1.17.77 2.19m0 0c.23.5.46 1.01.98 2.12m-.98-2.12c.35.76.71 1.53.98 2.12m0 0c.38.64.76 1.29 1.21 2.04m-1.21-2.04 1.21 2.04m0 0c.45.6.89 1.21 1.43 1.93m-1.43-1.93c.3.4.6.81 1.43 1.93m0 0 1.65 1.81m-1.65-1.81c.47.52.94 1.03 1.65 1.81m0 0 39 39m-39-39 39 39m0 0h-174.1m174.1 0h-174.1m0 0V71m0 223.9V71m0 0s0 0 0 0m0 0s0 0 0 0m0 0s0 0 0 0m0 0s0 0 0 0"})),React__namespace.createElement("path",{fill:"none",stroke:"var(--icon-fill-color)",strokeLinecap:"round",strokeWidth:"18",d:"M135 343.068H31m104 0H31m0 0s0 0 0 0m0 0s0 0 0 0m0 0c-.74-.04-1.48-.07-2.46-.12m2.46.12c-.77-.04-1.54-.08-2.46-.12m0 0c-.87-.14-1.75-.27-2.39-.37m2.39.37c-.55-.09-1.1-.17-2.39-.37m0 0c-.87-.22-1.74-.44-2.3-.59m2.3.59c-.62-.15-1.24-.31-2.3-.59m0 0c-.82-.29-1.64-.59-2.21-.8m2.21.8c-.52-.18-1.03-.37-2.21-.8m0 0c-.55-.26-1.09-.52-2.1-1.01m2.1 1.01c-.64-.31-1.28-.61-2.1-1.01m0 0c-.74-.45-1.48-.89-1.98-1.2m1.98 1.2c-.42-.25-.84-.51-1.98-1.2m0 0c-.7-.52-1.41-1.05-1.84-1.38m1.84 1.38c-.37-.28-.75-.56-1.84-1.38m0 0c-.4-.36-.8-.71-1.71-1.54m1.71 1.54c-.35-.31-.7-.63-1.71-1.54m0 0c-.43-.47-.85-.95-1.54-1.71m1.54 1.71c-.61-.68-1.23-1.36-1.54-1.71m0 0c-.29-.38-.58-.76-1.38-1.84m1.38 1.84c-.54-.71-1.08-1.43-1.38-1.84m0 0c-.46-.76-.92-1.52-1.2-1.98m1.2 1.98c-.45-.74-.89-1.47-1.2-1.98m0 0c-.37-.77-.74-1.53-1.01-2.1m1.01 2.1c-.3-.62-.6-1.25-1.01-2.1m0 0c-.2-.54-.39-1.07-.8-2.21m.8 2.21c-.2-.54-.4-1.09-.8-2.21m0 0c-.22-.85-.44-1.71-.59-2.3m.59 2.3c-.12-.46-.24-.92-.59-2.3m0 0c-.11-.72-.22-1.43-.37-2.39m.37 2.39c-.08-.48-.15-.96-.37-2.39m0 0c-.03-.74-.07-1.48-.12-2.46m.12 2.46c-.04-.79-.08-1.59-.12-2.46m0 0c.04-.74.07-1.49.12-2.46m-.12 2.46.12-2.46m0 0c.08-.53.16-1.07.37-2.39m-.37 2.39c.09-.56.17-1.12.37-2.39m0 0c.17-.69.35-1.38.59-2.3m-.59 2.3c.15-.61.31-1.23.59-2.3m0 0c.17-.48.34-.96.8-2.21m-.8 2.21c.2-.55.4-1.1.8-2.21m0 0c.25-.52.49-1.03 1.01-2.1m-1.01 2.1c.36-.76.73-1.52 1.01-2.1m0 0c.43-.72.87-1.44 1.2-1.98m-1.2 1.98c.27-.45.55-.91 1.2-1.98m0 0c.54-.73 1.09-1.47 1.38-1.84m-1.38 1.84c.4-.54.81-1.09 1.38-1.84m0 0c.53-.59 1.07-1.18 1.54-1.71m-1.54 1.71c.59-.66 1.19-1.32 1.54-1.71m0 0c.54-.49 1.08-.97 1.71-1.54m-1.71 1.54c.48-.43.95-.86 1.71-1.54m0 0c.46-.35.92-.7 1.84-1.38m-1.84 1.38c.5-.38 1.01-.76 1.84-1.38m0 0c.52-.32 1.04-.63 1.98-1.2m-1.98 1.2c.72-.44 1.44-.88 1.98-1.2m0 0 2.1-1.01m-2.1 1.01c.84-.4 1.67-.81 2.1-1.01m0 0c.45-.17.91-.33 2.21-.8m-2.21.8c.56-.21 1.12-.41 2.21-.8m0 0c.89-.23 1.79-.46 2.3-.59m-2.3.59c.48-.13.95-.25 2.3-.59m0 0c.51-.08 1.02-.16 2.39-.37m-2.39.37 2.39-.37m0 0c.52-.02 1.03-.05 2.46-.12m-2.46.12c.74-.03 1.48-.07 2.46-.12m0 0 103.34-.27m-103.34.27c30.04-.08 60.08-.16 103.34-.27"}),React__namespace.createElement("g",{fillRule:"evenodd",strokeLinecap:"round"},React__namespace.createElement("path",{fill:"var(--input-bg-color)",strokeWidth:"0",d:"M517.462 135h-128V7l128 128"}),React__namespace.createElement("path",{fill:"none",stroke:"var(--icon-fill-color)",strokeWidth:"18",d:"M517.462 135h-128m128 0h-128m0 0V7m0 128V7m0 0 128 128m-128-128 128 128m0 0s0 0 0 0m0 0s0 0 0 0m0 0s0 0 0 0m0 0s0 0 0 0"}))),obsidian:React__namespace.createElement("svg",{focusable:"false",role:"img",xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 512 512"},React__namespace.createElement("defs",null,React__namespace.createElement("radialGradient",{id:"b",cx:"0",cy:"0",r:"1",gradientUnits:"userSpaceOnUse",gradientTransform:"matrix(-48 -185 123 -32 179 429.7)"},React__namespace.createElement("stop",{stopColor:"#fff",stopOpacity:".4"}),React__namespace.createElement("stop",{offset:"1",stopOpacity:".1"})),React__namespace.createElement("radialGradient",{id:"c",cx:"0",cy:"0",r:"1",gradientUnits:"userSpaceOnUse",gradientTransform:"matrix(41 -310 229 30 341.6 351.3)"},React__namespace.createElement("stop",{stopColor:"#fff",stopOpacity:".6"}),React__namespace.createElement("stop",{offset:"1",stopColor:"#fff",stopOpacity:".1"})),React__namespace.createElement("radialGradient",{id:"d",cx:"0",cy:"0",r:"1",gradientUnits:"userSpaceOnUse",gradientTransform:"matrix(57 -261 178 39 190.5 296.3)"},React__namespace.createElement("stop",{stopColor:"#fff",stopOpacity:".8"}),React__namespace.createElement("stop",{offset:"1",stopColor:"#fff",stopOpacity:".4"})),React__namespace.createElement("radialGradient",{id:"e",cx:"0",cy:"0",r:"1",gradientUnits:"userSpaceOnUse",gradientTransform:"matrix(-79 -133 153 -90 321.4 464.2)"},React__namespace.createElement("stop",{stopColor:"#fff",stopOpacity:".3"}),React__namespace.createElement("stop",{offset:"1",stopOpacity:".3"})),React__namespace.createElement("radialGradient",{id:"f",cx:"0",cy:"0",r:"1",gradientUnits:"userSpaceOnUse",gradientTransform:"matrix(-29 136 -92 -20 300.7 149.9)"},React__namespace.createElement("stop",{stopColor:"#fff",stopOpacity:"0"}),React__namespace.createElement("stop",{offset:"1",stopColor:"#fff",stopOpacity:".2"})),React__namespace.createElement("radialGradient",{id:"g",cx:"0",cy:"0",r:"1",gradientUnits:"userSpaceOnUse",gradientTransform:"matrix(72 73 -155 153 137.8 225.2)"},React__namespace.createElement("stop",{stopColor:"#fff",stopOpacity:".2"}),React__namespace.createElement("stop",{offset:"1",stopColor:"#fff",stopOpacity:".4"})),React__namespace.createElement("radialGradient",{id:"h",cx:"0",cy:"0",r:"1",gradientUnits:"userSpaceOnUse",gradientTransform:"matrix(20 118 -251 43 215.1 273.7)"},React__namespace.createElement("stop",{stopColor:"#fff",stopOpacity:".1"}),React__namespace.createElement("stop",{offset:"1",stopColor:"#fff",stopOpacity:".3"})),React__namespace.createElement("radialGradient",{id:"i",cx:"0",cy:"0",r:"1",gradientUnits:"userSpaceOnUse",gradientTransform:"matrix(-162 -85 268 -510 374.4 371.7)"},React__namespace.createElement("stop",{stopColor:"#fff",stopOpacity:".2"}),React__namespace.createElement("stop",{offset:".5",stopColor:"#fff",stopOpacity:".2"}),React__namespace.createElement("stop",{offset:"1",stopColor:"#fff",stopOpacity:".3"})),React__namespace.createElement("filter",{id:"a",x:"80.1",y:"37",width:"351.1",height:"443.2",filterUnits:"userSpaceOnUse",colorInterpolationFilters:"sRGB"},React__namespace.createElement("feFlood",{floodOpacity:"0",result:"BackgroundImageFix"}),React__namespace.createElement("feBlend",{in:"SourceGraphic",in2:"BackgroundImageFix",result:"shape"}),React__namespace.createElement("feGaussianBlur",{stdDeviation:"6.5",result:"effect1_foregroundBlur_744_9191"}))),React__namespace.createElement("g",{filter:"url(#a)"},React__namespace.createElement("path",{d:"M359.2 437.5c-2.6 19-21.3 33.9-40 28.7-26.5-7.2-57.2-18.6-84.8-20.7l-42.4-3.2a28 28 0 0 1-18-8.3l-73-74.8a27.7 27.7 0 0 1-5.4-30.7s45-98.6 46.8-103.7c1.6-5.1 7.8-49.9 11.4-73.9a28 28 0 0 1 9-16.5L249 57.2a28 28 0 0 1 40.6 3.4l72.6 91.6a29.5 29.5 0 0 1 6.2 18.3c0 17.3 1.5 53 11.2 76a301.3 301.3 0 0 0 35.6 58.2 14 14 0 0 1 1 15.6c-6.3 10.7-18.9 31.3-36.6 57.6a142.2 142.2 0 0 0-20.5 59.6Z",fill:"#000",fillOpacity:".3"})),React__namespace.createElement("path",{id:"arrow",d:"M359.9 434.3c-2.6 19.1-21.3 34-40 28.9-26.4-7.3-57-18.7-84.7-20.8l-42.3-3.2a27.9 27.9 0 0 1-18-8.4l-73-75a27.9 27.9 0 0 1-5.4-31s45.1-99 46.8-104.2c1.7-5.1 7.8-50 11.4-74.2a28 28 0 0 1 9-16.6l86.2-77.5a28 28 0 0 1 40.6 3.5l72.5 92a29.7 29.7 0 0 1 6.2 18.3c0 17.4 1.5 53.2 11.1 76.3a303 303 0 0 0 35.6 58.5 14 14 0 0 1 1.1 15.7c-6.4 10.8-18.9 31.4-36.7 57.9a143.3 143.3 0 0 0-20.4 59.8Z",fill:"#6c31e3"}),React__namespace.createElement("path",{d:"M182.7 436.4c33.9-68.7 33-118 18.5-153-13.2-32.4-37.9-52.8-57.3-65.5-.4 1.9-1 3.7-1.8 5.4L96.5 324.8a27.9 27.9 0 0 0 5.5 31l72.9 75c2.3 2.3 5 4.2 7.8 5.6Z",fill:"url(#b)"}),React__namespace.createElement("path",{d:"M274.9 297c9.1.9 18 2.9 26.8 6.1 27.8 10.4 53.1 33.8 74 78.9 1.5-2.6 3-5.1 4.6-7.5a1222 1222 0 0 0 36.7-57.9 14 14 0 0 0-1-15.7 303 303 0 0 1-35.7-58.5c-9.6-23-11-58.9-11.1-76.3 0-6.6-2.1-13.1-6.2-18.3l-72.5-92-1.2-1.5c5.3 17.5 5 31.5 1.7 44.2-3 11.8-8.6 22.5-14.5 33.8-2 3.8-4 7.7-5.9 11.7a140 140 0 0 0-15.8 58c-1 24.2 3.9 54.5 20 95Z",fill:"url(#c)"}),React__namespace.createElement("path",{d:"M274.8 297c-16.1-40.5-21-70.8-20-95 1-24 8-42 15.8-58l6-11.7c5.8-11.3 11.3-22 14.4-33.8a78.5 78.5 0 0 0-1.7-44.2 28 28 0 0 0-39.4-2l-86.2 77.5a28 28 0 0 0-9 16.6L144.2 216c0 .7-.2 1.3-.3 2 19.4 12.6 44 33 57.3 65.3 2.6 6.4 4.8 13.1 6.4 20.4a200 200 0 0 1 67.2-6.8Z",fill:"url(#d)"}),React__namespace.createElement("path",{d:"M320 463.2c18.6 5.1 37.3-9.8 39.9-29a153 153 0 0 1 15.9-52.2c-21-45.1-46.3-68.5-74-78.9-29.5-11-61.6-7.3-94.2.6 7.3 33.1 3 76.4-24.8 132.7 3.1 1.6 6.6 2.5 10.1 2.8l43.9 3.3c23.8 1.7 59.3 14 83.2 20.7Z",fill:"url(#e)"}),React__namespace.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M255 200.5c-1.1 24 1.9 51.4 18 91.8l-5-.5c-14.5-42.1-17.7-63.7-16.6-88 1-24.3 8.9-43 16.7-59 2-4 6.6-11.5 8.6-15.3 5.8-11.3 9.7-17.2 13-27.5 4.8-14.4 3.8-21.2 3.2-28 3.7 24.5-10.4 45.8-21 67.5a145 145 0 0 0-17 59Z",fill:"url(#f)"}),React__namespace.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M206 285.1c2 4.4 3.7 8 4.9 13.5l-4.3 1c-1.7-6.4-3-11-5.5-16.5-14.6-34.3-38-52-57-65 23 12.4 46.7 31.9 61.9 67Z",fill:"url(#g)"}),React__namespace.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M211.1 303c8 37.5-1 85.2-27.5 131.6 22.2-46 33-90.1 24-131l3.5-.7Z",fill:"url(#h)"}),React__namespace.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M302.7 299.5c43.5 16.3 60.3 52 72.8 81.9-15.5-31.2-37-65.7-74.4-78.5-28.4-9.8-52.4-8.6-93.5.7l-.9-4c43.6-10 66.4-11.2 96 0Z",fill:"url(#i)"})),"add-file":React__namespace.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"var(--icon-fill-color)",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},React__namespace.createElement("path",{d:"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z"}),React__namespace.createElement("polyline",{points:"14 2 14 8 20 8"}),React__namespace.createElement("line",{x1:"12",x2:"12",y1:"18",y2:"12"}),React__namespace.createElement("line",{x1:"9",x2:"15",y1:"15",y2:"15"}))},SwordColors={Bronze:{grip:"#cd7f32",decoration:"#96510d",blade:"#7A420B",bladeFillLight:"#E1B384",title:"Apprentice of Sketchnoting"},Silver:{grip:"#CECDCC",decoration:"#b2b0b0",blade:"#979595",bladeFillLight:"#F5F5F5",title:"Champion of Spatial Thinking"},Gold:{grip:"#F5D000",decoration:"#D6B600",blade:"#B89C00",bladeFillLight:"#FFEA70",title:"Hero of Visual Notetaking"},Platinum:{grip:"#646261",decoration:"#323131",blade:"#000",bladeFillLight:"#8B8988",title:"Legend of Visual Thinking"}},excalidrawSword=e=>{const{grip:t,decoration:i,blade:a,bladeFillLight:n}=SwordColors[e];return React__namespace.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 528 1140"},React__namespace.createElement("g",{fillRule:"evenodd",strokeLinecap:"round"},React__namespace.createElement("path",{fill:n,d:"m272 979 118-121-80-571-104 1-36 580 104 113-1-2"}),React__namespace.createElement("path",{fill:"none",stroke:"black",strokeWidth:"4",d:"M271 978c31-30 67-60 117-120M273 979c42-46 89-95 115-120m-1-1c-19-163-41-323-79-569m78 570c-20-165-42-329-78-570m-2 0c-23-2-56-2-102 0m106-1c-34 0-63-1-104 1m0 1c-12 192-21 384-34 574m33-576-31 576m3 2c30 40 71 85 98 112M173 863c38 47 75 87 100 117m1 1s0 0 0 0m0 0s0 0 0 0m0 0s0 0 0 0m0 0s0 0 0 0"})),React__namespace.createElement("g",{fill:"none",fillRule:"evenodd",strokeLinecap:"round"},React__namespace.createElement("path",{stroke:a,strokeWidth:".5",d:"M207 287s0 0 0 0m0 0s0 0 0 0m-2 6 7-5m-6 6 6-7m-6 17c0-8 3-14 10-15m-9 12c4-3 5-8 12-14m-11 20c4-7 6-8 11-20m-13 19c4-6 10-10 15-16m-14 27c4-12 7-14 21-28m-23 24c8-6 13-16 23-27m-23 35c14-11 17-26 31-37m-32 37c10-10 16-17 28-35m-29 39c12-6 18-13 31-37m-28 37c5-8 12-14 33-37m-33 47c7-12 20-27 36-44m-36 42c14-17 26-36 38-44m-36 53c8-11 22-26 37-53m-42 48c14-14 29-29 46-49m-45 60c18-29 42-49 52-62m-52 61c18-22 36-40 52-59m-56 63c15-17 34-27 57-65m-54 66 58-63m-62 71c15-18 35-38 64-74m-62 74c25-30 48-57 62-71m-62 78c22-25 42-52 72-75m-71 72c22-26 47-53 70-75m-69 84c25-30 50-67 70-88m-72 87 74-82m-72 85c30-27 58-58 75-89m-75 94c17-23 37-42 79-90m-82 97c24-21 45-47 86-95m-85 94 84-98m-84 105c22-23 40-48 92-105m-93 106c23-30 47-57 90-105m-90 106c29-25 51-56 95-105m-94 108c19-23 38-47 96-109m-93 118c36-44 72-86 93-114m-98 114c30-35 55-69 102-120M197 408c30-26 58-60 110-119M199 412l108-124M198 421c31-37 66-71 111-129M201 418c32-41 71-82 110-130M196 426c38-43 73-77 119-132M198 426l114-130M196 430c41-47 85-87 120-128M198 431c29-29 53-57 113-133M201 436c25-31 51-61 112-127M198 439c28-30 52-61 114-133M194 442c29-33 63-65 123-134M198 442c42-48 85-97 118-132M195 449c28-35 63-63 122-135M198 449c43-49 88-96 117-131M197 459c45-51 86-103 121-139M199 455c47-49 88-100 117-133M196 463c31-40 67-74 121-133M199 463c44-52 90-106 119-137M195 467c41-39 77-90 118-133M196 472c26-34 54-62 121-141M196 478c45-49 89-102 122-138M198 476c26-28 52-58 117-138M195 481c36-41 69-86 124-140M197 481c26-33 55-66 120-141M192 486c45-46 90-93 123-138M196 490c34-34 64-72 123-142M194 494c42-43 83-93 129-138M194 496c30-32 57-65 127-144M195 506c44-55 88-99 125-146M195 504l123-146M197 506c41-41 80-87 127-142M193 511c40-42 77-84 129-148M195 518c26-37 57-72 127-146M193 517c41-52 85-101 128-146M192 523c42-42 77-85 133-147M192 524c49-60 98-116 129-151M193 527c34-34 69-71 128-147M194 528c45-53 88-104 130-149M192 537c48-48 92-98 129-155M192 537c50-56 99-112 132-152M190 540c47-54 97-107 138-152M192 541c39-49 82-97 131-151M191 546c36-38 68-78 136-153M192 549c51-62 105-123 133-154M194 558c27-42 55-72 134-159M190 557c31-35 59-71 135-155M191 564c49-53 91-108 139-162M190 562l137-155M189 567l142-153M190 568c40-43 76-87 137-157M189 572c50-50 98-108 138-155M190 574l139-158M192 579c58-62 109-126 136-156M190 581c44-48 87-98 139-158M191 591c51-58 95-111 140-164M190 588c35-43 70-84 140-162M188 592c32-32 60-65 139-160M188 595l143-162M191 602c31-43 72-87 141-168M189 600c34-32 64-67 142-161M185 610c54-57 102-117 149-165M187 606c53-58 100-114 146-164M191 610c53-54 106-112 141-166M188 615c37-40 74-81 143-167M185 621c46-46 87-94 150-167M187 621c32-35 64-70 148-169M190 625c45-52 94-112 141-169M188 625c56-62 113-124 146-167M189 633l144-172M187 633c34-40 67-76 146-171M186 643c34-44 71-90 148-172M185 639c60-70 119-135 152-172M187 643c39-43 81-86 147-172M187 646c29-37 61-73 148-172M187 651c52-60 102-117 148-174M185 651l152-171M185 661c59-73 121-137 151-175M187 660c31-44 66-83 150-175M183 667c44-51 84-95 153-176M186 667c35-40 68-78 153-179M183 674c40-47 80-99 158-178M184 671c57-69 116-137 155-175M187 678c39-44 79-97 154-180M185 681c55-62 112-126 153-180M187 687c51-62 110-121 152-178M185 684c29-37 62-73 155-179M181 692c50-63 104-125 163-182M185 692l156-183M187 696c39-46 87-96 154-181M185 697c43-51 84-100 156-180M184 704c48-52 103-110 158-184M185 705c54-69 115-138 159-182M184 710c62-70 131-143 157-183M184 712c59-72 119-143 161-186M184 721c60-71 118-142 159-189M184 719c40-50 86-104 162-186M184 722c41-45 81-91 163-186M182 725c63-76 127-148 163-189M179 728c55-59 110-124 167-188M182 731c45-50 92-104 163-190M179 740c43-47 82-97 169-194M182 738l163-191M184 741c50-62 105-129 166-190M182 743c35-45 74-89 166-189M182 753c33-44 67-87 164-193M180 749c42-43 83-88 169-189M181 757c58-70 125-145 166-195M181 757l166-193M179 763c39-39 73-85 172-193M180 764l169-196M176 771c73-77 138-156 171-196M181 770c47-57 98-115 168-196M182 778c68-77 129-153 171-201M178 777c46-54 93-104 171-197M180 780c54-64 113-132 171-197M180 782c50-56 101-118 171-199M180 789c43-52 90-101 170-197M179 789c43-43 83-90 174-198M178 795c63-64 120-138 173-198M178 795c47-52 93-106 175-201M178 803c42-45 82-96 176-206M177 802c55-62 111-128 176-200M176 809c65-65 124-136 180-201M177 810l176-206M175 817c58-71 118-136 182-203M178 816c69-82 141-162 176-205M175 819c39-40 79-86 180-204M176 822c60-66 117-133 180-208M178 827c40-41 76-91 179-203M176 829c36-47 75-90 180-206M174 835c59-62 114-123 180-211M175 835c36-44 75-86 181-209M176 842c38-48 79-98 182-212M177 842c59-66 115-131 182-210M176 849c44-58 96-119 185-212M176 848c36-46 76-92 183-210M177 853c51-56 99-114 181-210M173 856c59-70 122-140 186-215M176 862c35-44 77-87 184-212M175 862c61-69 120-135 187-216M177 862c74-75 142-156 183-208M177 866c53-58 103-119 183-211M180 866c66-70 131-149 182-211M180 869c44-53 89-104 183-211M180 873c61-70 117-142 185-206M182 871c48-55 94-106 181-208M184 873c41-47 82-97 180-204M185 874c64-75 126-147 179-204M190 879c35-42 72-86 174-202M186 878c58-69 116-138 177-203M188 882c38-46 81-96 174-203M189 881c58-65 117-129 177-200M195 883c53-65 105-123 170-201M192 884c48-62 103-120 174-199M196 886c64-76 132-155 172-199M194 885c52-55 102-115 172-194M195 888c42-36 75-79 173-193M197 889c55-58 105-116 171-195M203 895c55-70 115-138 164-192M201 892c53-64 106-125 165-191M203 897c42-53 82-98 166-188M202 896c34-35 68-74 167-189M205 901c54-62 109-127 161-192M207 897c46-57 96-115 161-188M209 899c46-51 92-101 159-185M209 900c37-35 68-74 161-183M210 906c50-62 103-118 163-187M210 905c45-55 92-103 161-184M212 907c50-59 103-117 159-177M213 908c35-45 73-88 157-181M219 912c46-57 97-115 153-181M215 912c50-56 100-112 156-180M219 916c48-60 96-108 152-177M217 915c30-39 61-72 156-178M218 916c45-47 86-91 153-175M220 918c34-37 69-78 153-176M226 918l149-171M225 919c43-50 83-97 149-170M223 924c33-34 64-71 154-174M228 923c34-42 68-82 148-172M226 930c41-44 76-89 147-174M229 925c35-43 72-84 146-168M231 932l144-168M231 929c49-54 99-111 145-165M234 931c29-36 63-69 143-160M233 933l144-163M237 935c49-53 99-111 137-162M236 934c51-55 99-111 142-161M239 942c44-51 88-100 140-163M239 938l139-157M243 941c31-39 65-79 138-156M242 940l135-154M248 945c52-62 99-123 133-153M245 945l134-153M250 947c32-43 66-85 130-148M246 948c44-50 83-97 133-152M247 951c35-36 65-72 134-148M251 952c50-55 101-114 128-151M254 957c34-50 80-99 128-152M255 954c46-59 93-114 128-148M255 956c53-55 101-120 127-149M257 957c37-43 73-83 125-146M261 962c39-49 83-101 118-142M259 961l122-143M258 961c37-42 71-83 127-139M261 965c30-37 61-69 122-142M265 965c48-46 86-99 120-136M262 964c42-50 88-99 123-136M263 967c43-47 88-91 124-134M267 970c33-41 67-79 117-138M272 971c41-45 75-82 116-134M269 972c31-41 66-82 118-136M268 974c30-35 64-68 120-134M270 975l118-134M275 975c31-28 60-62 113-127M273 976c29-31 55-65 115-128M274 980c47-43 87-97 116-128M275 980c26-26 51-57 111-126"}),React__namespace.createElement("path",{stroke:"black",d:"M272 980c39-30 68-66 119-121M273 982c49-46 92-93 114-126m1 0c-26-177-53-358-78-568m78 570c-18-155-40-312-78-569m3-1c-31-1-59 0-106-3m101 3c-29-2-59 0-101-1m-1 1c-10 204-24 410-31 575m32-576c-10 116-16 231-32 576m-2-1c27 25 44 44 105 120M175 865l98 117m2-2s0 0 0 0m0 0s0 0 0 0m0 0s0 0 0 0m0 0s0 0 0 0"})),React__namespace.createElement("path",{fill:"none",stroke:a,strokeLinecap:"round",strokeWidth:"4",d:"M271 610c1 44 6 217 6 261m-10-263 9 258"}),React__namespace.createElement("g",{fillOpacity:".8",fillRule:"evenodd",strokeLinecap:"round",strokeOpacity:".8"},React__namespace.createElement("path",{fill:"#dbc9f3",d:"m320 484-4-4-5-3-4-3-4-2-5-2-4-1-5-1h-13l-4 1-5 2-4 2-5 3-4 3-5 4-133 117-5 4-2 2-2 2-2 2-2 2-1 3-1 3-19 127 10 7 10 8 10 7 9 8 8 8 8 8 7 8 7 9 6 9 6 9 5 9 4 9 5 10 3 9 4 10 2 10 15-3 8-2 7-1 7-1 6-1 7-1 6-1 6-1h6l6-1h16l4 1h5l-4-10-2-10-3-10-2-10-3-10-1-10-2-10-1-9-1-10v-10l-1-9v-19l1-10 1-9 1-9 1-10 1-9 2-9 2-9 2-9 3-10 3-9 2-9 4-9 3-9 3-9 4-9 4-9 4-9 9-19 2-3 2-4 1-4 1-5 2-4 1-5v-5l1-6v-23l-1-6-1-7-1-7-2-7"}),React__namespace.createElement("path",{fill:"none",stroke:"black",strokeWidth:"4",d:"M320 484s0 0 0 0m0 0s0 0 0 0m0 0-4-4m4 4-4-4m0 0-5-3m5 3-5-3m0 0-4-3m4 3-4-3m0 0-4-2m4 2-4-2m0 0-5-2m5 2-5-2m0 0-4-1m4 1-4-1m0 0-5-1m5 1-5-1m0 0h-4m4 0h-4m0 0h-5m5 0h-5m0 0h-4m4 0h-4m0 0-4 1m4-1-4 1m0 0-5 2m5-2-5 2m0 0-4 2m4-2-4 2m0 0-5 3m5-3-5 3m0 0-4 3m4-3-4 3m0 0-5 4m5-4-5 4m0 0L116 600m133-117L116 600m0 0s0 0 0 0m0 0s0 0 0 0m0 0-5 4m5-4-5 4m0 0-2 2m2-2-2 2m0 0-2 2m2-2-2 2m0 0-2 2m2-2-2 2m0 0-2 2m2-2-2 2m0 0-1 3m1-3-1 3m0 0-1 3m1-3-1 3m0 0L82 745m19-127L82 745m0 0s0 0 0 0m0 0s0 0 0 0m0 0 10 7m-10-7 10 7m0 0 10 8m-10-8 10 8m0 0 10 7m-10-7 10 7m0 0 9 8m-9-8 9 8m0 0 8 8m-8-8 8 8m0 0 8 8m-8-8 8 8m0 0 7 8m-7-8 7 8m0 0 7 9m-7-9 7 9m0 0 6 9m-6-9 6 9m0 0 6 9m-6-9 6 9m0 0 5 9m-5-9 5 9m0 0 4 9m-4-9 4 9m0 0 5 10m-5-10 5 10m0 0 3 9m-3-9 3 9m0 0 4 10m-4-10 4 10m0 0 2 10m-2-10 2 10m0 0 15-3m-15 3 15-3m0 0 8-2m-8 2 8-2m0 0 7-1m-7 1 7-1m0 0 7-1m-7 1 7-1m0 0 6-1m-6 1 6-1m0 0 7-1m-7 1 7-1m0 0 6-1m-6 1 6-1m0 0 6-1m-6 1 6-1m0 0h6m-6 0h6m0 0 6-1m-6 1 6-1m0 0h5m-5 0h5m0 0h6m-6 0h6m0 0h5m-5 0h5m0 0 4 1m-4-1 4 1m0 0h5m-5 0h5m0 0-4-10m4 10-4-10m0 0-2-10m2 10-2-10m0 0-3-10m3 10-3-10m0 0-2-10m2 10-2-10m0 0-3-10m3 10-3-10m0 0-1-10m1 10-1-10m0 0-2-10m2 10-2-10m0 0-1-9m1 9-1-9m0 0-1-10m1 10-1-10m0 0v-10m0 10v-10m0 0-1-9m1 9-1-9m0 0v-10m0 10v-10m0 0v-9m0 9v-9m0 0 1-10m-1 10 1-10m0 0 1-9m-1 9 1-9m0 0 1-9m-1 9 1-9m0 0 1-10m-1 10 1-10m0 0 1-9m-1 9 1-9m0 0 2-9m-2 9 2-9m0 0 2-9m-2 9 2-9m0 0 2-9m-2 9 2-9m0 0 3-10m-3 10 3-10m0 0 3-9m-3 9 3-9m0 0 2-9m-2 9 2-9m0 0 4-9m-4 9 4-9m0 0 3-9m-3 9 3-9m0 0 3-9m-3 9 3-9m0 0 4-9m-4 9 4-9m0 0 4-9m-4 9 4-9m0 0 4-9m-4 9 4-9m0 0 9-19m-9 19 9-19m0 0 2-3m-2 3 2-3m0 0 2-4m-2 4 2-4m0 0 1-4m-1 4 1-4m0 0 1-5m-1 5 1-5m0 0 2-4m-2 4 2-4m0 0 1-5m-1 5 1-5m0 0v-5m0 5v-5m0 0 1-6m-1 6 1-6m0 0v-5m0 5v-5m0 0v-6m0 6v-6m0 0v-6m0 6v-6m0 0v-6m0 6v-6m0 0-1-6m1 6-1-6m0 0-1-7m1 7-1-7m0 0-1-7m1 7-1-7m0 0-2-7m2 7-2-7m0 0s0 0 0 0m0 0s0 0 0 0m0 0s0 0 0 0m0 0s0 0 0 0"})),React__namespace.createElement("g",{fillOpacity:".8",fillRule:"evenodd",strokeLinecap:"round",strokeOpacity:".8"},React__namespace.createElement("path",{fill:"#a887e8",d:"m434 628 3 4 3 5 2 6 2 5 2 6 1 5 1 7v6l1 13 1 13 1 12 2 13 2 12 3 13 4 12 4 12 4 13 5 12 5 12 7 12 6 11 7 12 8 12 9 12 3 3 2 3 2 3 1 3 1 3 1 3 1 3v5l-1 3-1 2-1 3-1 3-1 2-4 5-61 100-4-9-4-8-4-8-4-8-4-7-5-7-4-7-5-7-4-6-5-6-5-6-5-6-5-5-5-5-5-4-6-5-5-4-6-4-6-4-5-3-6-3-6-3-6-3-6-2-7-2-6-2-7-2-6-1-7-2-7-1h-6l-7-1-4-10-3-10-2-10-3-9-2-10-2-10-1-10-2-9-1-10v-9l-1-10v-19l1-9v-9l1-10 1-9 2-9 1-9 2-10 2-9 3-9 2-9 3-9 3-9 4-9 3-9 4-10 4-9 5-9 4-9 5-9 2-5 2-5 2-5 2-5 1-5 1-5 1-6v-22l-1-6-1-5v-6l-3-12 114 144"}),React__namespace.createElement("path",{fill:"none",stroke:"black",strokeWidth:"4",d:"M434 628s0 0 0 0m0 0s0 0 0 0m0 0 3 4m-3-4 3 4m0 0 3 5m-3-5 3 5m0 0 2 6m-2-6 2 6m0 0 2 5m-2-5 2 5m0 0 2 6m-2-6 2 6m0 0 1 5m-1-5 1 5m0 0 1 7m-1-7 1 7m0 0v6m0-6v6m0 0 1 13m-1-13 1 13m0 0 1 13m-1-13 1 13m0 0 1 12m-1-12 1 12m0 0 2 13m-2-13 2 13m0 0 2 12m-2-12 2 12m0 0 3 13m-3-13 3 13m0 0 4 12m-4-12 4 12m0 0 4 12m-4-12 4 12m0 0 4 13m-4-13 4 13m0 0 5 12m-5-12 5 12m0 0 5 12m-5-12 5 12m0 0 7 12m-7-12 7 12m0 0 6 11m-6-11 6 11m0 0 7 12m-7-12 7 12m0 0 8 12m-8-12 8 12m0 0 9 12m-9-12 9 12m0 0 3 3m-3-3 3 3m0 0 2 3m-2-3 2 3m0 0 2 3m-2-3 2 3m0 0 1 3m-1-3 1 3m0 0 1 3m-1-3 1 3m0 0 1 3m-1-3 1 3m0 0 1 3m-1-3 1 3m0 0v3m0-3v3m0 0v2m0-2v2m0 0-1 3m1-3-1 3m0 0-1 2m1-2-1 2m0 0-1 3m1-3-1 3m0 0-1 3m1-3-1 3m0 0-1 2m1-2-1 2m0 0-4 5m4-5-4 5m0 0-61 100m61-100-61 100m0 0s0 0 0 0m0 0s0 0 0 0m0 0-4-9m4 9-4-9m0 0-4-8m4 8-4-8m0 0-4-8m4 8-4-8m0 0-4-8m4 8-4-8m0 0-4-7m4 7-4-7m0 0-5-7m5 7-5-7m0 0-4-7m4 7-4-7m0 0-5-7m5 7-5-7m0 0-4-6m4 6-4-6m0 0-5-6m5 6-5-6m0 0-5-6m5 6-5-6m0 0-5-6m5 6-5-6m0 0-5-5m5 5-5-5m0 0-5-5m5 5-5-5m0 0-5-4m5 4-5-4m0 0-6-5m6 5-6-5m0 0-5-4m5 4-5-4m0 0-6-4m6 4-6-4m0 0-6-4m6 4-6-4m0 0-5-3m5 3-5-3m0 0-6-3m6 3-6-3m0 0-6-3m6 3-6-3m0 0-6-3m6 3-6-3m0 0-6-2m6 2-6-2m0 0-7-2m7 2-7-2m0 0-6-2m6 2-6-2m0 0-7-2m7 2-7-2m0 0-6-1m6 1-6-1m0 0-7-2m7 2-7-2m0 0-7-1m7 1-7-1m0 0h-6m6 0h-6m0 0-7-1m7 1-7-1m0 0-4-10m4 10-4-10m0 0-3-10m3 10-3-10m0 0-2-10m2 10-2-10m0 0-3-9m3 9-3-9m0 0-2-10m2 10-2-10m0 0-2-10m2 10-2-10m0 0-1-10m1 10-1-10m0 0-2-9m2 9-2-9m0 0-1-10m1 10-1-10m0 0v-9m0 9v-9m0 0-1-10m1 10-1-10m0 0v-9m0 9v-9m0 0v-10m0 10v-10m0 0 1-9m-1 9 1-9m0 0v-9m0 9v-9m0 0 1-10m-1 10 1-10m0 0 1-9m-1 9 1-9m0 0 2-9m-2 9 2-9m0 0 1-9m-1 9 1-9m0 0 2-10m-2 10 2-10m0 0 2-9m-2 9 2-9m0 0 3-9m-3 9 3-9m0 0 2-9m-2 9 2-9m0 0 3-9m-3 9 3-9m0 0 3-9m-3 9 3-9m0 0 4-9m-4 9 4-9m0 0 3-9m-3 9 3-9m0 0 4-10m-4 10 4-10m0 0 4-9m-4 9 4-9m0 0 5-9m-5 9 5-9m0 0 4-9m-4 9 4-9m0 0 5-9m-5 9 5-9m0 0 2-5m-2 5 2-5m0 0 2-5m-2 5 2-5m0 0 2-5m-2 5 2-5m0 0 2-5m-2 5 2-5m0 0 1-5m-1 5 1-5m0 0 1-5m-1 5 1-5m0 0 1-6m-1 6 1-6m0 0v-5m0 5v-5m0 0v-6m0 6v-6m0 0v-5m0 5v-5m0 0v-6m0 6v-6m0 0-1-6m1 6-1-6m0 0-1-5m1 5-1-5m0 0v-6m0 6v-6m0 0-3-12m3 12-3-12m0 0 114 144M320 484l114 144m0 0s0 0 0 0m0 0s0 0 0 0m0 0s0 0 0 0m0 0s0 0 0 0"})),React__namespace.createElement("g",{fillOpacity:".8",fillRule:"evenodd",strokeLinecap:"round",strokeOpacity:".8"},React__namespace.createElement("path",{fill:"#6342a0",d:"m184 884 2 7 2 7 1 8 1 7 1 7 1 7v7l1 7v7l-1 7v7l-1 7v7l-1 7-3 13-3 13-4 14-5 12-5 13-6 13-6 12-6 13-8 12h14l14 1h14l14 1 13 1 14 2 13 2 14 1 13 3 13 2 13 3 13 3 13 4 12 4 13 4 12 5 7 2 6 2 6 1 6 1h5l5-1 6-1 4-2 5-3 5-3 4-4 4-4 2-3 1-2 2-3 2-3 2-4 1-3 2-4 1-4 25-85-5-11-4-11-6-10-5-10-6-9-6-9-6-8-6-8-7-8-7-7-7-6-7-6-8-6-8-5-8-5-8-4-9-4-9-3-9-3-9-2-10-2-10-2-10-1h-32l-11 1-12 2-11 1-12 3-12 3-13 3"}),React__namespace.createElement("path",{fill:"none",stroke:"black",strokeWidth:"4",d:"M184 884s0 0 0 0m0 0s0 0 0 0m0 0 2 7m-2-7 2 7m0 0 2 7m-2-7 2 7m0 0 1 8m-1-8 1 8m0 0 1 7m-1-7 1 7m0 0 1 7m-1-7 1 7m0 0 1 7m-1-7 1 7m0 0v7m0-7v7m0 0 1 7m-1-7 1 7m0 0v7m0-7v7m0 0-1 7m1-7-1 7m0 0v7m0-7v7m0 0-1 7m1-7-1 7m0 0v7m0-7v7m0 0-1 7m1-7-1 7m0 0-3 13m3-13-3 13m0 0-3 13m3-13-3 13m0 0-4 14m4-14-4 14m0 0-5 12m5-12-5 12m0 0-5 13m5-13-5 13m0 0-6 13m6-13-6 13m0 0-6 12m6-12-6 12m0 0-6 13m6-13-6 13m0 0-8 12m8-12-8 12m0 0h14m-14 0h14m0 0 14 1m-14-1 14 1m0 0h14m-14 0h14m0 0 14 1m-14-1 14 1m0 0 13 1m-13-1 13 1m0 0 14 2m-14-2 14 2m0 0 13 2m-13-2 13 2m0 0 14 1m-14-1 14 1m0 0 13 3m-13-3 13 3m0 0 13 2m-13-2 13 2m0 0 13 3m-13-3 13 3m0 0 13 3m-13-3 13 3m0 0 13 4m-13-4 13 4m0 0 12 4m-12-4 12 4m0 0 13 4m-13-4 13 4m0 0 12 5m-12-5 12 5m0 0 7 2m-7-2 7 2m0 0 6 2m-6-2 6 2m0 0 6 1m-6-1 6 1m0 0 6 1m-6-1 6 1m0 0h5m-5 0h5m0 0 5-1m-5 1 5-1m0 0 6-1m-6 1 6-1m0 0 4-2m-4 2 4-2m0 0 5-3m-5 3 5-3m0 0 5-3m-5 3 5-3m0 0 4-4m-4 4 4-4m0 0 4-4m-4 4 4-4m0 0 2-3m-2 3 2-3m0 0 1-2m-1 2 1-2m0 0 2-3m-2 3 2-3m0 0 2-3m-2 3 2-3m0 0 2-4m-2 4 2-4m0 0 1-3m-1 3 1-3m0 0 2-4m-2 4 2-4m0 0 1-4m-1 4 1-4m0 0 25-85m-25 85 25-85m0 0s0 0 0 0m0 0s0 0 0 0m0 0-5-11m5 11-5-11m0 0-4-11m4 11-4-11m0 0-6-10m6 10-6-10m0 0-5-10m5 10-5-10m0 0-6-9m6 9-6-9m0 0-6-9m6 9-6-9m0 0-6-8m6 8-6-8m0 0-6-8m6 8-6-8m0 0-7-8m7 8-7-8m0 0-7-7m7 7-7-7m0 0-7-6m7 6-7-6m0 0-7-6m7 6-7-6m0 0-8-6m8 6-8-6m0 0-8-5m8 5-8-5m0 0-8-5m8 5-8-5m0 0-8-4m8 4-8-4m0 0-9-4m9 4-9-4m0 0-9-3m9 3-9-3m0 0-9-3m9 3-9-3m0 0-9-2m9 2-9-2m0 0-10-2m10 2-10-2m0 0-10-2m10 2-10-2m0 0-10-1m10 1-10-1m0 0h-10m10 0h-10m0 0h-11m11 0h-11m0 0h-11m11 0h-11m0 0-11 1m11-1-11 1m0 0-12 2m12-2-12 2m0 0-11 1m11-1-11 1m0 0-12 3m12-3-12 3m0 0-12 3m12-3-12 3m0 0-13 3m13-3-13 3m0 0s0 0 0 0m0 0s0 0 0 0m0 0s0 0 0 0m0 0s0 0 0 0"})),React__namespace.createElement("g",{fillOpacity:".8",fillRule:"evenodd",strokeLinecap:"round",strokeOpacity:".8"},React__namespace.createElement("path",{fill:"#390f8c",d:"m82 745 13 9 6 5 6 4 6 5 5 5 6 5 5 5 5 6 5 5 5 6 5 6 4 6 4 6 4 6 4 6 3 6 4 7 3 6 2 7 3 7 2 7 2 7 2 7 1 6 2 7 1 7 2 6 1 7v7l1 6v33l-1 7-1 7-1 6-1 7-1 6-2 7-1 7-2 6-3 7-2 6-3 7-2 7-3 6-4 7-3 7-3 6-4 7-4 7-4 7-5 6L16 970l-3-4-4-3-2-4-3-4-1-4-2-5-1-4v-9l1-5v-5l2-5 2-5 2-6 3-5 3-6 69-151"}),React__namespace.createElement("path",{fill:"none",stroke:"black",strokeWidth:"4",d:"M82 745s0 0 0 0m0 0s0 0 0 0m0 0 13 9m-13-9 13 9m0 0 6 5m-6-5 6 5m0 0 6 4m-6-4 6 4m0 0 6 5m-6-5 6 5m0 0 5 5m-5-5 5 5m0 0 6 5m-6-5 6 5m0 0 5 5m-5-5 5 5m0 0 5 6m-5-6 5 6m0 0 5 5m-5-5 5 5m0 0 5 6m-5-6 5 6m0 0 5 6m-5-6 5 6m0 0 4 6m-4-6 4 6m0 0 4 6m-4-6 4 6m0 0 4 6m-4-6 4 6m0 0 4 6m-4-6 4 6m0 0 3 6m-3-6 3 6m0 0 4 7m-4-7 4 7m0 0 3 6m-3-6 3 6m0 0 2 7m-2-7 2 7m0 0 3 7m-3-7 3 7m0 0 2 7m-2-7 2 7m0 0 2 7m-2-7 2 7m0 0 2 7m-2-7 2 7m0 0 1 6m-1-6 1 6m0 0 2 7m-2-7 2 7m0 0 1 7m-1-7 1 7m0 0 2 6m-2-6 2 6m0 0 1 7m-1-7 1 7m0 0v7m0-7v7m0 0 1 6m-1-6 1 6m0 0v7m0-7v7m0 0v7m0-7v7m0 0v6m0-6v6m0 0v7m0-7v7m0 0v6m0-6v6m0 0-1 7m1-7-1 7m0 0-1 7m1-7-1 7m0 0-1 6m1-6-1 6m0 0-1 7m1-7-1 7m0 0-1 6m1-6-1 6m0 0-2 7m2-7-2 7m0 0-1 7m1-7-1 7m0 0-2 6m2-6-2 6m0 0-3 7m3-7-3 7m0 0-2 6m2-6-2 6m0 0-3 7m3-7-3 7m0 0-2 7m2-7-2 7m0 0-3 6m3-6-3 6m0 0-4 7m4-7-4 7m0 0-3 7m3-7-3 7m0 0-3 6m3-6-3 6m0 0-4 7m4-7-4 7m0 0-4 7m4-7-4 7m0 0-4 7m4-7-4 7m0 0-5 6m5-6-5 6m0 0L16 970m128 126L16 970m0 0s0 0 0 0m0 0s0 0 0 0m0 0-3-4m3 4-3-4m0 0-4-3m4 3-4-3m0 0-2-4m2 4-2-4m0 0-3-4m3 4-3-4m0 0-1-4m1 4-1-4m0 0-2-5m2 5-2-5m0 0-1-4m1 4-1-4m0 0v-4m0 4v-4m0 0v-5m0 5v-5m0 0 1-5m-1 5 1-5m0 0v-5m0 5v-5m0 0 2-5m-2 5 2-5m0 0 2-5m-2 5 2-5m0 0 2-6m-2 6 2-6m0 0 3-5m-3 5 3-5m0 0 3-6m-3 6 3-6m0 0 69-151M13 896l69-151m0 0s0 0 0 0m0 0s0 0 0 0m0 0s0 0 0 0m0 0s0 0 0 0"})),React__namespace.createElement("path",{fill:"none",stroke:"#CECDCC",strokeLinecap:"round",strokeWidth:"10",d:"M86 746s0 0 0 0m0 0s0 0 0 0m0 0 11 8m-11-8 11 8m0 0 10 8m-10-8 10 8m0 0 10 9m-10-9 10 9m0 0 8 8m-8-8 8 8m0 0 8 8m-8-8 8 8m0 0 8 8m-8-8 8 8m0 0 6 9m-6-9 6 9m0 0 7 8m-7-8 7 8m0 0 5 8m-5-8 5 8m0 0 6 9m-6-9 6 9m0 0 4 8m-4-8 4 8m0 0 4 9m-4-9 4 9m0 0 4 9m-4-9 4 9m0 0 3 9m-3-9 3 9m0 0 3 9m-3-9 3 9m0 0 3 9m-3-9 3 9m0 0 7-2m-7 2 7-2m0 0 8-1m-8 1 8-1m0 0 7-2m-7 2 7-2m0 0 7-1m-7 1 7-1m0 0 7-1m-7 1 7-1m0 0 7-1m-7 1 7-1m0 0 7-1m-7 1 7-1m0 0 6-1m-6 1 6-1m0 0h6m-6 0h6m0 0 6-1m-6 1 6-1m0 0h6m-6 0h6m0 0 5-1m-5 1 5-1m0 0h5m-5 0h5m0 0h5m-5 0h5m0 0h4m-4 0h4m0 0h4m-4 0h4m0 0-3-11m3 11-3-11m0 0-3-10m3 10-3-10m0 0-3-10m3 10-3-10m0 0-3-10m3 10-3-10m0 0-2-10m2 10-2-10m0 0-2-10m2 10-2-10m0 0-1-10m1 10-1-10m0 0-2-9m2 9-2-9m0 0-1-10m1 10-1-10m0 0v-10m0 10v-10m0 0-1-9m1 9-1-9m0 0v-10m0 10v-10m0 0v-9m0 9v-9m0 0 1-9m-1 9 1-9m0 0 1-10m-1 10 1-10m0 0 1-9m-1 9 1-9m0 0 1-9m-1 9 1-9m0 0 1-10m-1 10 1-10m0 0 2-9m-2 9 2-9m0 0 2-9m-2 9 2-9m0 0 3-9m-3 9 3-9m0 0 2-9m-2 9 2-9m0 0 3-9m-3 9 3-9m0 0 3-9m-3 9 3-9m0 0 3-9m-3 9 3-9m0 0 4-9m-4 9 4-9m0 0 3-9m-3 9 3-9m0 0c2-2 3-5 4-9m-4 9 4-9m0 0 5-9m-5 9 5-9m0 0 4-8m-4 8 4-8m0 0 5-9m-5 9 5-9m0 0 4-11m-4 11 4-11m0 0 4-11m-4 11 4-11m0 0 4-10m-4 10 4-10m0 0 2-11m-2 11 2-11"}),React__namespace.createElement("g",{fillRule:"evenodd",strokeLinecap:"round"},React__namespace.createElement("path",{fill:"#FFF6F0",d:"m153 288-19-25 21-20 199-5 23 21-24 28-201 3-4-4"}),React__namespace.createElement("path",{fill:"none",stroke:"black",strokeWidth:"4",d:"M153 290c-4-9-13-13-20-29m19 25c-8-8-15-18-22-23m4-5c2-6 16-15 20-20m-23 22c10-7 18-16 27-22m-5 2 205-1m-203-2c57-1 114-4 201-2m2 3 24 23m-24-24c3 7 11 10 20 21m0 0c-8 6-9 21-24 24m25-20c-3 2-10 8-22 21m-1 4c-70-1-146 1-207 1m208-5c-64 2-131 3-205 3m-1 1s0 0 0 0m0 0s0 0 0 0m0 0s0 0 0 0m0 0s0 0 0 0"})),React__namespace.createElement("path",{fill:"none",stroke:"#E6E6E5",strokeLinecap:"round",strokeWidth:"10",d:"M455 1003s0 0 0 0m0 0s0 0 0 0m0 0-5-10m5 10-5-10m0 0-5-10m5 10-5-10m0 0-5-10m5 10-5-10m0 0-6-9m6 9-6-9m0 0-5-9m5 9-5-9m0 0-6-8m6 8-6-8m0 0-7-8m7 8-7-8m0 0-6-8m6 8-6-8m0 0-6-7m6 7-6-7m0 0-7-6m7 6-7-6m0 0-7-6m7 6-7-6m0 0-7-6m7 6-7-6m0 0-8-5m8 5-8-5m0 0-8-5m8 5-8-5m0 0-8-5m8 5-8-5m0 0-8-4m8 4-8-4m0 0-8-3m8 3-8-3m0 0-9-3m9 3-9-3m0 0-9-3m9 3-9-3m0 0-9-2m9 2-9-2m0 0-9-2m9 2-9-2m0 0-10-1m10 1-10-1m0 0-10-1m10 1-10-1m0 0h-10m10 0h-10m0 0h-10m10 0h-10m0 0h-11m11 0h-11m0 0-11 1m11-1-11 1m0 0-11 1m11-1-11 1m0 0-12 2m12-2-12 2m0 0-12 2m12-2-12 2m0 0-12 2m12-2-12 2m0 0-12 3m12-3-12 3m0 0 2 8m-2-8 2 8m0 0 1 7m-1-7 1 7m0 0 2 7m-2-7 2 7m0 0 1 7m-1-7 1 7m0 0 1 7m-1-7 1 7m0 0 1 7m-1-7 1 7m0 0v7m0-7v7m0 0v6m0-6v6m0 0v7m0-7v7m0 0v7m0-7v7m0 0v6m0-6v6m0 0v7m0-7v7m0 0-2 12m2-12-2 12m0 0-2 13m2-13-2 13m0 0-3 12m3-12-3 12m0 0-4 12m4-12-4 12m0 0-4 12m4-12-4 12m0 0-5 12m5-12-5 12m0 0-5 12m5-12-5 12m0 0-6 13m6-13-6 13m0 0-6 12m6-12-6 12m0 0-7 12m7-12-7 12"}),React__namespace.createElement("path",{fill:"none",stroke:"#6d6d6d",strokeLinecap:"round",strokeWidth:"10",d:"M185 883s0 0 0 0m0 0s0 0 0 0m0 0 3 14m-3-14 3 14m0 0 3 13m-3-13 3 13m0 0 1 13m-1-13 1 13m0 0 1 13m-1-13 1 13m0 0 1 13m-1-13 1 13m0 0-1 13m1-13-1 13m0 0-1 13m1-13-1 13m0 0-2 12m2-12-2 12m0 0-3 13m3-13-3 13m0 0-3 13m3-13-3 13m0 0-4 12m4-12-4 12m0 0-5 13m5-13-5 13m0 0-6 13m6-13-6 13m0 0-6 12m6-12-6 12m0 0-7 13m7-13-7 13m0 0-8 13m8-13-8 13"}),React__namespace.createElement("g",{fillRule:"evenodd",strokeLinecap:"round"},React__namespace.createElement("path",{fill:i,d:"m148 291-18-30 23-17 206-3 17 19-22 22-204 9v-5"}),React__namespace.createElement("path",{fill:"none",stroke:"transparent",strokeWidth:".5",d:"M153 289c-5-11-10-12-24-27m21 29c-3-9-9-16-20-30m-1 1c13-6 16-13 26-21m-22 20c5-6 14-14 25-20m-1 2c67-5 137-8 198-6m-199 2c67 3 132 3 203-1m2 1c3 6 15 17 19 19m-23-22c9 12 17 19 21 24m-2 0c-3 9-8 12-15 29m18-29-20 27m-4-1-206 4m209-5c-64 0-131 3-207 2m0 2s0 0 0 0m0 0s0 0 0 0m0 0s0 0 0 0m0 0s0 0 0 0"})),React__namespace.createElement("path",{fill:"none",stroke:"black",strokeLinecap:"round",strokeWidth:"4",d:"M153 284c-6-2-17-14-22-25m21 29-21-27m4-1c2-7 8-10 21-24m-26 24c8-7 17-12 27-22m-1 1c75-6 140-6 202-3m-201 1c41 4 81 3 202-2m-3-1c10 7 11 8 25 27m-23-23c5 3 8 9 19 24m-1 0c-8 6-10 19-21 23m25-27c-5 6-9 13-24 25m1 2c-64 1-132 2-206-1m207 0c-56 0-112-2-208 2m1 1s0 0 0 0m0 0s0 0 0 0"}),React__namespace.createElement("g",{fillRule:"evenodd",strokeLinecap:"round"},React__namespace.createElement("path",{fill:n,d:"M298 233c-2-10-12-36-12-60 1-24 8-62 13-84s13-37 17-48 7-13 7-16c-1-3-2-2-9-2-7-1-23 1-31-1-9-2-14-9-18-12l-11-6c-3 0 0 0-5 3s-17 12-26 15-19 2-25 2c-7 0-10-4-12-1-1 3 4 13 5 18 2 5 2 2 5 12l11 47 8 62c2 16 4 23 4 32 0 10-4 18-5 25 0 7 0 13 2 17s4 4 12 4l36-3 35-4"}),React__namespace.createElement("path",{fill:"none",stroke:"black",strokeWidth:"4",d:"M297 236c-1-10-8-38-8-62s5-61 9-83 12-40 16-51c3-11 7-12 7-14-1-3-2-1-8-1-6-1-19-1-27-4-9-2-18-8-23-11s-6-7-8-8c-3 0-2 1-7 4s-14 12-23 15c-9 4-22 4-29 5-6 0-8-3-9-1s2 10 4 14l3 15c3 10 11 29 15 46l7 60c2 15 1 25 1 35l-1 26c0 7-3 14-1 17 2 2 6 0 14 0h34l35-2m1 0c-2-11-10-37-10-61-1-24 4-61 8-83 5-22 13-39 17-51 4-11 9-15 8-18 0-3-5 2-11 1l-24-3c-8-2-17-5-22-8-5-4-6-11-8-12-3-1-3 1-8 4-6 3-15 11-24 14-9 4-24 5-30 6s-7-4-8-1c-1 2 2 10 3 15l4 14 12 48c4 18 11 43 12 59 2 16-2 25-2 35l-1 26c0 8-1 16 1 18 2 3 4-2 12-2l36-1h34"})),React__namespace.createElement("g",{fillOpacity:".8",fillRule:"evenodd",strokeLinecap:"round",strokeOpacity:".8"},React__namespace.createElement("path",{fill:n,d:"M293 232c-1-10-6-38-5-61 1-24 7-58 11-80 4-21 12-38 15-50 4-12 9-17 8-19-1-3-9 6-16 5-6 0-13-6-21-8s-20-2-25-4c-5-3-3-12-6-13s-6 5-11 8c-5 2-10 5-18 7s-26 3-32 5c-7 2-5 4-6 7l3 9c0 4-1 2 1 14 2 11 6 35 11 53 4 17 14 37 16 52 2 14-4 26-5 36 0 10 3 16 3 24s-5 21-3 24 9-4 17-5c9-2 20-2 31-2l35-1"}),React__namespace.createElement("path",{fill:"none",stroke:"black",d:"M298 234c-1-11-11-36-12-60 0-24 5-62 9-84s11-36 15-47 11-14 11-17c1-3-2 1-9 0l-31-8c-9-3-15-3-20-6-4-3-6-12-9-12s-1 6-6 9-14 8-23 11l-29 4c-6 1-7-1-8 1-1 3-1 10 1 14 1 5 5 3 8 13s5 30 9 48c3 17 9 41 11 57 2 17 2 30 2 40l-2 23c-1 7-3 15-1 18 3 2 7-1 14-1 8 0 21 3 32 2 12 0 29-6 35-6m1 6c-1-10-12-37-12-62a493 493 0 0 1 26-139c4-10 9-8 9-10-1-2-5-2-11-3s-19-1-27-3l-22-11c-4-3-1-6-3-7-2 0-3 3-8 5-6 3-16 11-25 13-8 2-18 0-24 0-6 1-11-1-12 1-1 3 4 11 6 16 2 4 2 0 4 11l8 52 7 56c2 16 2 30 2 41l-2 21c0 6 2 11 4 13 3 3 3 0 11 1l34 3 33 1"})),React__namespace.createElement("g",{fillOpacity:".8",fillRule:"evenodd",strokeLinecap:"round",strokeOpacity:".8"},React__namespace.createElement("path",{fill:t,d:"M298 233c-1-10-10-35-10-59 0-23 6-60 10-83 5-23 13-41 16-52l4-13c0-3 0-3-6-3-5-1-21 1-29-1-9-2-15-8-20-11l-11-8c-3-1 1-1-4 2l-25 13-27 9c-6 1-8-4-9-3-1 2 0 9 1 14s0 7 4 18c3 10 12 25 16 43 4 17 6 43 7 59 2 16 2 25 2 36l-2 28c-1 7-1 12 1 14s4-1 12-1l33 1 37-3"}),React__namespace.createElement("path",{fill:"none",stroke:"black",strokeWidth:"4",d:"M297 235c-2-10-10-37-10-61-1-24 5-60 9-82 5-22 14-40 18-51s8-13 7-16c0-3-4-2-11-3-6 0-18 0-26-2s-17-7-22-10-6-7-8-7c-3-1-2 1-7 3-5 3-15 10-23 13-9 4-22 5-28 6-7 1-9-2-10 0s3 9 4 13l3 15c3 10 10 28 14 46s8 45 10 61v35l-2 25c0 7-3 14-1 17s6 1 13 1l33-2 37-1m-1-1c-3-10-11-35-11-59 1-24 9-62 14-85 4-23 12-40 15-51l6-17c-1-2-3 3-9 2a123 123 0 0 1-50-15c-5-3-3-7-5-7-3-1-3 1-8 4s-15 11-24 14-23 4-30 5c-6 1-8-3-8-1-1 2 3 9 4 14l3 14c3 10 11 30 15 48l8 61c1 16 0 25-1 35l-1 24c0 7-1 16 1 19s4-1 11-2l34 1 37-3"})),React__namespace.createElement("g",{strokeLinecap:"round"},React__namespace.createElement("path",{fill:i,d:"M256 36c3 0 6 2 8 5s4 9 4 13l-3 12c-2 4-5 7-8 8s-6 1-8-1c-3-2-6-6-7-10s-2-9-1-13 4-8 6-10c2-3 7-4 8-4 2-1 1 1 1 1m1-1c3 0 6 4 8 7l3 12c0 5-2 10-4 13-1 3-4 6-7 7-3 0-8-1-10-4-3-2-5-6-5-10V48c1-4 4-8 6-10 3-2 7-2 9-2v1"}),React__namespace.createElement("path",{fill:"none",stroke:"black",strokeWidth:"4",d:"M252 37c2-1 7-1 9 1l5 10c1 4 2 9 1 13s-4 8-6 11c-3 2-6 3-8 2-3 0-7-3-9-6s-3-8-3-12c-1-4 1-10 3-13s7-5 8-6v-1m0 0c2-1 6 0 9 2 2 2 5 6 6 10v14c-1 4-4 7-6 9-3 2-6 4-9 3-3 0-6-3-8-7-2-3-4-8-4-12s2-9 4-12l8-7v1"})),React__namespace.createElement("g",{fillRule:"evenodd",strokeLinecap:"round"},React__namespace.createElement("path",{fill:"hsla(30, 2%, 62%, 1)",d:"m275 624-12-21c-4-9-7-22-12-30s-12-12-19-18l-23-19c-6-4-10-2-12-5-2-4 0-5 0-16l4-53 8-154c2-28-1-14 2-16s8 3 16 3c7 0 25-6 30-3s-3-3-2 22l7 125 9 187"}),React__namespace.createElement("path",{fill:"none",stroke:"black",strokeWidth:"4",d:"m273 626-9-24c-4-9-6-18-11-26l-21-23-23-14c-5-4-9-4-11-7-2-4-2-2-2-14l3-57 9-154c1-28-1-11 2-13 3-3 11 0 18 0 8-1 25-5 29-2s-3-5-2 19l7 127 12 187m0 0-11-25c-4-9-6-18-11-26-5-7-13-14-21-20-7-6-18-11-23-15-6-3-7-1-9-5s-2-5-2-17c-1-12-1-21 1-56l11-152c3-28-1-14 2-16s10 2 17 2c8-1 24-6 28-4 4 3-2-5-1 19l6 127 14 188"})),React__namespace.createElement("g",{fill:"none",fillRule:"evenodd",strokeLinecap:"round"},React__namespace.createElement("path",{stroke:a,strokeWidth:".3",d:"M208 292s0 0 0 0m0 0s0 0 0 0m0 3 1-1m-1 1 1-1m-1 5 2-4m-3 4 3-4m-3 5c2 0 2-3 7-6m-6 7c0-2 3-3 5-6m-8 12c4-5 5-8 13-14m-11 12c3-5 6-8 9-10m-11 11c3 3 8-2 12-11m-10 13 11-15m-14 16c5-9 13-9 16-17m-11 19c1-5 6-8 13-15m-13 17c3-2 8-15 16-22m-19 22 18-17m-17 20 20-19m-18 22c4-10 12-18 19-26m-18 30c0-12 13-21 17-33m-19 29c6-6 9-13 20-24m-18 29c7-7 10-19 19-31m-23 30c8-8 18-19 25-29m-25 34c13-16 18-21 32-31m-31 31c6-12 16-20 27-35m-28 41c11-11 11-20 33-40m-34 36 35-36m-36 37c18-13 30-31 39-40m-37 42c9-9 21-21 33-40m-36 41c20-9 29-31 42-44m-40 48c11-11 21-21 38-43m-41 45c13-11 21-22 48-44m-44 43 41-45m-42 52c12-20 34-34 46-52m-47 49c13-13 27-25 46-49m-46 54c9-18 21-31 51-52m-48 51 46-55m-46 60c15-16 25-38 44-62m-48 59c14-15 30-30 50-56m-47 63c12-15 23-27 46-63m-47 61 50-59m-48 64c19-26 40-50 50-61m-53 58 54-62m-52 69c15-21 37-46 48-61m-49 58 54-63m-54 68c15-20 30-40 51-61m-50 59c16-23 35-44 50-59m-51 64c11-14 24-27 48-59m-48 57 51-62m-55 65c16-13 24-25 57-57m-55 57c12-11 22-27 53-60m-50 61c21-18 40-42 54-60m-56 61 54-59m-55 60c20-11 35-28 51-60m-49 63c16-18 30-39 50-62m-52 63c13-16 30-27 51-62m-51 65c14-19 29-33 53-61m-55 60c18-13 30-25 59-56m-57 60c12-13 28-30 53-62m-56 63c27-18 46-44 60-62m-59 64c17-14 33-31 58-61m-52 66c20-27 41-51 54-68m-56 65c8-14 24-26 52-60m-54 62c19-16 34-31 58-60m-59 62 56-63m-55 70c15-26 32-41 51-67m-52 63c21-22 42-47 57-60m-53 65c12-15 21-26 48-67m-50 65c11-15 22-28 54-60m-54 64c12-20 33-39 51-60m-53 61c17-20 36-44 57-65m-59 66c15-11 23-23 56-65m-52 68c11-18 25-32 54-65m-54 69c20-25 39-41 51-64m-51 63c17-20 35-41 55-67m-58 68c23-21 43-45 59-66m-58 66c15-19 30-37 57-65m-55 72c18-21 37-44 54-69m-56 68 55-65m-57 68c20-24 41-45 59-63m-57 60c19-21 36-39 56-65m-55 68c14-17 28-26 58-65m-61 66 57-65m-54 69c17-16 26-33 57-68m-59 66c18-22 40-43 58-64m-55 72c12-15 19-34 57-72m-61 71 60-68m-61 67c23-20 43-41 61-61m-60 62c18-19 34-37 58-67m-59 70c14-18 35-35 64-66m-64 68c24-27 43-48 58-67m-55 67c20-23 46-52 54-63m-54 67c19-26 37-45 58-68m-57 73c11-20 33-44 56-72m-58 68c14-17 31-32 59-67m-61 71c20-16 41-36 60-69m-57 71c21-27 41-50 59-68m-57 73c18-22 30-41 59-72m-61 69 60-70m-59 73c11-20 28-36 57-71m-61 73c21-23 40-44 62-72m-58 74c12-18 32-40 56-67m-58 66c15-19 32-37 57-70m-56 72 56-67m-59 70 61-70m-63 76c26-29 50-63 60-77m-56 74 61-72m-64 77c15-20 36-36 64-77m-62 73c22-26 49-52 62-71m-62 77c15-15 27-38 59-75m-60 73 62-71m-60 75c17-20 30-33 57-74m-60 73c15-15 33-33 64-71m-65 78c14-21 30-42 67-75m-64 71c16-15 29-33 60-70m-62 78c21-28 33-46 60-79m-61 74c23-23 42-49 63-71m-65 78c24-33 47-53 70-75m-66 71c26-27 53-57 61-73m-63 76c24-21 39-47 61-69m-60 69 64-72m-65 74c13-15 30-35 64-68m-63 70c19-19 35-37 65-71m-64 73c24-21 41-48 60-71m-63 71c25-29 50-56 65-71m-62 73c19-18 35-39 60-74m-62 76c15-19 33-39 64-71m-66 78c18-27 41-43 71-73m-69 71c26-29 53-58 64-74m-62 80c17-28 37-51 66-78m-68 76c15-17 25-32 66-78m-68 80c22-17 34-37 64-75m-63 73 67-71m-69 75c23-26 49-48 66-73m-64 74c12-15 26-32 66-77m-68 79c20-16 30-33 68-75m-64 76 65-77m-70 84c19-15 29-35 73-79m-71 77c26-32 51-57 70-79m-71 82c24-20 36-44 73-77m-71 76c21-28 47-54 69-77m-68 82c17-26 38-50 66-76m-67 75c16-23 35-40 67-78m-64 79c19-22 43-49 69-76m-73 76 69-76m-70 83c27-31 53-60 69-81m-67 80c19-22 34-43 67-78m-65 83c16-24 36-46 69-83m-72 79c20-24 41-51 70-76m-68 81c25-35 55-64 64-79m-65 75c27-29 54-56 67-75m-64 79c21-31 41-51 63-81m-65 80c17-17 33-31 69-74m-70 79c19-21 29-36 66-80m-64 79 65-76m-60 79c12-22 35-42 63-79m-64 74 65-73m-61 77c19-27 35-47 59-72m-63 73c23-28 43-52 65-76m-61 75c11-22 34-43 58-72m-62 71c20-18 36-39 64-68m-63 68 62-65m-60 68c11-16 26-33 59-70m-59 69c16-14 28-29 57-67m-53 70 57-68m-53 72c11-25 23-35 51-71m-56 67c15-19 33-37 56-66m-50 70c20-30 39-55 52-64m-55 62 55-65m-50 66c12-17 25-27 46-65m-50 64c20-24 36-46 54-60m-52 59c20-16 37-33 56-60m-58 60c18-18 32-35 52-57m-49 60 52-58m-50 57c14-15 26-32 47-57m-44 61c9-19 25-29 43-56m-46 52c19-19 34-35 49-55m-47 57c10-7 16-24 44-51m-44 51c16-15 29-34 46-52m-47 54c12-17 27-30 49-55m-46 54c10-13 23-26 45-51m-47 56c19-25 39-40 44-52m-40 50c18-22 34-40 43-53m-41 52c5-11 19-22 43-44m-45 44c11-10 20-22 42-47m-41 49c14-10 21-18 44-51m-42 50 43-48m-39 50 37-47m-38 48c8-14 18-22 40-46m-39 50c4-9 15-25 35-48m-35 43c10-13 23-26 38-41m-33 45c12-23 30-32 31-47m-35 44c14-14 28-31 36-41m-36 43c9-13 24-22 39-42m-37 41c11-14 26-25 33-39m-30 46c8-13 18-24 34-40m-36 37 33-39m-33 43c18-22 24-32 35-44m-35 40c9-8 19-16 35-36m-29 35c3-3 12-19 29-30m-34 31c13-9 22-20 36-33m-33 40c11-12 24-31 31-40m-31 39c8-12 18-20 29-38m-24 40c3-10 13-19 26-39m-28 35c3-5 13-14 29-31m-27 37c11-13 18-26 27-36m-30 33 28-33m-24 30c9-8 20-15 21-28m-23 33c7-8 14-14 28-31m-25 33c7-10 8-18 24-29m-26 27 25-30m-23 30c11-9 15-19 20-30m-18 32c4-8 11-13 22-28m-24 27c13-8 21-19 24-25m-24 26c10-6 18-17 25-26m-26 25c10-7 18-8 23-18m-20 23c9-9 17-20 23-27m-20 28c10-12 14-19 20-24m-21 23c6-4 8-10 21-24m-20 23c7 0 12-9 16-17m-17 19c8-6 16-16 20-20m-14 20c3 1 2-8 12-17m-14 20c5-7 8-12 18-21m-21 26c10-10 14-16 19-26m-15 21c4-6 12-12 15-17m-14 21c3-6 9-11 13-19m-13 18c3-6 11-14 15-19m-15 24c0-6 5-15 14-21m-16 17c7-6 13-14 17-19m-13 22c1-5 8-11 16-17m-19 18c4-4 8-7 15-16m-12 16c7-1 10-7 17-19m-16 19c5-7 10-10 14-15m-15 20c5-5 3-10 16-19m-15 17 14-17m-15 21c6-4 10-11 13-14m-12 14c4-4 7-7 12-16m-11 16c5-7 11-9 9-17m-10 17c6-5 9-9 16-12m-10 13c-4-2 4-4 8-10m-12 13 11-15m-11 13c2-4 9-3 13-10m-11 11 9-12m-9 14c0-1 5-1 13-14m-14 17c5-6 5-8 12-12m-13 11 15-9m-12 9 11-11m-10 17c2-9 6-13 8-16m-9 13 10-10m-9 13 10-12m-9 11 8-10m-9 11c3-3 8-4 8-9m-7 11 9-10m-6 13c-2-3 1-4 7-9m-10 7c4-2 6-3 9-8m-8 10c5-1 6-4 7-6m-6 6 6-7m-4 8c0 2 2-1 4-3m-6 5 6-5m-5 6c2 0 3-2 5-4m-4 4 4-4m-3 8 3-5m-3 4 4-4m-3 7 2-4m-3 4 3-5m-2 6 3-3m-3 3 3-3m-2 5 1-2m-1 2 2-2m-1 4 1-1m-1 1 1-1"}),React__namespace.createElement("path",{stroke:"transparent",strokeWidth:".5",d:"m275 627-11-23c-4-9-10-23-15-31s-10-11-17-17l-24-19c-6-3-8 2-10-1-2-4-3-7-3-19l3-56 10-153c2-27-4-11 0-14 3-2 15-1 22-1 8 0 19-3 23-1 5 3 1-6 2 18l8 131 11 184m-2 1-9-26c-3-8-3-18-8-25-6-7-16-10-23-16s-14-18-19-22c-6-4-10 1-12-2-3-4-3-9-4-21-1-13-4-20-2-54 1-35 7-127 9-155s0-10 4-12c5-2 16 2 24 2 8-1 22-8 25-4 4 3-2 0-1 25 0 25 2 74 6 125 3 52 12 152 13 183"})),React__namespace.createElement("path",{fill:"none",stroke:"black",strokeLinecap:"round",strokeWidth:"4",d:"m275 627-13-26c-4-9-5-17-10-25s-12-15-19-21l-23-15c-6-3-9-3-11-7-3-4-3-4-3-16l4-55 8-154c1-28-1-12 3-14 3-3 10 0 18 0 7 0 23-5 28-2 4 4-1-3 0 21l6 127 12 186m-1 0-10-24c-3-9-8-20-13-28s-11-13-18-19l-25-18c-5-3-6-2-8-5s-3-1-3-13c-1-12 0-22 2-57l10-155c2-28-4-12-1-14 4-2 13 1 20 2 8 0 22-3 27 0s1-7 2 18l5 126c3 52 12 155 13 186"}),React__namespace.createElement("g",{fillRule:"evenodd",strokeLinecap:"round"},React__namespace.createElement("path",{fill:n,d:"M273 611c1-4 5-21 9-31 5-10 12-22 18-29 6-8 11-12 18-18 7-5 20-9 24-15 3-5 0 13-5-17l-24-161c-4-31-4-17-5-23-1-7 1-12 1-17-1-4-2-9-4-10s-4 4-8 4l-17-2-15 1c-5 0-11 1-12 3s5 2 6 9c0 6-4-7-2 31 1 38 10 160 12 198l1 31 3 45"}),React__namespace.createElement("path",{fill:"none",stroke:"black",strokeWidth:"4",d:"M270 610c2-5 6-21 11-30 5-10 11-21 17-29l22-18c7-6 18-8 21-14 2-6 2 9-3-21l-25-158-4-25v-14c-1-3-2-7-4-9s-5-1-9-1l-16 2-13 1c-5 0-9-2-11 0-1 2 2 5 2 12 0 8-2-6 0 32l9 197 2 28 2 47m1 2c1-6 4-24 8-34s10-18 17-26 17-16 24-22c6-5 15-6 18-11s5 12 0-18l-25-163c-5-31-1-18-2-23l-5-12c-1-4 0-10-2-12-1-2-5 0-9 1l-17 1h-12c-4 0-10-2-11 1-2 2 2 4 3 11 0 8-2-7 0 31l10 199c2 38-1 16-1 28l1 47"})),React__namespace.createElement("g",{fill:"none",fillRule:"evenodd",strokeLinecap:"round"},React__namespace.createElement("path",{stroke:a,strokeWidth:".5",d:"m254 299 7-5m-7 5 7-5m-4 8 4-8m-4 8 4-8m-7 11c4-4 6-4 12-11m-12 11 12-11m-9 13c4-2 4-6 9-13m-9 13 9-13m-11 17c2-5 8-9 17-17m-17 17 17-17m-14 19 14-19m-14 19 14-19m-17 22 23-23m-23 23 23-23m-20 26 20-26m-20 26 20-26m-23 30c10-13 21-22 28-29m-28 29c8-11 17-19 28-29m-25 31c7-9 18-20 25-31m-25 31 25-31m-28 34 33-35m-33 35 33-35m-30 38c9-11 18-20 30-38m-30 38 30-38m-32 41 38-41m-38 41 38-41m-35 43c13-14 27-30 35-43m-35 43 35-43m-38 46c9-10 21-25 44-47m-44 47 44-47m-41 50c11-16 24-32 41-50m-41 50 41-50m-43 53c16-16 32-33 46-51m-46 51c12-16 28-30 46-51m-43 54 43-54m-43 54c9-13 19-24 43-54m-46 57c21-21 37-42 51-56m-51 56 51-56m-48 58c11-12 23-26 48-58m-48 58 48-58m-51 62 53-58m-53 58c14-14 25-29 53-58m-50 61c17-23 38-42 50-61m-50 61 50-61m-53 64 53-59m-53 59c20-21 39-41 53-59m-50 61c16-15 29-35 50-61m-50 61 50-61m-53 64 54-58m-54 58c13-12 24-26 54-58m-51 61 51-61m-51 61 51-61m-53 64c18-21 39-39 54-59m-54 59c20-21 39-41 54-59m-51 62c15-20 33-42 51-62m-51 62c18-23 35-45 51-62m-54 65 54-59m-54 59c17-21 35-41 54-59m-51 61c18-20 34-39 51-61m-51 61 51-61m-53 64c14-17 30-31 54-59m-54 59 54-59m-51 62 51-62m-51 62 51-62m-55 66c22-21 40-43 56-61m-56 61 56-61m-53 63c18-19 34-38 53-63m-53 63 53-63m-55 66 55-60m-55 60c20-24 42-48 55-60m-52 63c12-18 27-32 52-63m-52 63 52-63m-55 66 55-61m-55 61c15-17 33-35 55-61m-52 64c15-18 32-36 52-64m-52 64 52-64m-54 67c16-16 30-34 56-62m-56 62 56-62m-53 64c15-16 26-31 53-64m-53 64c12-14 23-30 53-64m-56 67c17-15 33-32 57-62m-57 62 57-62m-54 65c16-23 35-44 54-65m-54 65 54-65m-57 68c23-24 47-48 58-63m-58 63c18-18 35-38 58-63m-55 66c12-16 26-31 55-66m-55 66 55-66m-58 69c16-14 31-34 58-63m-58 63c15-18 31-34 58-63m-55 66 55-66m-55 66c12-13 24-27 55-66m-58 69c21-22 44-46 59-64m-59 64 59-64m-56 67c20-27 40-49 56-67m-56 67 56-67m-58 70 59-65m-59 65c14-16 28-33 59-65m-56 67c21-26 43-55 56-67m-56 67c15-20 33-40 56-67m-59 70 59-65m-59 65c23-23 44-49 59-65m-56 68 56-68m-56 68c13-14 25-29 56-68m-58 71c22-23 44-46 60-66m-60 66 60-66m-57 69c16-18 29-38 57-69m-57 69c17-23 36-44 57-69m-60 72c12-15 26-28 61-67m-61 67c12-15 26-28 61-67m-58 69 58-69m-58 69 58-69m-61 73c13-16 30-35 61-67m-61 67 61-67m-58 70c20-22 39-48 58-70m-58 70c20-24 38-48 58-70m-61 73c17-23 37-45 62-68m-62 68c18-18 34-37 62-68m-59 70 59-70m-59 70 59-70m-61 73c22-22 44-46 62-69m-62 69c16-17 33-35 62-69m-59 72 59-72m-59 72c13-18 27-34 59-72m-62 75c21-24 42-43 62-69m-62 69c23-26 46-53 62-69m-59 72 59-72m-59 72 59-72m-62 75c21-21 40-46 64-70m-64 70c14-14 27-28 64-70m-61 72c15-15 28-30 61-72m-61 72 61-72m-63 75c15-16 30-31 64-70m-64 70 64-70m-61 73 61-73m-61 73 61-73m-65 77 66-72m-66 72 66-72m-62 74c17-20 34-43 62-74m-62 74c20-22 39-46 62-74m-65 77 65-72m-65 72 65-72m-62 75 62-75m-62 75 62-75m-65 78c19-18 33-39 66-73m-66 73 66-73m-63 76c19-20 38-42 63-76m-63 76 63-76m-65 79c22-23 45-48 66-74m-66 74 66-74m-63 76c23-26 43-51 63-76m-63 76 63-76m-66 79c20-20 36-41 67-73m-67 73 67-73m-64 76c18-22 37-42 64-76m-64 76c18-19 33-40 64-76m-67 79 68-74m-68 74 68-74m-65 76c13-16 28-31 65-76m-65 76 65-76m-68 80 69-75m-69 75 69-75m-66 78c26-33 50-64 66-78m-66 78 66-78m-68 81c19-24 37-43 68-76m-68 76 68-76m-65 78c12-16 27-35 65-78m-65 78 65-78m-68 82c15-15 28-34 69-77m-69 77 69-77m-66 79 66-79m-66 79 66-79m-69 82c23-27 49-53 70-77m-70 77 70-77m-67 80c16-19 33-42 67-80m-67 80 67-80m-69 83 70-77m-70 77c23-26 47-50 70-77m-67 79c12-17 28-32 67-79m-67 79 67-79m-70 82 71-77m-71 77c17-15 32-32 71-77m-68 80c14-16 29-32 68-80m-68 80c16-17 30-36 68-80m-71 84c17-22 34-40 72-80m-72 80c20-24 42-48 72-80m-69 82c16-22 35-42 69-82m-69 82 69-82m-72 85 73-80m-73 80c20-19 37-40 73-80m-70 83c27-28 50-60 70-83m-70 83c16-18 30-38 70-83m-72 86c19-21 39-41 72-80m-72 80c15-19 34-38 72-80m-69 83c24-28 51-58 69-83m-69 83 69-83m-72 86c19-21 38-46 73-81m-73 81 73-81m-70 83 70-83m-70 83 70-83m-73 86c9-7 13-13 32-33m-32 33c14-13 25-26 32-33m-28 36c11-11 18-24 28-36m-28 36 28-36m-1-1 43-47m-43 47c12-15 25-29 43-47m-40 49c13-13 20-25 40-49m-40 49c7-10 15-20 40-49m-73 87c2-5 9-7 13-12m-13 12 13-12m-10 15c1-4 6-10 10-15m-10 15c4-6 6-11 10-15m39-48c7-5 12-13 22-22m-22 22 22-22m-19 24c9-6 12-17 19-24m-19 24c7-7 13-16 19-24m-74 88 10-8m-10 8 10-8m-7 11c2-3 3-7 7-11m-7 11 7-11m53-65 12-10m-12 10 12-10m-9 13c4-4 6-8 9-13m-9 13 9-13m-75 89 7-5m-7 5 7-5m-4 8 4-8m-4 8 4-8m-7 11 4-1m-4 1 4-1m-1 3 1-3m-1 3 1-3"}),React__namespace.createElement("path",{stroke:"transparent",d:"M271 612c2-5 5-23 10-32 4-10 11-18 17-26l22-22c7-6 17-7 20-13 3-5 3 11-1-19l-27-159c-5-31 0-19-1-26l-4-13c-1-3 1-8-1-10-2-1-5 1-10 2l-16-1-13 2c-4 0-9-3-11-1-1 3 1 7 1 14s-2-9 0 29l10 200 2 25 1 49m-1 1c2-5 6-21 11-31 4-10 11-21 17-29 7-8 16-13 23-19 8-5 19-8 22-13 4-6 3 9-2-21l-28-160c-5-31-1-18-2-24l-2-10c0-4 1-8-1-10s-6 0-10 0l-18-2-12 1c-4 0-9-2-11 0s1 7 2 14c0 7-2-9 0 30l8 200c2 38 1 12 2 24l4 49"})),React__namespace.createElement("path",{fill:"none",stroke:"black",strokeLinecap:"round",strokeWidth:"4",d:"m270 610 10-30a129 129 0 0 1 39-49c8-6 18-7 21-12s2 10-3-20l-24-160c-5-31-4-18-5-25l-1-13c0-4 1-7-1-8-2-2-6-1-10-1h-16l-14 1c-4 1-9-1-11 1s0 4 1 11l1 32 10 198 1 27 3 48m1 2c2-5 3-24 7-33 5-10 11-18 18-26 6-8 16-16 23-21 7-6 16-7 19-13 3-5 3 8-1-21l-24-157c-5-31-2-21-3-27-2-7-5-8-6-11 0-4 4-9 2-11-1-1-6 1-11 1l-17-1h-12c-4 1-11 0-13 3-2 2 1 5 2 13l2 31 8 196c2 37 3 14 4 27v48"}),React__namespace.createElement("g",{fillRule:"evenodd",strokeLinecap:"round"},React__namespace.createElement("path",{fill:t,d:"m273 624-10-21c-4-8-7-18-12-26s-11-17-19-23c-7-5-21-9-27-12-5-4-5-5-7-9-2-3-5-1-5-13 0-11 3-22 5-57l6-153c2-28 1-14 5-17s10-1 17 0c8 0 25 0 29 3 5 3-1-7 0 16l4 127c3 53 8 159 11 189"}),React__namespace.createElement("path",{fill:"none",stroke:"black",strokeWidth:"4",d:"m272 627-11-25c-4-8-6-19-11-26-5-8-12-14-19-20s-18-13-24-16c-6-4-7-3-9-7-3-3-4-4-4-15l3-56 10-153c2-27-2-12 2-14 3-3 11 0 19 0s23-4 27-1c5 3-1-4-1 20l6 125 12 187m-2 1-10-23c-4-9-6-19-11-27s-11-14-18-20c-6-6-16-13-22-17-6-3-11-1-13-4-3-4-2-4-2-16l2-59 9-153c3-28 1-12 5-14 3-2 11 2 19 2 7 0 21-6 25-3 5 3 0-4 1 20 0 25 1 77 4 129l13 184"})),React__namespace.createElement("g",{fill:"none",fillRule:"evenodd",strokeLinecap:"round"},React__namespace.createElement("path",{stroke:a,strokeWidth:".3",d:"M207 292s0 0 0 0m0 0s0 0 0 0m1 3v-1m0 1s0 0 0 0m0 4c0-1 0-2 2-3m-3 3 3-3m-4 5c1-1 6-2 7-6m-5 7c0-2 2-3 4-6m-4 8c1-4 5-6 7-11m-9 12c4-2 5-5 10-9m-11 16c2-6 7-13 10-14m-9 9c2-3 9-7 11-13m-9 17c2-3 9-12 17-13m-19 13c8-7 11-11 13-16m-16 19 24-17m-21 17c8-6 13-13 19-19m-16 23c1-6 7-13 15-24m-17 23c4-5 10-15 18-23m-23 32c7-13 13-22 30-31m-26 28c7-10 12-18 23-28m-25 28c14-8 20-23 30-27m-28 30c7-12 19-20 28-32m-27 31c7-9 22-24 25-33m-25 38c10-17 22-28 28-37m-29 35c10-4 17-11 31-30m-33 34c12-12 21-23 32-38m-33 40c17-9 26-28 35-37m-34 39c12-12 17-19 34-43m-30 46c10-11 23-28 37-48m-39 46 38-43m-42 44c12-10 22-16 46-42m-42 43c10-9 22-22 40-45m-44 51c14-11 31-26 48-54m-44 52c10-15 25-29 44-48m-44 54c12-15 24-27 43-55m-43 55 44-56m-47 58c21-18 42-45 49-60m-46 61c12-17 27-35 47-58m-46 59c14-17 28-37 50-55m-51 56c14-18 29-38 51-58m-53 62c15-19 29-37 52-60m-50 57c17-16 31-35 53-59m-53 63c20-19 37-40 48-58m-49 59c21-26 42-49 53-59m-53 60c8-13 19-28 54-61m-54 63 53-61m-53 66 47-64m-48 63 54-62m-54 66c23-25 38-48 52-59m-54 60c13-13 23-26 53-64m-54 66c12-16 30-30 56-62m-55 63c17-15 30-34 53-62m-52 65c16-23 27-39 51-64m-52 62c20-22 42-45 53-61m-52 63c10-16 31-35 55-63m-57 66c12-12 24-25 57-64m-55 63c21-13 36-40 53-57m-54 62c15-15 27-30 54-65m-55 67c24-18 41-38 58-60m-56 61 52-66m-54 63c20-18 45-44 59-58m-59 64c17-19 34-35 56-66m-56 67c20-19 42-46 54-61m-51 60c12-17 30-33 52-59m-55 64c19-17 31-33 60-66m-58 67c15-21 34-42 53-65m-56 69c21-31 47-52 61-65m-59 61 57-60m-56 63c24-24 40-45 53-65m-55 67c14-15 26-27 55-65m-53 68c15-21 36-42 55-62m-55 64c14-18 32-39 56-65m-54 67c14-15 24-32 49-62m-52 62 55-65m-58 66c17-22 36-38 57-61m-53 64c21-24 42-50 54-67m-54 70c13-15 25-35 56-63m-57 62 57-64m-60 70c15-22 38-41 55-70m-54 68c15-18 34-36 57-65m-59 64c13-13 29-28 59-63m-56 69c18-24 36-42 56-67m-60 64c21-18 45-42 61-65m-56 70c16-22 29-37 55-67m-54 68c14-17 30-32 54-64m-57 66c14-14 28-32 60-67m-62 68c16-18 32-34 57-66m-55 65c16-15 32-32 58-63m-58 71c13-21 34-44 60-66m-61 63c23-24 44-52 60-66m-57 69c8-19 29-31 58-68m-58 67c17-18 32-41 56-66m-61 68c15-12 33-27 60-65m-57 68c16-14 31-34 59-67m-55 71c9-19 24-31 59-69m-61 70c14-21 30-36 57-69m-58 74c17-24 34-41 56-73m-57 69c20-25 43-48 59-68m-57 73c16-20 34-37 56-71m-58 69c19-22 38-45 62-69m-63 72c18-19 36-44 60-68m-60 70c17-22 35-41 62-71m-60 74c12-17 31-39 62-67m-62 67c22-25 41-53 58-73m-57 76c21-25 42-46 58-73m-59 71c10-11 24-26 58-67m-62 69c14-9 29-26 60-70m-57 74c25-29 45-56 59-74m-60 79c16-25 34-43 61-77m-61 75c11-16 26-33 61-74m-62 74c15-8 25-25 64-71m-62 72c22-26 43-48 60-71m-63 79 65-76m-61 74c16-26 37-50 58-72m-63 73c18-19 28-35 64-68m-60 67c13-18 33-35 60-68m-63 73c16-12 25-32 60-72m-59 73c21-25 39-48 64-73m-66 77c24-30 48-52 63-76m-63 73c23-23 43-46 66-72m-66 77c14-16 31-27 68-72m-67 73c19-23 36-44 64-73m-67 73c21-24 47-50 68-72m-66 74 64-75m-66 77c23-23 43-51 70-74m-65 73c11-14 29-31 64-70m-65 73c16-14 32-33 65-72m-64 74c21-27 44-53 63-76m-62 83c22-34 45-56 59-80m-62 78 65-75m-67 77c26-28 51-53 70-75m-68 73c12-12 27-31 66-75m-66 78c24-27 45-55 63-77m-64 81 66-76m-65 74c27-27 49-51 63-77m-61 81 64-75m-64 79c19-28 52-55 61-79m-62 79c22-28 43-50 65-77m-65 75c19-19 41-46 64-73m-64 75c21-27 45-54 66-76m-65 81c20-26 52-63 64-77m-67 77c26-27 49-55 67-77m-69 76c26-19 39-41 69-71m-65 74 65-77m-64 83c16-26 34-48 68-82m-70 80c12-16 26-33 66-77m-69 77c26-28 47-50 73-71m-70 74c25-28 52-62 67-76m-69 79c24-24 52-57 71-76m-69 75c18-26 42-51 65-79m-65 82c18-17 40-37 71-81m-69 81c18-24 39-49 64-77m-63 81c17-29 43-54 67-80m-67 76c18-19 36-41 64-73m-66 76c22-24 41-44 66-74m-63 74c11-19 26-32 64-73m-60 78c21-34 46-57 56-77m-59 71c23-26 48-57 62-71m-64 74c20-20 34-31 68-74m-66 73c22-22 43-45 64-71m-58 69c19-21 37-46 55-66m-58 69c22-24 43-48 59-69m-54 75c17-24 37-47 54-72m-55 68c12-21 32-39 55-67m-54 65c14-13 29-36 54-59m-54 64c15-23 32-43 56-67m-55 67c13-18 34-35 52-66m-52 67c13-18 30-37 53-64m-51 63c12-21 25-33 56-60m-58 61c14-14 27-28 53-62m-54 64c20-24 41-46 58-65m-55 64 53-61m-52 64c14-18 24-37 52-61m-49 58c16-20 36-43 50-57m-53 61c13-17 30-29 50-63m-47 60c13-15 21-28 50-55m-49 58c13-16 20-28 50-57m-49 54 46-54m-47 55c19-16 36-39 50-48m-47 50c13-16 31-37 46-51m-44 56c11-20 32-41 41-57m-43 51c19-18 37-37 47-51m-46 53c11-10 16-24 46-51m-44 53c15-18 31-35 41-51m-42 53c15-13 25-29 40-52m-38 51 41-49m-37 50c11-20 33-34 39-50m-39 48c14-15 25-32 38-45m-40 46c17-14 32-33 43-39m-40 40c6-10 20-24 35-42m-38 45c15-12 25-31 40-44m-37 41c11-10 23-23 36-40m-37 42c13-10 31-31 39-41m-34 42 35-41m-34 39c5-6 15-17 34-33m-34 38c5-13 16-21 31-43m-31 41c12-5 23-20 35-38m-36 38c15-13 24-27 36-37m-37 43c12-10 21-20 38-37m-33 34c11-11 19-25 30-37m-27 36c4-8 18-21 26-35m-28 37c7-7 14-16 28-37m-30 36c14-4 19-16 35-27m-31 31c11-15 23-28 28-33m-27 30c12-10 20-21 27-27m-30 30c10-9 21-23 30-34m-25 37c6-7 15-17 27-35m-28 34c6-11 14-19 27-30m-26 27c9-8 16-18 21-23m-22 28 24-31m-22 32c6-9 19-20 23-26m-25 27c8-7 13-17 25-28m-26 30c13-8 16-15 24-28m-22 26 26-24m-21 25 19-22m-20 24c7-11 16-21 22-28m-21 30 19-25m-21 23c10-8 16-17 24-23m-23 25c9-3 9-12 25-26m-24 27c7-8 9-13 21-25m-17 29c0-9 6-13 18-26m-18 24c4-8 11-17 16-21m-19 19c8-4 17-15 23-22m-21 25c3-3 6-10 18-20m-18 20c7-3 10-15 19-20m-17 20c4-5 6-9 16-17m-19 20c6-6 9-13 17-17m-15 16c6-5 11-9 17-19m-15 21c5-2 10-11 19-16m-20 19c7-6 11-11 15-18m-15 19c2-4 12-7 18-21m-15 20c4-7 7-9 13-17m-13 16c5-1 5-5 12-13m-11 16 14-18m-11 22c2-5 7-12 11-16m-14 14c3-4 8-12 11-14m-10 16c4-7 10-5 16-16m-17 15 15-13m-10 19c-1-8 7-12 9-15m-13 10 13-11m-14 13c2-3 8-5 13-14m-11 15c3-2 7-3 10-12m-6 18c-1-9 5-10 10-18m-13 15 11-11m-12 12c5-1 10-5 10-8m-6 9c0-3 3-6 7-11m-9 11c7-1 7-4 10-9m-9 12c2-6 8-8 8-11m-8 10 9-6m-9 8 9-8m-7 12c4-5 6-6 6-13m-6 11c3-3 6-5 8-9m-9 13c2-2 6-4 8-8m-7 7 8-9m-8 10c3-2 5-4 6-8m-5 9 7-7m-6 8c1 0 2-4 7-7m-7 8 6-6m-6 7c3 1 2-2 6-6m-4 7 4-5m-3 6 3-5m-3 5 3-4m-2 6 2-3m-3 4 3-4m-2 6 2-3m-2 3 2-3m-1 5 2-2m-2 2 2-2m-1 4 1-1m-2 1 2-1"}),React__namespace.createElement("path",{stroke:"transparent",strokeWidth:".5",d:"m272 626-11-25c-3-8-4-17-10-24-5-8-14-15-21-21s-14-14-20-17c-5-4-12-2-15-6-2-4 0-6 0-17l4-52c3-34 7-127 9-155s-1-12 3-14c3-2 12-1 19-1 8 1 22-1 26 2s-3-10-2 15c1 24 3 78 7 130l11 182m-3 0c-3-3-8-12-11-19s-3-17-8-24c-5-8-13-15-20-21l-22-20c-5-5-9-6-10-9-2-3-1 1-1-10s-1-20 1-56c1-35 4-130 7-159 2-28 4-9 8-11 5-1 13 2 19 3 7 0 17-4 21-1 3 3 0-4 1 20s1 73 5 125l14 188"})),React__namespace.createElement("path",{fill:"none",stroke:"black",strokeLinecap:"round",strokeWidth:"4",d:"m271 626-10-23c-4-8-7-18-12-26s-10-15-17-21l-25-16c-6-4-8-3-10-7-2-3-2-2-2-14l3-56 9-154c2-28-2-12 2-14 3-2 11 1 18 1 8 0 22-6 27-3 4 3-1-3 0 21a9897 9897 0 0 0 17 312m2 2-13-24c-3-8-4-18-8-26-5-8-13-15-20-21-7-7-18-13-24-17-5-4-8-1-10-4-2-4-2-6-2-18s-1-20 1-55l8-155c2-28-2-11 1-13 4-3 14-1 22-1s23-1 28 2c4 3-3-7-2 17a4634 4634 0 0 0 17 312"}),React__namespace.createElement("path",{fill:"none",stroke:a,strokeLinecap:"round",strokeWidth:"8",d:"m255 296 12 320m-15-322 21 325"}))},saveIcon=e=>React__namespace.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:e?"var(--color-accent)":"var(--icon-fill-color)",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},React__namespace.createElement("path",{d:"M19 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11l5 5v11a2 2 0 0 1-2 2z"}),React__namespace.createElement("polyline",{points:"17 21 17 13 7 13 7 21"}),React__namespace.createElement("polyline",{points:"7 3 7 8 15 8"})),penIcon=e=>{switch(e.type){case"highlighter":return React__namespace.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"var(--icon-fill-color)",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},React__namespace.createElement("path",{fill:e.strokeColor??"var(--icon-fill-color)",strokeWidth:"2",d:"m9 11-6 6v3h9l3-3",style:e.strokeColor?{filter:"var(--theme-filter)"}:{}}),React__namespace.createElement("path",{fill:"none",strokeWidth:"2",d:"m22 12-4.6 4.6a2 2 0 0 1-2.8 0l-5.2-5.2a2 2 0 0 1 0-2.8L14 4"}));case"finetip":return React__namespace.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:e.strokeColor??"var(--icon-fill-color)",stroke:e.strokeColor??"var(--icon-fill-color)",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",style:e.strokeColor?{filter:"var(--theme-filter)"}:{}},React__namespace.createElement("path",{strokeWidth:"2",d:"M17 3a2.828 2.828 0 1 1 4 4L7.5 20.5 2 22l1.5-5.5L17 3z"}));case"fountain":return React__namespace.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"none",stroke:"var(--icon-fill-color)",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},React__namespace.createElement("path",{fill:e.strokeColor??"var(--icon-fill-color)",d:"m12 19 7-7 3 3-7 7-3-3z"}),React__namespace.createElement("path",{fill:"none",d:"m18 13-1.5-7.5L2 2l3.5 14.5L13 18l5-5z"}),React__namespace.createElement("path",{fill:"none",d:"m2 2 7.586 7.586"}),React__namespace.createElement("circle",{fill:"none",cx:"11",cy:"11",r:"2"}));case"marker":return React__namespace.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 576 512",fill:e.strokeColor??"var(--icon-fill-color)",stroke:e.strokeColor??"var(--icon-fill-color)",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",style:e.strokeColor?{filter:"var(--theme-filter)"}:{}},React__namespace.createElement("path",{d:"M331 315l158.4-215L460.1 70.6 245 229 331 315zm-187 5l0 0V248.3c0-15.3 7.2-29.6 19.5-38.6L436.6 8.4C444 2.9 453 0 462.2 0c11.4 0 22.4 4.5 30.5 12.6l54.8 54.8c8.1 8.1 12.6 19 12.6 30.5c0 9.2-2.9 18.2-8.4 25.6L350.4 396.5c-9 12.3-23.4 19.5-38.6 19.5H240l-25.4 25.4c-12.5 12.5-32.8 12.5-45.3 0l-50.7-50.7c-12.5-12.5-12.5-32.8 0-45.3L144 320zM23 466.3l63-63 70.6 70.6-31 31c-4.5 4.5-10.6 7-17 7H40c-13.3 0-24-10.7-24-24v-4.7c0-6.4 2.5-12.5 7-17z"}));case"thick-thin":return React__namespace.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 108 106",strokeWidth:"2",fill:e.strokeColor??"var(--icon-fill-color)",stroke:e.strokeColor??"var(--icon-fill-color)",style:e.strokeColor?{filter:"var(--theme-filter)"}:{}},React__namespace.createElement("path",{d:"m-.58 95.628.22-.89q.22-.89.49-2.44.26-1.54.77-3.35t1.31-3.43q.79-1.61.2-.26-.6 1.34-.03-.14.58-1.49 1.54-2.97.96-1.49 2.54-3.18 1.59-1.68 3.46-2.96 1.86-1.27.81-.54-1.04.73.6-.46 1.64-1.19 2.8-1.81 1.16-.63.16-.08-.99.54 1.21-.5 2.2-1.03 1.11-.58-1.1.45-.03-.07 1.06-.53 2.32-.82 1.26-.3 2.91-.52 1.64-.23 3.05-.18 1.4.05 2.5.12 1.09.07 2.25.24 1.16.17 2.3.49 1.15.32 2.11.78.96.47 2.21 1.01 1.25.55 2.37 1.04t2.34.89q1.22.4 2.5.65 1.29.25 2.44.33 1.16.08 2.35.17 1.18.08 2.26-.1 1.08-.19 2-1.1.92-.91 1.25-1.93.32-1.02.38-2.15t.57.21q.51 1.34-.03-.02-.55-1.37-.96-2.83-.41-1.45.5-.67.92.79-.03-.06-.95-.85-1.52-1.8-.57-.94-1.5-1.52-.93-.57-1.94-1.22-1.01-.65-1.97-1.88-.96-1.22-1.44-2.54-.49-1.32-.65-2.57-.17-1.24-.11-2.35.06-1.11.31-2.91.24-1.79.76-2.77.51-.97 1.29-1.8.77-.84 1.64-1.55.88-.72 1.9-1.33 1.03-.61 2.43-1.15 1.41-.55 2.69-.92 1.29-.37 2.81-.68 1.53-.31 2.83-.58 1.31-.27 2.78-.47 1.47-.2 2.58-.49 1.12-.28 2.19-.58 1.08-.31 2.13-.73 1.05-.42 2.44-1.32 1.39-.9 2.68-1.85 1.3-.95 2.25-1.87.95-.91 2.06-2 1.11-1.09 1.92-1.93.82-.84 1.54-1.82.71-.98 1.4-1.88.69-.9 1.38-1.96.69-1.07 1.25-2.04.55-.97 1.21-1.94.65-.96 1.35-1.79.69-.83 1.46-1.74.77-.9 1.66-1.73.89-.84 2.72-2.31 1.84-1.48 1.84-1.47v.01l-1.1 1.03q-1.1 1.02-1.77 1.92-.68.9-1.39 1.85-.71.96-1.41 1.91-.7.96-1.19 1.92-.48.95-.95 1.92-.46.96-.9 1.95-.43.99-1.02 2.16-.59 1.17-1.17 2.15-.58.97-1.23 2.13t-1.29 2.02q-.64.86-1.3 1.73-.66.88-1.42 1.78-.75.9-1.72 2.03-.97 1.14-1.81 1.89-.85.75-1.98 1.71-1.14.96-2.05 1.61-.91.64-2.42 1.38-1.51.73-2.71 1.21t-2.49.92q-1.3.44-2.35.69-1.06.24-2.1.59-1.03.34-2.06.74-1.03.4-2.29.94-1.26.54-2.27 1.11-1.01.58-1.57 1.57-.56.99-.81 2.06-.25 1.08.56 2.02.8.94-.21-.02-1.02-.96-.01-.48 1 .49 1.87 1.25.87.77 0 0-.88-.77.46-.01 1.34.75 2.6 1.68 1.26.94 2.08 2.03.81 1.09.01.27-.8-.82.3.26 1.11 1.08 1.71 2.1.61 1.02 1.21 2.25.6 1.24.92 2.36.32 1.12-.16.13-.49-.98.02.36.51 1.35.71 2.69.2 1.34.24 2.46.03 1.12-.09 2.42-.13 1.29-.72 3.21-.6 1.92-1.4 3.49-.81 1.58-1.77 2.83-.96 1.24-2.88 2.72-1.92 1.48-2.95 1.85-1.04.36-2.47.76-1.44.41-3.33.72-1.89.32-3.37.41-1.48.09-2.63.15-1.15.05-2.74-.06-1.59-.1-2.8-.29-1.2-.19-3.2-.63-1.99-.45-3.63-.92-1.63-.48-3.28-.79-1.65-.31-2.76-.2-1.11.1-2.21.42-1.11.32.39-.29 1.49-.6-.12.21-1.61.8-.39.19 1.21-.61.29.13-.92.74-1.83 1.34-.92.61.15-.19t.3-.05q-.77.75-1.58 1.57-.81.82.01-.18.82-1 .24.23t-.72 2.72q-.15 1.48-.08 2.4.07.91-.19 2.16-.26 1.26-.81 2.41-.55 1.16-1.36 2.15t-1.84 1.75q-1.03.77-2.21 1.27t-2.44.7q-1.27.2-2.53.1-1.28-.11-2.49-.52-1.22-.41-2.3-1.1-1.08-.68-1.96-1.61-.89-.92-1.52-2.04-.64-1.11-.99-2.34-.36-1.23-.41-2.51l-.04-1.27Z"}));case"thin-thick-thin":return React__namespace.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 114 113",strokeWidth:"2",fill:e.strokeColor??"var(--icon-fill-color)",stroke:e.strokeColor??"var(--icon-fill-color)",style:e.strokeColor?{filter:"var(--theme-filter)"}:{}},React__namespace.createElement("path",{d:"m10 103.405.13-1.22q.14-1.22 1.3-3.16 1.15-1.94 2.74-3.46 1.59-1.53 3.35-2.72 1.77-1.2 4-1.95 2.23-.76 4.45-1t4.86-.4q2.64-.15 5.14-.34 2.51-.19 4.85-.94 2.35-.75 4.55-1.71 2.21-.97 4.16-2.26 1.95-1.3 4.03-2.97 2.07-1.67 3.85-3.05 1.78-1.37 3.72-2.48 1.94-1.11 3.3-2.99 1.36-1.89 2.58-3.74 1.22-1.85-.63-3.42-1.85-1.57-3.82-2.86-1.97-1.3-4.11-2.08-2.15-.78-4.21-1.6-2.06-.81-4.02-1.96-1.96-1.14-3.71-2.48-1.74-1.33-3.37-2.77-1.63-1.43-3.23-3.62-1.6-2.18-2.23-4.64-.62-2.46-.36-4.96.27-2.49 1.19-4.46.91-1.97 2.42-3.7 1.5-1.73 3.5-3.15t4.11-2.28q2.1-.86 4.33-1.44 2.24-.58 4.92-.84 2.68-.26 4.83-.19t4.69.35q2.53.28 4.75.66 2.23.38 4.48.2 2.26-.19 4.43-1.3 2.17-1.12 4.2-2.36 2.04-1.24 3.93-2.43 1.9-1.19 3.84-2.14 1.95-.95 4.04-1.78 2.09-.83 4.56-2.28 2.46-1.46 2.46-1.45h.01q.01 0-1.38 1.3-1.38 1.29-3.08 2.59-1.7 1.3-3.5 2.5t-3.42 2.65q-1.62 1.45-3.18 3-1.57 1.56-3.37 3.13-1.8 1.57-3.6 2.91-1.81 1.33-3.92 2.12t-4.24.92q-2.13.14-4.31.26-2.18.12-4.5.39t-4.56.88q-2.25.61-4.24 1.6-1.99 1-3.83 2.29-1.83 1.29.18 2.44 2.01 1.15 4.2 1.92 2.2.78 4.34 1 2.15.22 4.4.69 2.25.46 4.34 1.16 2.08.71 4.33 1.91 2.25 1.21 4.11 2.73 1.87 1.52 3.68 4.03 1.82 2.5 2.74 5 .93 2.5 1.18 5.03.26 2.53-.04 4.81t-1.4 4.85q-1.09 2.58-2.4 4.26-1.3 1.68-3.1 3.44t-4.02 3.62q-2.23 1.85-4.32 3.07-2.08 1.23-4.34 1.99-2.25.76-4.46 1.96t-4.37 2.14q-2.15.93-4.22 1.81t-4.36 1.35q-2.3.46-4.52.82-2.22.35-4.76.38-2.54.04-4.87-.28t-4.67-.67q-2.34-.35-4.72-.54-2.39-.19-4.64.37-2.25.56-4.16 1.66-1.91 1.11-3.52 2.71-1.61 1.6-2.55 2.39l-.94.78Z"}));default:return React__namespace.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 512 512",fill:e.strokeColor??"var(--icon-fill-color)",stroke:e.strokeColor??"var(--icon-fill-color)",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",style:e.strokeColor?{filter:"var(--theme-filter)"}:{}},React__namespace.createElement("path",{d:"M453.3 19.3l39.4 39.4c25 25 25 65.5 0 90.5l-52.1 52.1 0 0-1-1 0 0-16-16-96-96-17-17 52.1-52.1c25-25 65.5-25 90.5 0zM241 114.9c-9.4-9.4-24.6-9.4-33.9 0L105 217c-9.4 9.4-24.6 9.4-33.9 0s-9.4-24.6 0-33.9L173.1 81c28.1-28.1 73.7-28.1 101.8 0L288 94.1l17 17 96 96 16 16 1 1-17 17L229.5 412.5c-48 48-109.2 80.8-175.8 94.1l-25 5c-7.9 1.6-16-.9-21.7-6.6s-8.1-13.8-6.6-21.7l5-25c13.3-66.6 46.1-127.8 94.1-175.8L254.1 128 241 114.9z"}))}},stringToSVG=e=>(e.match(/class=("|')[^"']*(lucide|skip)[^"']*("|')/)||(e=e.replace(/stroke\s*=\s*['"][^"']*['"]/g,"").replace(/[^-]width\s*=\s*['"][^"']*['"]/g,"").replace(/[^-]height\s*=\s*['"][^"']*['"]/g,"").replace("
${t$d("EXPORTDIALOG_SCALE_VALUE")} ${this.scale}
${t$d("EXPORTDIALOG_IMAGE_SIZE")} ${e}x${t}`)}createHeader(){switch(this.activeTab){case"pdf":this.contentContainer.createEl("h1",{text:t$d("EXPORTDIALOG_PDF_SETTINGS")});break;case"screenshot":this.contentContainer.createEl("h1",{text:t$d("EXPORTDIALOG_TAB_SCREENSHOT")}),this.view.isInMainObsidianWorkspace?this.contentContainer.createEl("p",{text:t$d("EXPORTDIALOG_SCREENSHOT_DESC")}):this.contentContainer.createEl("p",{text:t$d("EXPORTDIALOG_NOT_AVAILALBE")});break;default:this.contentContainer.createEl("h1",{text:t$d("EXPORTDIALOG_IMAGE_SETTINGS")}),this.contentContainer.createEl("p",{text:t$d("EXPORTDIALOG_IMAGE_DESC")})}}createImageSettings(e=!1){let t;this.createSaveSettingsDropdown();const i=()=>fragWithHTML(`${t$d("EXPORTDIALOG_CURRENT_PADDING")} ${this.padding}`);t=new obsidian_module.Setting(this.contentContainer).setName(t$d("EXPORTDIALOG_PADDING")).setDesc(i()).addSlider((e=>{e.setLimits(0,100,1).setValue(this.padding).onChange((e=>{this.padding=e,this.scaleSetting.setDesc(this.size()),t.setDesc(i())}))})),this.scaleSetting=new obsidian_module.Setting(this.contentContainer).setName(t$d("EXPORTDIALOG_SCALE")).setDesc(this.size()).addSlider((e=>e.setLimits(.2,7,.1).setValue(this.scale).onChange((e=>{this.scale=e,this.scaleSetting.setDesc(this.size())})))),new obsidian_module.Setting(this.contentContainer).setName(t$d("EXPORTDIALOG_EXPORT_THEME")).addDropdown((e=>e.addOption("light",t$d("EXPORTDIALOG_THEME_LIGHT")).addOption("dark",t$d("EXPORTDIALOG_THEME_DARK")).setValue(this.theme).onChange((e=>{this.theme=e})))),e||(new obsidian_module.Setting(this.contentContainer).setName(t$d("EXPORTDIALOG_BACKGROUND")).addDropdown((e=>e.addOption("transparent",t$d("EXPORTDIALOG_BACKGROUND_TRANSPARENT")).addOption("with-color",t$d("EXPORTDIALOG_BACKGROUND_USE_COLOR")).setValue(this.transparent?"transparent":"with-color").onChange((e=>{this.transparent="transparent"===e})))),new obsidian_module.Setting(this.contentContainer).setName(t$d("EXPORTDIALOG_INCLUDE_INTERNAL_LINKS")).addToggle((e=>e.setValue(this.exportInternalLinks).onChange((e=>{this.exportInternalLinks=e}))))),this.selectedOnlySetting=new obsidian_module.Setting(this.contentContainer).setName(t$d("EXPORTDIALOG_SELECTED_ELEMENTS")).addDropdown((e=>e.addOption("all",t$d("EXPORTDIALOG_SELECTED_ALL")).addOption("selected",t$d("EXPORTDIALOG_SELECTED_SELECTED")).setValue(this.exportSelectedOnly?"selected":"all").onChange((e=>{this.exportSelectedOnly="selected"===e,this.updateBoundingBox()})))),this.selectedOnlySetting.setVisibility(this.hasSelectedElements)}createExportSettings(){new obsidian_module.Setting(this.contentContainer).setName(t$d("EXPORTDIALOG_EMBED_SCENE")).addDropdown((e=>e.addOption("embed",t$d("EXPORTDIALOG_EMBED_YES")).addOption("no-embed",t$d("EXPORTDIALOG_EMBED_NO")).setValue(this.embedScene?"embed":"no-embed").onChange((e=>{this.embedScene="embed"===e}))))}createPDFSettings(){if(!DEVICE.isDesktop)return;this.contentContainer.createEl("h1",{text:t$d("EXPORTDIALOG_PDF_SETTINGS")});const e={pageSize:this.pageSize,pageOrientation:this.pageOrientation,fitToPage:this.fitToPage,paperColor:this.paperColor,customPaperColor:this.customPaperColor,alignment:this.alignment,margin:this.margin};new PDFExportSettingsComponent(this.contentContainer,e,(()=>{this.pageSize=e.pageSize,this.pageOrientation=e.pageOrientation,this.fitToPage=e.fitToPage,this.paperColor=e.paperColor,this.customPaperColor=e.customPaperColor,this.alignment=e.alignment,this.margin=e.margin})).render()}createImageButtons(e=!1){DEVICE.isDesktop&&(this.buttonContainerRow1.createEl("button",{text:t$d("EXPORTDIALOG_PNGTOFILE"),cls:"excalidraw-export-button"}).onclick=()=>{e?setTimeout((async()=>{const e=await captureScreenshot(this.view,{zoom:this.scale,margin:this.padding,selectedOnly:this.isSelectedOnly,theme:this.theme});e&&exportPNG(e,this.view.file.basename)})):this.view.exportPNG(this.embedScene,this.isSelectedOnly),this.close()}),this.buttonContainerRow1.createEl("button",{text:t$d("EXPORTDIALOG_PNGTOVAULT"),cls:"excalidraw-export-button"}).onclick=()=>{e?setTimeout((async()=>{const e=await captureScreenshot(this.view,{zoom:this.scale,margin:this.padding,selectedOnly:this.isSelectedOnly,theme:this.theme});e&&exportImageToFile(this.view,getIMGFilename(this.view.file.path,"png"),e,".png")})):this.view.savePNG({scene:this.view.getScene(this.isSelectedOnly)}),this.close()},this.buttonContainerRow1.createEl("button",{text:t$d("EXPORTDIALOG_PNGTOCLIPBOARD"),cls:"excalidraw-export-button"}).onclick=async()=>{e?setTimeout((async()=>{const e=await captureScreenshot(this.view,{zoom:this.scale,margin:this.padding,selectedOnly:this.isSelectedOnly,theme:this.theme});e&&exportPNGToClipboard(e)})):this.view.exportPNGToClipboard(this.embedScene,this.isSelectedOnly),this.close()},e||(DEVICE.isDesktop&&(this.buttonContainerRow2.createEl("button",{text:t$d("EXPORTDIALOG_EXCALIDRAW"),cls:"excalidraw-export-button"}).onclick=()=>{this.view.exportExcalidraw(),this.close()},this.buttonContainerRow2.createEl("button",{text:t$d("EXPORTDIALOG_SVGTOFILE"),cls:"excalidraw-export-button"}).onclick=()=>{this.view.exportSVG(this.embedScene,this.isSelectedOnly),this.close()}),this.buttonContainerRow2.createEl("button",{text:t$d("EXPORTDIALOG_SVGTOVAULT"),cls:"excalidraw-export-button"}).onclick=()=>{this.view.saveSVG({scene:this.view.getScene(this.isSelectedOnly)}),this.close()},this.buttonContainerRow2.createEl("button",{text:t$d("EXPORTDIALOG_SVGTOCLIPBOARD"),cls:"excalidraw-export-button"}).onclick=async()=>{exportSVGToClipboard(await this.view.getSVG(this.embedScene,this.isSelectedOnly)),this.close()})}createPDFButton(){this.buttonContainerRow1.createEl("button",{text:t$d("EXPORTDIALOG_SAVE_PDF_SETTINGS"),cls:"excalidraw-export-button"}).onclick=async()=>{await this.plugin.loadSettings(),this.plugin.settings.pdfSettings={pageSize:this.pageSize,pageOrientation:this.pageOrientation,fitToPage:this.fitToPage,paperColor:this.paperColor,customPaperColor:this.customPaperColor,alignment:this.alignment,margin:this.margin},await this.plugin.saveSettings(),new obsidian_module.Notice(t$d("EXPORTDIALOG_SAVE_CONFIRMATION"))},DEVICE.isDesktop&&(this.buttonContainerRow1.createEl("button",{text:t$d("EXPORTDIALOG_PDF"),cls:"excalidraw-export-button"}).onclick=()=>{this.view.exportPDF(this.isSelectedOnly,this.pageSize,this.pageOrientation),this.close()})}getPaperColor(){switch(this.paperColor){case"white":return"light"===this.theme?"#ffffff":"#000000";case"scene":return this.api.getAppState().viewBackgroundColor;case"custom":return this.customPaperColor;default:return"#ffffff"}}}let REM_VALUE=16;const STYLE_VARIABLES=["--background-modifier-cover","--background-primary-alt","--background-secondary","--background-secondary-alt","--background-modifier-border","--text-normal","--text-muted","--text-accent","--text-accent-hover","--text-faint","--text-highlight-bg","--text-highlight-bg-active","--text-selection","--interactive-normal","--interactive-hover","--interactive-accent","--interactive-accent-hover","--scrollbar-bg","--scrollbar-thumb-bg","--scrollbar-active-thumb-bg","--tab-container-background","--titlebar-background-focused"],EXCALIDRAW_CONTAINER_CLASS="excalidraw__embeddable__outer";class StylesManager{stylesMap=new Map;styleLight;styleDark;plugin;constructor(e){this.plugin=e,e.app.workspace.onLayoutReady((async()=>{await e.awaitInit(),await this.harvestStyles(),getAllWindowDocuments(e.app).forEach((e=>this.copyPropertiesToTheme(e))),e.registerEvent(e.app.workspace.on("css-change",(()=>this.onCSSChange()))),e.registerEvent(e.app.workspace.on("window-open",(e=>this.onWindowOpen(e)))),e.registerEvent(e.app.workspace.on("window-close",(e=>this.onWindowClose(e))))}))}async onCSSChange(){await this.harvestStyles(),getAllWindowDocuments(this.plugin.app).forEach((e=>{this.copyPropertiesToTheme(e)}))}onWindowOpen(e){this.stylesMap.set(e.doc,{light:document.head.querySelector('style[id="excalidraw-embedded-light"]'),dark:document.head.querySelector('style[id="excalidraw-embedded-dark"]')})}onWindowClose(e){this.stylesMap.delete(e.doc)}async harvestStyles(){REM_VALUE=parseInt(window.getComputedStyle(document.body).getPropertyValue("--font-text-size").trim()),isNaN(REM_VALUE)&&(REM_VALUE=16);const e=document.body,t=document.createElement("iframe");t.style.display="none",e.appendChild(t);const i=new Promise((e=>{t.addEventListener("load",(()=>e()))})),a=t.contentWindow.document,n=t.contentWindow;a.open(),a.write(`${document.head.innerHTML}`),a.close(),await i;const r=t.contentWindow.document.body;r.setAttribute("style",e.getAttribute("style")),r.setAttribute("class",e.getAttribute("class"));const s=e=>{r.classList.remove("theme-light"),r.classList.remove("theme-dark"),r.classList.add(e)},o=()=>{const e=n.getComputedStyle(r),t={};for(const i of STYLE_VARIABLES)t[i]=e.getPropertyValue(i);const i=this.plugin.ea.getCM(e.getPropertyValue("--background-primary"));return i.alphaTo(.9),t["--background-primary"]=i.stringHEX(),Object.entries(t).map((([e,t])=>`${e}: ${t} !important;`)).join(" ")};s("theme-light"),this.styleLight=o(),s("theme-dark"),this.styleDark=o(),e.removeChild(t)}copyPropertiesToTheme(e){const t=this.stylesMap.get(e);if(t)t.light.innerHTML=`.${EXCALIDRAW_CONTAINER_CLASS} .theme-light {\n${this.styleLight}\n}`,t.dark.innerHTML=`.${EXCALIDRAW_CONTAINER_CLASS} .theme-dark {\n${this.styleDark}\n}`;else{const t=e.createElement("style");t.type="text/css",t.setAttribute("id","excalidraw-embedded-light"),t.innerHTML=`.${EXCALIDRAW_CONTAINER_CLASS} .theme-light {\n${this.styleLight}\n}`,e.head.appendChild(t);const i=e.createElement("style");i.type="text/css",i.setAttribute("id","excalidraw-embedded-dark"),i.innerHTML=`.${EXCALIDRAW_CONTAINER_CLASS} .theme-dark {\n${this.styleDark}\n}`,e.head.appendChild(i),this.stylesMap.set(e,{light:t,dark:i})}}destroy(){for(const[e,t]of this.stylesMap)e.head.removeChild(t.light),e.head.removeChild(t.dark);this.plugin=null}}class UIModeSettingsComponent{containerEl;settings;app;onChange;constructor(e,t,i,a){this.containerEl=e,this.settings=t,this.app=i,this.onChange=a}render(){const{containerEl:e}=this;new obsidian_module.Setting(e).setName(t$d("DESKTOP_UI_MODE_NAME")).setDesc(t$d("DESKTOP_UI_MODE_DESC")).addDropdown((e=>e.addOption("full",t$d("MODE_FULL")).addOption("compact",t$d("MODE_COMPACT")).addOption("tray",t$d("MODE_TRAY")).setValue(this.settings.desktopUIMode).onChange((e=>{this.settings.desktopUIMode=e,DEVICE.isDesktop&&setUIMode(this.app,this.settings),this.onChange()})))),new obsidian_module.Setting(e).setName(t$d("TABLET_UI_MODE_NAME")).setDesc(t$d("TABLET_UI_MODE_DESC")).addDropdown((e=>e.addOption("compact",t$d("MODE_COMPACT")).addOption("tray",t$d("MODE_TRAY")).setValue(this.settings.tabletUIMode).onChange((e=>{this.settings.tabletUIMode=e,DEVICE.isTablet&&setUIMode(this.app,this.settings),this.onChange()})))),new obsidian_module.Setting(e).setName(t$d("LEFTHANDED_MODE_NAME")).setDesc(fragWithHTML(t$d("LEFTHANDED_MODE_DESC"))).addToggle((e=>e.setValue(this.settings.isLeftHanded).onChange((async e=>{this.settings.isLeftHanded=e,setLeftHandedMode(e),setTimeout((()=>setLeftHandedMode(e))),this.onChange()}))))}}class UIModeSettings extends obsidian_module.Modal{plugin;isDirty=!1;constructor(e){super(e.app),this.plugin=e}onOpen(){this.containerEl.classList.add("excalidraw-release"),this.createForm()}async onClose(){this.isDirty&&await this.plugin.saveSettings(),this.plugin=null}async createForm(){this.contentEl.createEl("h1",{text:t$d("MODES_HEAD")}),new UIModeSettingsComponent(this.contentEl,this.plugin.settings,this.app,(()=>this.applySettingsUpdate())).render()}async applySettingsUpdate(){this.isDirty=!0}}const TOOLS_PANEL_WIDTH=()=>14.4*REM_VALUE;class ToolsPanel extends React__namespace.Component{pos1=0;pos2=0;pos3=0;pos4=0;penDownX=0;penDownY=0;previousWidth=0;previousHeight=0;onRightEdge=!1;onBottomEdge=!1;containerRef;getView(){return this.props.view?.deref()??null}componentWillUnmount(){this.containerRef.current&&this.props.observer.deref()?.unobserve(this.containerRef.current),this.setState({scriptIconMap:null}),this.containerRef=null}constructor(e){super(e);const t=this.getView()?.packages.react;this.containerRef=t.createRef(),this.state={visible:e.visible,top:50,left:200,theme:"dark",excalidrawViewMode:!1,minimized:!1,isDirty:!1,isFullscreen:!1,isPreviewMode:!0,scriptIconMap:{}}}updateScriptIconMap(e){this.setState((()=>({scriptIconMap:e})))}setPreviewMode(e){this.setState((()=>({isPreviewMode:e})))}setFullscreen(e){this.setState((()=>({isFullscreen:e})))}setDirty(e){this.setState((()=>({isDirty:e})))}setExcalidrawViewMode(e){this.setState((()=>({excalidrawViewMode:e})))}toggleVisibility(e){this.setTopCenter(e),this.setState((e=>({visible:!e.visible})))}setTheme(e){this.setState((t=>({theme:e})))}setTopCenter(e){this.setState((()=>({left:(this.containerRef.current.clientWidth-TOOLS_PANEL_WIDTH()-(e?0:TOOLS_PANEL_WIDTH()+4))/2+this.containerRef.current.parentElement.offsetLeft+(e?0:TOOLS_PANEL_WIDTH()+4),top:64+this.containerRef.current.parentElement.offsetTop})))}updatePosition(e=0,t=0){this.setState((()=>{const{offsetTop:i,offsetLeft:a,clientWidth:n,clientHeight:r}=this.containerRef.current.firstElementChild,s=i-e,o=a-t,{clientWidth:l,clientHeight:c,offsetTop:d,offsetLeft:h}=this.containerRef.current.parentElement;return this.previousHeight=c,this.previousWidth=l,this.onBottomEdge=s>=c-r+d,this.onRightEdge=o>=l-n+h,{top:s
Current zoom is ${Math.round(100*this.zoomValue)}%`),t=new obsidian_module.Setting(this.contentEl).setName(t$d("ES_ZOOM")).setDesc(e()).addButton((i=>i.setButtonText(t$d("ES_ZOOM_100")).onClick((()=>{const i=this.view.excalidrawAPI;this.zoomValue=1/i.getAppState().zoom.value,t.setDesc(e())})))).addSlider((i=>i.setLimits(10,400,5).setValue(100*this.zoomValue).onChange((i=>{this.zoomValue=i/100,t.setDesc(e())}))));this.isYouTube&&new obsidian_module.Setting(this.contentEl).setName(t$d("ES_YOUTUBE_START")).setDesc(t$d("ES_YOUTUBE_START_DESC")).addText((e=>e.setValue(this.youtubeStart).onChange((async e=>{this.youtubeStart=e})))),(this.isMDFile||this.notExcalidrawIsInternal)&&(this.contentEl.createEl("h3",{text:t$d("ES_EMBEDDABLE_SETTINGS")}),new EmbeddalbeMDFileCustomDataSettingsComponent(this.contentEl,this.mdCustomData,void 0,this.isMDFile).render()),new obsidian_module.Setting(this.contentEl).addButton((e=>e.setButtonText(t$d("PROMPT_BUTTON_CANCEL")).setTooltip("ESC").onClick(this.close.bind(this)))).addButton((e=>e.setButtonText(t$d("PROMPT_BUTTON_OK")).setTooltip("CTRL/Opt+Enter").setCta().onClick(this.applySettings.bind(this))));const i=e=>{isWinCTRLorMacCMD(e)&&"Enter"===e.key&&this.applySettings()};this.onKeyDown=i;const a=this.containerEl.ownerDocument;a&&(this.listenerHost=a,a.addEventListener("keydown",i))}async applySettings(){let e=!1;const t=this.ea.getElement(this.element.id);if(this.updatedFilepath){const i=`${this.updatedFilepath}.${this.file.extension}`;if(i!==this.file.path){const a=splitFolderAndFilename(i),n=getNewUniqueFilepath(this.app.vault,a.filename,a.folderpath);if(this.app.vault.getAbstractFileByPath(n))new obsidian_module.Notice("File rename failed. A file with this name already exists.\n"+n,1e4);else try{await this.app.fileManager.renameFile(this.file,n),t.link=this.element.link.replace(/(\[\[)([^#\]]*)([^\]]*]])/,`$1${this.plugin.app.metadataCache.fileToLinktext(this.file,this.view.file.path,!0)}$3`),e=!0}catch(e){new obsidian_module.Notice("File rename failed. "+e,1e4)}}}this.isYouTube&&this.youtubeStart!==getYouTubeStartAt(this.element.link)&&(e=!0,""===this.youtubeStart||isValidYouTubeStart(this.youtubeStart)?t.link=updateYouTubeStartTime(t.link,this.youtubeStart):new obsidian_module.Notice(t$d("ES_YOUTUBE_START_INVALID"))),!this.isMDFile||this.mdCustomData.backgroundColor===this.element.customData?.backgroundColor&&this.mdCustomData.borderColor===this.element.customData?.borderColor&&this.mdCustomData.backgroundOpacity===this.element.customData?.backgroundOpacity&&this.mdCustomData.borderOpacity===this.element.customData?.borderOpacity&&this.mdCustomData.filenameVisible===this.element.customData?.filenameVisible||(addAppendUpdateCustomData(t,{mdProps:this.mdCustomData}),e=!0),this.zoomValue!==this.element.scale[0]&&(e=!0,t.scale=[this.zoomValue,this.zoomValue]),e?(async()=>{await this.ea.addElementsToView(),this.ea.viewUpdateScene({appState:{},captureUpdate:CaptureUpdateAction.NEVER}),this.close()})():this.close()}}class EmbeddableMenu{view;containerRef;menuFadeTimeout=0;menuElementId=null;constructor(e,t){this.view=e,this.containerRef=t}destroy(){this.menuFadeTimeout&&(clearTimeout(this.menuFadeTimeout),this.menuFadeTimeout=null),this.view=null,this.containerRef=null,this.updateElement=null,this.handleMouseEnter=null,this.handleMouseLeave=null,this.renderButtons=null}updateElement=async(e,t,i,a=!0)=>{if(!t)return;const n=this.view,r=n.app;if(t=n.excalidrawAPI.getSceneElements().find((e=>e.id===t.id)),!t)return;const s=`[[${r.metadataCache.fileToLinktext(i,n.file.path,"md"===i.extension)}${e}]]`,o=getEA(n);o.copyViewElementsToEAforEditing([t]),o.getElement(t.id).link=s,n.excalidrawData.elementLinks.set(t.id,s),await o.addElementsToView(!1,a,!0),o.destroy()};handleMouseEnter(){clearTimeout(this.menuFadeTimeout),this.containerRef.current?.style.setProperty("opacity","1")}handleMouseLeave(){this.menuFadeTimeout=window.setTimeout((()=>{this.containerRef.current?.style.setProperty("opacity","0.2")}),5e3)}async actionBaseViewSelection(e,t,i){this.view.updateScene({appState:{activeEmbeddable:null},captureUpdate:CaptureUpdateAction.NEVER});const a=Array.from((await this.view.app.vault.read(e)).matchAll(/\s*name\: (.*)$/gm)).map((e=>e?.[1]));let n,r;n=[""].concat(a.map((e=>`#${cleanSectionHeading(e)}`))),r=[t$d("DO_NOT_PIN_VIEW")].concat(a.map((e=>e)));const s=await ScriptEngine.suggester(this.view.app,r,n,t$d("SELECT_VIEW"));(s||""===s)&&s!==t&&this.updateElement(s,i,e)}async actionMarkdownSelection(e,t,i,a){this.view.updateScene({appState:{activeEmbeddable:null},captureUpdate:CaptureUpdateAction.NEVER});const n=(await this.view.app.metadataCache.blockCache.getForFile({isCancelled:()=>!1},e)).blocks.filter((e=>e.display&&"heading"===e.node?.type)).filter((e=>!t||!MD_EX_SECTIONS.includes(e.display)));let r,s;t?(r=n.map((e=>`#${cleanSectionHeading(e.display)}`)),s=n.map((e=>e.display))):(r=[""].concat(n.map((e=>`#${cleanSectionHeading(e.display)}`))),s=[t$d("SHOW_ENTIRE_FILE")].concat(n.map((e=>e.display))));const o=await ScriptEngine.suggester(this.view.app,s,r,t$d("SELECT_SECTION"));(o||""===o)&&o!==i&&this.updateElement(o,a,e)}actionBookmarkPage(e){if(!e)return;const t=this.view.getEmbeddableLeafElementById(e.id)?.node?.child;if(!t)return;const i=getActivePDFPageNumberFromPDFView(t);if(!i)return;const a=t?.file;a&&this.updateElement(`#page=${i}`,e,a,!1)}async actionInsertPageAsImage(e){if(!e)return;const t=this.view.getEmbeddableLeafElementById(e.id)?.node?.child;if(!t)return;const i=getActivePDFPageNumberFromPDFView(t);if(!i)return;const a=t?.file;if(!a)return;const n=getEA(this.view);n.selectElementsInView([]);const r=e.x+e.width+20,s=e.y,o=this.view.app.metadataCache.fileToLinktext(a,this.view.file.path,!1),l=await insertImageToView(n,{x:r,y:s},`${o}#page=${i}`,void 0,void 0,!1);n.selectElementsInView([l]),n.destroy()}async actionMarkdownBlock(e,t,i){if(!e)return;this.view.updateScene({appState:{activeEmbeddable:null},captureUpdate:CaptureUpdateAction.NEVER});const a=(await this.view.app.metadataCache.blockCache.getForFile({isCancelled:()=>!1},e)).blocks.filter((e=>e.display&&e.node&&("paragraph"===e.node.type||"blockquote"===e.node.type||"listItem"===e.node.type||"table"===e.node.type||"callout"===e.node.type))),n=["entire-file"].concat(a),r=[t$d("SHOW_ENTIRE_FILE")].concat(a.map((e=>`${e.node?.id?`#^${e.node.id}: `:""}${e.display.trim()}`))),s=await ScriptEngine.suggester(this.view.app,r,n,t$d("SELECT_SECTION"));if(!s)return;if("entire-file"===s){if(""===t)return;return void this.updateElement("",i,e)}let o=s.node.id;if(!o||`#^${o}`!==t){if(!o){const t=s.node?.position?.end?.offset;if(!t)return;o=nanoid();const i=await this.view.app.vault.cachedRead(e);if(!i)return;await this.view.app.vault.modify(e,i.slice(0,t)+` ^${o}`+i.slice(t)),await sleep(200)}this.updateElement(`#^${o}`,i,e)}}actionZoomToElement(e,t){e&&this.view.excalidrawAPI.zoomToFit([e],t??this.view.plugin.settings.zoomToFitMaxLevel,.1)}actionProperties(e,t){e&&new EmbeddableSettings(this.view.plugin,this.view,t,e).open()}actionCrop(e){e&&this.view.app.commands.executeCommandById("obsidian-excalidraw-plugin:crop-image")}actionReload(e,t){e.src=t}actionOpen(e,t){openExternalLink(e.src.startsWith("https://www.youtube.com")||e.src.startsWith("https://player.vimeo.com")?t.link:e.src,this.view.app)}actionCopyCode(e,t){e&&navigator.clipboard.writeText(atob(t.split(",")[1]))}renderButtons(e){const t=this.view,i=t?.excalidrawAPI;if(!i)return null;if(!t.file)return null;const a=e.viewModeEnabled&&!t.allowFrameButtonsInViewMode;if(!e.activeEmbeddable||"active"!==e.activeEmbeddable.state||a)return this.menuElementId=null,this.menuFadeTimeout&&(clearTimeout(this.menuFadeTimeout),this.menuFadeTimeout=0),null;const n=e.activeEmbeddable?.element;this.menuElementId!==n.id&&(this.menuElementId=n.id,this.handleMouseLeave());let r=n.link;if(!r)return null;const s=useDefaultExcalidrawFrame(n);let o=Boolean(n.link?.match(REG_LINKINDEX_HYPERLINK));if(!s&&!o){if(r.startsWith("data:text/html"))o=!0;else{const e=REGEX_LINK.getRes(n.link).next();if(!e||!e.value&&e.done)return null;r=REGEX_LINK.getLink(e),o=Boolean(r.match(REG_LINKINDEX_HYPERLINK))}if(!o){const{subpath:i,file:a}=processLinkText(r,t);if(!a)return;const s="md"===a.extension,o="base"===a.extension,l=t.plugin.isExcalidrawFile(a),c="pdf"===a.extension,{x:d,y:h}=sceneCoordsToViewportCoords({sceneX:n.x,sceneY:n.y},e),p=h-2.5*ROOTELEMENTSIZE-e.offsetTop+"px",u=d-e.offsetLeft+"px";return React__namespace.createElement("div",{ref:this.containerRef,className:"embeddable-menu",style:{top:p,left:u,opacity:1},onMouseEnter:()=>this.handleMouseEnter(),onPointerDown:()=>this.handleMouseEnter(),onMouseLeave:()=>this.handleMouseLeave()},React__namespace.createElement("div",{className:"Island",style:{position:"relative",display:"block"}},o&&React__namespace.createElement(ActionButton,{key:"MarkdownSection",title:t$d("PIN_VIEW"),action:async()=>this.actionBaseViewSelection(a,i,n),icon:ICONS.ZoomToSection}),s&&React__namespace.createElement(ActionButton,{key:"MarkdownSection",title:t$d("NARROW_TO_HEADING"),action:async()=>this.actionMarkdownSelection(a,l,i,n),icon:ICONS.ZoomToSection}),s&&!l&&React__namespace.createElement(ActionButton,{key:"MarkdownBlock",title:t$d("NARROW_TO_BLOCK"),action:async()=>this.actionMarkdownBlock(a,i,n),icon:ICONS.ZoomToBlock}),React__namespace.createElement(ActionButton,{key:"ZoomToElement",title:t$d("ZOOM_TO_FIT"),action:()=>this.actionZoomToElement(n,30),icon:ICONS.ZoomToSelectedElement}),React__namespace.createElement(ActionButton,{key:"Properties",title:t$d("PROPERTIES"),action:()=>this.actionProperties(n,a),icon:ICONS.Properties}),c&&React__namespace.createElement(React__namespace.Fragment,null,React__namespace.createElement(ActionButton,{key:"Crop",title:t$d("CROP_PAGE"),action:()=>this.actionCrop(n),icon:ICONS.Crop}),React__namespace.createElement(ActionButton,{key:"Bookmark",title:t$d("BOOKMARK_PAGE"),action:()=>this.actionBookmarkPage(n),icon:ICONS.Bookmark}),React__namespace.createElement(ActionButton,{key:"Camera",title:t$d("CAPTURE_PAGE"),action:()=>this.actionInsertPageAsImage(n),icon:ICONS.Camera}))))}}if(o||s){const a=s?i.getHTMLIFrameElement(n.id):t.getEmbeddableElementById(n.id);if(!a||!a.contentWindow)return null;const{x:o,y:l}=sceneCoordsToViewportCoords({sceneX:n.x,sceneY:n.y},e),c=l-2.5*ROOTELEMENTSIZE-e.offsetTop+"px",d=o-e.offsetLeft+"px";return React__namespace.createElement("div",{ref:this.containerRef,className:"embeddable-menu",style:{top:c,left:d,opacity:1},onMouseEnter:()=>this.handleMouseEnter(),onPointerDown:()=>this.handleMouseEnter(),onMouseLeave:()=>this.handleMouseLeave()},React__namespace.createElement("div",{className:"Island",style:{position:"relative",display:"block"}},a.src!==r&&!a.src.startsWith("https://www.youtube.com")&&!a.src.startsWith("https://player.vimeo.com")&&React__namespace.createElement(ActionButton,{key:"Reload",title:t$d("RELOAD"),action:()=>this.actionReload(a,r),icon:ICONS.Reload}),React__namespace.createElement(ActionButton,{key:"Open",title:t$d("OPEN_IN_BROWSER"),action:()=>this.actionOpen(a,n),icon:ICONS.Globe}),React__namespace.createElement(ActionButton,{key:"ZoomToElement",title:t$d("ZOOM_TO_FIT"),action:()=>this.actionZoomToElement(n),icon:ICONS.ZoomToSelectedElement}),React__namespace.createElement(ActionButton,{key:"Properties",title:t$d("PROPERTIES"),action:()=>this.actionProperties(n,null),icon:ICONS.Properties}),r?.startsWith("data:text/html")&&React__namespace.createElement(ActionButton,{key:"CopyCode",title:t$d("COPYCODE"),action:()=>this.actionCopyCode(n,r),icon:ICONS.Copy})))}}}const handleImageEditPrompt=async e=>{const t=window.ExcalidrawAutomate.plugin,{openAIAPIToken:i,openAIImageEditsURL:a,openAIDefaultImageGenerationModel:n}=t.settings,{image:r,text:s,imageGenerationProperties:o}=e,l=new FormData;if(l.append("model",n),""!==s.trim()&&l.append("prompt",s),r){const e=await fetch(r).then((e=>e.blob()));l.append("image",e,"image.png")}if(o.mask){const e=await fetch(o.mask).then((e=>e.blob()));l.append("mask",e,"mask.png")}o.size&&l.append("size",o.size),o.n&&l.append("n",String(o.n));try{const e=await fetch(a,{method:"post",body:l,headers:{Authorization:`Bearer ${i}`}});return e?{status:e.status,headers:e.headers,text:null,json:await e.json(),arrayBuffer:null}:null}catch(e){console.log(e)}return null},handleGenericPrompt=async e=>{const t=window.ExcalidrawAutomate.plugin,{openAIAPIToken:i,openAIDefaultTextModel:a,openAIDefaultTextModelMaxTokens:n,openAIDefaultVisionModel:r,openAIURL:s,openAIImageGenerationURL:o,openAIDefaultImageGenerationModel:l}=t.settings,{image:c,text:d,instruction:h,systemPrompt:p,imageGenerationProperties:u}=e,m=Boolean(u);let g;switch(m?"dall-e":c?"image":"text"){case"text":g={model:a,...n>0&&{max_tokens:n},messages:[...p&&""!==p.trim()?[{role:"system",content:p}]:[],{role:"user",content:d},...h&&""!==h.trim()?[{role:"user",content:h}]:[]]};break;case"image":g={model:r,...n>0&&{max_tokens:n},messages:[...p&&""!==p.trim()?[{role:"system",content:p}]:[],{role:"user",content:[{type:"image_url",image_url:c},...d?[d]:[],...h&&""!==h.trim()?[h]:[]]}]};break;case"dall-e":g={model:l,prompt:d,...u};break;default:return null}try{const e=await fetch(m?o:s,{method:"post",contentType:"application/json",body:JSON.stringify(g),headers:{"Content-Type":"application/json",Authorization:`Bearer ${i}`}});return e?{status:e.status,headers:e.headers,text:null,json:await e.json(),arrayBuffer:null}:null}catch(e){console.log(e)}return null},postOpenAI=async e=>{const t=window.ExcalidrawAutomate.plugin,{openAIAPIToken:i}=t.settings,{image:a,imageGenerationProperties:n}=e,r=Boolean(n)&&(Boolean(n.mask)||Boolean(a));return""===i?(new obsidian_module.Notice("OpenAI API Token is not set. Please set it in plugin settings."),null):r?await handleImageEditPrompt(e):await handleGenericPrompt(e)},extractCodeBlocks=e=>{if(!e)return[];e=e.replaceAll("\r\n","\n").replaceAll("\r","\n");const t=[],i=/```([a-zA-Z0-9]*)\n([\s\S]+?)```/g;let a;for(;null!==(a=i.exec(e));){const e=a[1]??"",i=a[2].trim();t.push({data:i,type:e})}return t},errorHTML=e=>`\n \n